Я пытаюсь использовать БПФ для правильной идентификации входного сигнала? - PullRequest
0 голосов
/ 05 марта 2012

Я пытаюсь реализовать БПФ, и я хотел бы спросить, кажется ли то, что я делаю, правильным. Я использую GSL (GNU Science Library) для функции FFT. Я читал учебники по БПФ, но я все же хотел бы попросить кого-нибудь проверить, что я иду в правильном направлении.

Вот метод, который я придумал через веб-материал:

The input is a list of the amplitudes of a sin wave generated 
in audacity at 440Hz (A).  

The sample rate is 44100

# FFT points: 1024

Может кто-нибудь объяснить, как выбрать количество точек FFT? Или имеет ли это значение вообще. Возможно, я упустил это из виду, но не могу найти способ выбрать это число.
Редактировать: я думаю, что более уместно назвать это окно FFT, так как вы перемещаете окно 1024 точек по семплам, чтобы найти частоту.

 bin size = 44100 / 1024 = 43.066

после запуска БПФ у меня есть еще один список амплитуд и в зависимости от того, в какой ячейке они находятся, то есть частота, которая определяется, верно? Итак, чтобы найти частоту генерируемого сигнала, я хочу найти самый высокий пик?

A bin is defined as a peak if and only if the bin has an amplitude greater than 
2 bins to the left and 2 bins to the right.

Находится ли этот метод на правильном пути для получения частоты входного сигнала?

1 Ответ

2 голосов
/ 05 марта 2012

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

Что касается использования БПФ для спектральной оценки, чем длиннее БПФ, тем ближе интервал между ячейками БПФ по частоте, что полезно, если оцениваемая частота является стационарной в течение всего времени окна.

...