Алгоритм определения основной частоты от потенциальных гармоник
Я пытаюсь извлечь основную частоту из источника звука. возможно, кто-то поет A3 в микрофон, поэтому я хочу обнаружить ~ 110 Гц
мой подход:
- FFT 1024 floats
- используйте фазу каждого бункера для точного определения его точной частоты.
- определить пики (обычно 50 или около того)
- закажите их с самым громким первым
(пик [0].power = 1063.343750,.freq = 2032.715088
(Пик [1] .power = 1047.764893,.freq = 3070.605225
(Пик [2].power = 1014.986877,.freq = 5925.878418
(Пик [3].power = 1011.707825,.freq = 6963.769043
(Пик [4].power = 1009.152954,.freq = 4022.363037
(Пик [5].power = 995.199585,.freq = 4974.120605
(Пик [6].power = 987.243713,.freq = 8087.792480
(Пик [7].power = 533.514832,.freq = 908.691833
- (MARKER1) начнется с самого громкого и сравним его со всеми оставшимися пиками, поэтому, если бы у меня было N пиков, в этой точке у меня будут пары пика N-1
- проверить каждую пиковую пару на гармоничность; т.е. насколько это близко к некоторой доле a/b, т.е. мы можем найти a/b с b < 20, что | peakA.freq/peakB.freq - a/b | < 0.01 (это соответствовало бы гармоникам до 20-го).
-
теперь у нас есть уточненный список пиков, которые считаются гармоническими друг с другом
Harmonic PeakPair: (0,1) = 2/3, ошибка: 0.00468 = > f0 @1019.946289
Harmonic PeakPair: (0,2) = 1/3, ошибка: 0.00969 = > f0 @2004.003906
Harmonic PeakPair: (0,3) = 2/7, ошибка: 0,00618 = > f0 @1005.590820
Harmonic PeakPair: (0,4) = 1/2, ошибка: 0,00535 = > f0 @2021.948242
Harmonic PeakPair: (0,5) = 2/5, ошибка: 0,00866 = > f0 @1005.590820
Harmonic PeakPair: (0,6) = 1/4, ошибка: 0,00133 = > f0 @2027.331543
Harmonic PeakPair: (0,7) = 9/4, ошибка: 0,01303 = > f0 @226.515106
Мой вопрос: как я могу разработать алгоритм, который правильно идентифицирует вышеупомянутое фундаментальное значение как ~ 1000 Гц?
Отнюдь не гарантировано, что будет более высокая концентрация значений на ~ 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 и т.д., Хотя некоторые могут отсутствовать.
реалистично у меня такое чувство, что это всегда будет либо фундаментальная, либо первая гармоника, обладающая наибольшей силой. но я не знаю, могу ли я полагаться на это...
так много факторов, это делает мою голову плавать. Я заранее извиняюсь за такой грязный вопрос. Надеюсь, я посчитаю это посмертно.
Ответы
Ответ 1
Я перефразировал вопрос и дал здесь ответ: Как взять набор чисел, например {301,102,99,202,198,103} и выбросить ~ 100?
Я рассмотрел несколько подходов, и это значительно более красноречиво, чем что-либо еще, что я нашел. Я тестировал его, и он работает очень хорошо.
Ответ 2
A Cepstum (или Cepstral analysis) и спектр гармонических продуктов представляют собой два хорошо изученных алгоритма, которые оценивают частоту возбудителя из обертонного ряда.
Если последовательности обертонов расположены соответственно друг от друга, то кепстр (БПФ журнала БПФ-пиков) может быть полезен при оценке периода интервала частот, который затем может использоваться для оценки частоты.
Спектр гармонических продуктов в основном сравнивает спектральные пики с n-м множеством копий, уменьшая спектр за счет множественных отношений с низким целым числом и перекрывая их.
Ответ 3
Вы можете перейти по следующей ссылке для статьи о распознавании речи.
Статья: Параметр распределения точки фазы для распознавания речи (подписка требуется для полного текста)