2013-05-26 3 views
0

Я работаю над приложением гитарного тюнера. Я понимаю, что БПФ является плохим выбором для такого рода приложений. Однако по мере приближения крайних сроков, и в моем первоначальном представлении спецификации указано использование этого алгоритма. К сожалению, я застрял в этом.Приложение гитарного тюнера FFT - некорректная частота

Благодаря ответам на предыдущие вопросы и использование этого блога: http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html

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

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

например, C-считывание будет иметь резкость B или C в разных октавах. Расстояние от телефона от источника шума также влияет на показания.

Есть ли известный пример этого возникновения и исправления, или это из-за алгоритма FFT, и мое приложение не может работать правильно?

Мой код можно найти на предыдущей: Displaying a double (frequency) that is updated constantly while recording with Android

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

+1

Вы должны сделать некоторые отладки первой. Например, посмотрели ли вы на график вывода вашего БПФ? Является пиком, где вы ожидаете? –

+0

График отображается правильно. в том, что частота, которую он вычисляет, соответствует точке на графике. Тем не менее, это не та самая частота, которую читают. –

+0

Что вы подразумеваете под «частотой чтения»? Вы имеете в виду частоту источника звука? Если да, то каким образом они отличаются? –

ответ

1

Если ваша частота выключена немного, это может означать, что вам нужно использовать более длинный БПФ или алгоритм оценки пика (например, параболическое или другое ядро ​​интерполяции) по результату БПФ.

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

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

+0

Я думаю, что моя частота дискретизации может быть неправильной.У меня есть следующее: \t int blockSize = 1024; \t \t \t \t \t \t \t \t INT SAMPLERATE = 44100; \t давая мне диапазон от 0 до 21,533 гц Я не уверен, что это правильно для того, что я ищу –

+0

Не могли бы вы рекомендовать частоту и частоту дискретизации? –