首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFT面元宽度澄清

FFT面元宽度澄清
EN

Stack Overflow用户
提问于 2012-05-25 20:35:26
回答 2查看 15.5K关注 0票数 4

我正在开发一种用于8位Atmega32的频谱分析仪,可以输出到液晶显示器上。最大采样频率为40 The,因此最大频率为20 The,坚持fs > 2B。目前,我正在内部生成一个信号,然后将FFT应用于该信号,并在LCD上查看光谱。

请注意,这是用伪代码编写的:

代码语言:javascript
复制
 #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,因为我有内存限制。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-25 20:43:49

每个面元(Hz)的宽度取决于两件事:采样率,Fs (Hz)和FFT面元的数量,N:

代码语言:javascript
复制
bin_width = Fs / N;

因此,如果你在Fs = 40 kHz上采样,并且你的快速傅立叶变换中有N = 64面元,那么每个面元将是625 Hz宽。感兴趣的存储箱将是从0到N/2-1的存储箱:

代码语言:javascript
复制
Bin 0        0 Hz
Bin 1      625 Hz
Bin 2     1250 Hz
...
Bin 31  19,375 Hz
票数 15
EN

Stack Overflow用户

发布于 2014-07-07 06:42:56

将Paul的示例转换为范围:

代码语言:javascript
复制
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 (或任何复杂的离散傅立叶变换)的周期性是一致的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10754549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档