Я разрабатываю анализатор спектра для 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, так как у меня есть ограничения памяти.