c - FFT bin 宽度说明

标签 c signal-processing fft avr spectrum

我正在为输出到 LCD 显示器的 8 位 Atmega32 开发频谱分析仪。 最大采样频率为 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

输出频谱当前有 FFT_N/2 = 32 个 bin,每个代表 1Hz。因此,我的频谱目前代表的最高频率(我已经测试过)- 32Hz。 如何增加这些箱子的“频率宽度”,以便每个箱子代表 625Hz? 请记住,我不能将 FFT_N 的大小增加到超过 64~128,因为我有内存限制。

最佳答案

每个 bin 的宽度 (Hz) 取决于两个因素:采样率 Fs (Hz) 和 FFT bin 的数量 N:

bin_width = Fs / N;

因此,如果您以 Fs = 40 kHz 采样,并且您的 FFT 中有 N = 64 个 bin,则每个 bin 的宽度为 625 Hz。感兴趣的箱子将是从 0 到 N/2 - 1 的箱子:

Bin 0        0 Hz
Bin 1      625 Hz
Bin 2     1250 Hz
...
Bin 31  19,375 Hz

关于c - FFT bin 宽度说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10754549/

相关文章:

c - 我的维吉尼亚密码无法正常工作的原因是什么?

C程序输出令人困惑

c# - 自定义音频效果如何在AudioFileInputNode完成播放后产生一些声音

python - 为什么在 NumPy 中填充 FFT 会使它运行得更慢?

audio - 分别对立体声信号的两个 channel 应用 FFT?

java - 将变量从 Activity 传递到自定义 View 类

c - 是 i=f();当 f 修改 i 时定义?

java - 是否可以从 Java 运行 C 源代码?

filter - 什么是 6 抽头滤波器以及它们在编解码器之间有何不同?

c++ - 如何使用 Juce 加载脉冲响应的音频文件