Уточнение ширины бина БПФ

Я разрабатываю анализатор спектра для 8-битного Atmega32, который выводится на ЖК-дисплей. Максимальная частота дискретизации составляет 40 кГц, а максимальная частота, следовательно, составляет 20 кГц, при fs> 2B. В настоящий момент я генерирую сигнал внутри себя, затем применяю к нему БПФ и просматриваю спектр на ЖК-дисплее.

Обратите внимание, что это написано в псевдокоде:

 #define SIG_N 128 //Number of samples in signal buffer
 #define FFT_N 64  //2*Output bins 
 uint_8 signal[SIG_N];
 uint_8 spektrum[FFT_N];

 for (int i = 0; i < SIG_N; i++){
   signal[i] = 255*sin(2*3.14*f*i / SIG_N);
 }
 computeFFT(signal,spektrum,FFT_N); //arbitrary method computes signal outputs spektrum

Выходной спектр в настоящее время имеет FFT_N / 2 = 32 бина, каждый представляет 1 Гц. Поэтому самая высокая частота, которую сейчас представляет мой спектр (я это тестировал) - 32 Гц. Как я могу увеличить "частотную ширину" этих интервалов, чтобы каждый интервал представлял 625 Гц? Помните, я не могу увеличить размер FFT_N выше 64 ~ 128, так как у меня есть ограничения памяти.


person Ospho    schedule 25.05.2012    source источник


Ответы (2)


Ширина каждого бина (Гц) зависит от двух вещей: частоты дискретизации, Fs (Гц) и количества бинов БПФ, N:

bin_width = Fs / N;

Таким образом, если вы выбираете в Fs = 40 kHz и у вас есть N = 64 бинов в вашем БПФ, то каждая ячейка будет иметь ширину 625 Гц. Интересующие нас интервалы будут от 0 до N / 2 - 1:

Bin 0        0 Hz
Bin 1      625 Hz
Bin 2     1250 Hz
...
Bin 31  19,375 Hz
person Paul R    schedule 25.05.2012
comment
Поскольку я не отбираю этот сигнал, я генерирую его внутренне, это повлияет на это? - person Ospho; 25.05.2012
comment
Когда вы генерируете сигнал внутренне, вы все равно можете иметь условную частоту дискретизации, но, конечно, это может быть все, что вам нравится. Однако, если вы хотите воспроизвести этот сигнал в любое время, тогда частота дискретизации будет такой же, как у вашего ЦАП. - person Paul R; 25.05.2012
comment
Извините еще один быстрый вопрос, есть ли ограничение на размер буфера сигнала SIG_N для выборки на частоте 40 кГц? - person Ospho; 25.05.2012
comment
Не совсем - обычно это будет степень двойки, и вы сделаете ее достаточно большой, чтобы у вашего БПФ было достаточное разрешение для вашего конкретного приложения (при условии, что вы собираетесь работать в частотной области). - person Paul R; 25.05.2012
comment
Спасибо, вы очень помогли! - person Ospho; 25.05.2012

Перевод примера Пола на диапазоны:

Bin 0:    -312.5 Hz  to    312.5 Hz  (center:     0.0 Hz)
Bin 1:     312.5 Hz  to    937.5 Hz  (center:   625.0 Hz)
Bin 2:     937.5 Hz  to   1562.5 Hz  (center:  1250.0 Hz)
...
Bin 32:  19687,5 Hz  to -19687,5 Hz  (center: 20000.0 Hz)

Обратите внимание, как и Bin[0], и Bin[32] (33-я ячейка в массиве с нулевым отсчетом) получают вклады от «отрицательных» частот.

Это согласуется с периодической природой БПФ (или любого сложного дискретного преобразования Фурье).

person villoren    schedule 06.07.2014