Osp*_*pho 3 c avr signal-processing fft spectrum
我正在为8位Atmega32开发频谱分析仪,输出到LCD显示器上.最大采样频率为40kHz,最大频率为20kHz,符合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
Run Code Online (Sandbox Code Playgroud)
输出频谱目前具有FFT_N/2 = 32个频段,每个频段代表1Hz.因此,我的频谱目前代表的最高频率(我已经测试过) - 32Hz.如何增加这些箱的"频率宽度",使每个箱子代表625Hz?请记住,由于存在内存限制,我无法将FFT_N的大小增加到64~128以上.
将保罗的例子翻译成范围:
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)
Run Code Online (Sandbox Code Playgroud)
请注意Bin[0]和Bin[32](基于零的数组中的第 33 个 bin)如何接收来自“负”频率的贡献。
这与 FFT(或任何复杂的离散傅立叶变换)的周期性性质一致。
每个箱的宽度(Hz)取决于两件事:采样率,Fs(Hz)和FFT箱的数量,N:
bin_width = Fs / N;
Run Code Online (Sandbox Code Playgroud)
因此,如果您在FFT处进行采样,Fs = 40 kHz并且您N = 64的FFT中有垃圾箱,则每个垃圾箱的宽度为625 Hz.感兴趣的箱子是从0到N/2 - 1的箱子:
Bin 0 0 Hz
Bin 1 625 Hz
Bin 2 1250 Hz
...
Bin 31 19,375 Hz
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11744 次 |
| 最近记录: |