2011-02-06 6 views
1

Я разрабатываю флеш-гитару, и единственным очевидным методом обнаружения частоты данных микрофона является использование БПФ. Тем не менее, после примерно 30 часов исследований я не мог найти лучший способ сделать это. Должен ли я использовать спектр гармонических продуктов (HPS), кепструм или максимальное правдоподобие? Тюнер должен будет показывать частоту от 25 до 3000 Гц.Как получить основную частоту от БПФ?

Кроме того, если кто-то знает о каком-то открытом исходном коде, готовом найти основную частоту, скажите, пожалуйста. Я могу перевести его в ActionScript.

Спасибо!

ответ

2

Я пытаюсь ответить своим основным воспоминанием: когда у вас есть БПФ вашего сигнала, фундаментальное значение не имеет максимальной амплитуды?

+2

Нет, это не так. Это первая гармоника спектра. – Nemeth

+1

@Nemeth: «Первая гармоника» является синонимом «фундаментального», насколько я знаю, и обычно имеет максимальную амплитуду. –

+0

@Jim: для многих инструментов фундаментальные значения * не * имеют самую высокую амплитуду - я не уверен в гитарах, но это может зависеть от ноты и типа гитары. В любом случае, лучше использовать правильный алгоритм определения высоты тона *, а не произвольно рассматривать отдельные компоненты, такие как фундаментальные. –

0

FFT это не лучший способ найти основную частоту музыкального инструмента. На самом деле, да, было бы лучше использовать кепструм. Здесь вы можете найти похожие вопросы: Algorithm to determine fundamental frequency from potential harmonics и здесь: MATLAB - Missing fundamental from an FFT

+0

Что я должен использовать вместо FFT? –

+0

Вы можете использовать автокорреляцию: http://en.wikipedia.org/wiki/Autocorrelation Но, поскольку вы работаете с гитарой, мне кажется, что это более важная концепция, чем основной тон здесь. Поэтому вы должны увидеть RAPT (надежный алгоритм отслеживания высоты тона) здесь: http://www.ee.columbia.edu/~dpwe/papers/Talkin95-rapt.pdf – Nemeth

+0

Согласно статьям RAPT - очень хороший алгоритм. Однако я видел одну реализацию с открытым исходным кодом этого в C, и у нее было сотни строк. – mmatloka

4

Самый простой способ, с которым я имел успех, - использовать БПФ, а затем выполнить Harmonic Product Spectrum. Он прост в реализации и не очень ресурсоемкий, вам просто нужно правильно скомпенсировать результат FFT и делать продукты.

Следующий вопрос должен также быть полезным: Detecting the fundamental frequency