我正在开发一种用于8位Atmega32的频谱分析仪,可以输出到液晶显示器上。最大采样频率为40 The,因此最大频率为20 The,坚持fs > 2B。目前,我正在内部生成一个信号,然后将FFT应用于该信号,并在LCD上查看光谱。
请注意,这是用伪代码编写的:
#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个bin,每个bin代表1 1Hz。因此,我的频谱目前代表的最高频率(我已经测试过了)-32赫兹。我如何增加这些bin的“频率宽度”,使每个bin代表625 so?记住,我不能将FFT_N的大小增加到超过64~128,因为我有内存限制。
发布于 2012-05-25 20:43:49
每个面元(Hz)的宽度取决于两件事:采样率,Fs (Hz)和FFT面元的数量,N:
bin_width = Fs / N;因此,如果你在Fs = 40 kHz上采样,并且你的快速傅立叶变换中有N = 64面元,那么每个面元将是625 Hz宽。感兴趣的存储箱将是从0到N/2-1的存储箱:
Bin 0 0 Hz
Bin 1 625 Hz
Bin 2 1250 Hz
...
Bin 31 19,375 Hz发布于 2014-07-07 06:42:56
将Paul的示例转换为范围:
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位基数为零的阵列中的二进制数),接收来自“负”频率的贡献。
这与FFT (或任何复杂的离散傅立叶变换)的周期性是一致的。
https://stackoverflow.com/questions/10754549
复制相似问题