Алгоритм определения фундаментальной частоты по потенциальным гармоникам

Я пытаюсь извлечь основную частоту из источника звука. может быть, кто-то поет A3 в микрофон, поэтому я хочу обнаружить ~ 110Hz

мой подход:

  • FFT 1024 поплавки
  • используйте участок каждого ящика точно для того чтобы определить свою точную частоту
  • определить пики (обычно 50 или около того)
  • заказать их с громким "первый"!--6-->

(пик[0].мощность=1063,343750, .freq=2032.715088
(Пик[1].мощность=1047.764893, .freq=3070.605225
(Пик[2].мощность=1014.986877, .freq=5925.878418
(Пик[3].мощность=1011.707825, .freq=6963.769043
(Пик[4].мощность=1009.152954, .freq=4022.363037
(Пик[5].мощность=995.199585, .freq=4974.120605
(Пик[6].мощность=987.243713, .freq=8087.792480
(Пик[7].мощность=533.514832, .freq=908,691833

  • (MARKER1) начните с самого громкого и сопоставьте его со всеми остальными пики, поэтому, если бы у меня было N пиков, я буду иметь в этой точке N-1 пик-пар
  • исследуйте каждую пиковую пару на гармонию; т. е. насколько она близка к некоторой доле a/b, т. е. можем ли мы найти a |b с b
  • теперь у нас есть уточненный список пиков, которые считаются гармоническими друг с другом

    гармонические PeakPair: (0,1)=2/3, ошибка:0.00468 => ф0 @ 1019.946289
    Гармоническое PeakPair: (0,2)=1/3, ошибка:0.00969 => ф0 @ 2004.003906
    Гармоническое PeakPair: (0,3)=2/7, ошибка:0.00618 => ф0 @ 1005.590820
    Гармоническое PeakPair: (0,4)=1/2, ошибка:0.00535 => ф0 @ 2021.948242
    Гармоническое PeakPair: (0,5)=2/5, ошибка:0.00866 => ф0 @ 1005.590820
    Гармоническое PeakPair: (0,6)=1/4, ошибка:0.00133 => ф0 @ 2027.331543
    Гармоническая Пиковая пара: (0,7)=9/4, ошибка:0.01303 => f0 @ 226.515106

мой вопрос: как может Я разрабатываю алгоритм, который правильно идентифицирует вышеуказанный фундаментальный как ~1000Hz?

ни в коем случае не гарантируется, что будет более высокая концентрация значений при ~1000, чем при ~2000 или ~3000 и т. д. даже не гарантируется, что будет какая-либо запись ~1000. у нас может быть ~5000 X одна запись, ~4000 x три записи, ~3000 x 2 записи и пара фиктивных значений, плавающих вокруг, как 226 в приведенном выше списке.

думаю, я могу повторить процедуру опять же, отсеивание предложенных основ, которые не являются "гармоническими" с остальной частью списка. это, по крайней мере, избавит нас от фальшивых ценностей...

может быть, я даже не прошу правильный вопрос. Может, весь этот подход отстой. Но я думаю, что имеет смысл выбрать самый сильный пик и извлечь набор гармоник, связанных с этим пиком.

в теории, которая должна генерировать нагрузку коэффициентов, скажем, если исходный самый сильный пик был третьей гармоникой, то этот набор пиков должна содержать 3/1 3/2 3/3 3/4 3/5 3/6 3/7 и т. д... хотя некоторые могут отсутствовать.

реалистично у меня такое чувство, что это всегда будет либо фундаментальная, либо первая гармоника, которая имеет наибольшую силу. но я не знаю, Могу ли я положиться на это...

так много факторов, это заставляет мою голову плыть. Заранее приношу извинения за такой запутанный вопрос. Надеюсь, я смогу привести его в порядок посмертно.

3 ответов


Cepstum (или Cepstral анализ) и гармонический спектр продукта-два хорошо изученных алгоритма, которые оценивают частоту возбудителя из серии обертонов.

Если последовательности обертонов соответствующим образом разнесены, то Cepstrum (FFT журнала пиков FFT) может быть полезен при оценке периода интервала частот, который затем может быть использован для оценки частоты.

гармонический спектр продукта в основном сравнивает спектральные пики с nth несколько копий самих себя, уничтожая спектр несколькими низкими целочисленными отношениями и перекрывая их.


вы можете перейти по следующей ссылке для статьи о распознавании речи.

статьи: параметр распределения точки фазового пространства для распознавания речи (требуется подписка на полный текст)


я перефразировал вопрос и дал ответ здесь:Как взять набор чисел типа {301,102,99,202,198,103} и выбросить ~100?

Я просмотрел несколько подходов, и это значительно более кратко, чем все, что я нашел. Я испытывал его и он работает очень хорошо.