Я рассмотрел несколько подходов, и это значительно более кратко, чем все остальное, что я нашел. Я проверил это, и это работает очень хорошо.
аюсь извлечь основную частоту из источника звука. может быть, кто-то поет A3 в микрофон, поэтому я хочу обнаруживать ~ 110 Гц
мой подход:
БПФ 1024 поплавкииспользуйте фазу каждого бина, чтобы точно определить его точную частотуопределить пики (обычно 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
Теперь у нас есть уточненный список пиков, которые считаются гармоничными друг с другом
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 и т. д. ... хотя некоторые могут отсутствовать.
Реально у меня есть ощущение, что это всегда будет либо фундаментальная, либо первая гармоника, обладающая наибольшей силой. но я не знаю, могу ли я положиться на это ...
так много факторов, это заставляет мою голову плавать. Заранее извиняюсь за такой грязный вопрос. Надеюсь, я смогу привести в порядок посмертно.