我如何获得定义频带中的所有 fft bin 数量?

Posted

技术标签:

【中文标题】我如何获得定义频带中的所有 fft bin 数量?【英文标题】:How do i get all the numbers of fft bins in a defined frequency band? 【发布时间】:2016-12-20 10:43:28 【问题描述】:

我使用 matlab 软件。对于我的问题。 我有一个音频信号,我在其上应用 STFT。我截一段 (46 ms, specifially chosen) 超出我的信号 y(audio signal) 并在其上使用 FFT。然后我进入下一段,直到我的音频信号结束。

我的 WAV 文件长 10.8526 秒。如果我的采样频率为 44100Hz,这意味着我的y10.8526*fs = 478599.66 这是 在工作区中显示为478 6000 x2 double

我的fft 的长度是2048。我的信号在较低频段[0 300]mfb [301 5000]hfb [5001 22050(fs/2)]下是有区别的。

乐队只是一个例子,而不是实际的matlab 代码。 Basicall 我想要(或我想要做的)是在定义的频带中获取我的 bin 的值并对其进行算术平均值。

我选择 46 毫秒是因为,我希望它与 fft 一样长,或者几乎与 fft 一样长。 (It is not exact).Afterwards,我想尝试绘制它,但这并不重要。任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

在一个大小为 n 的向量中对时域信号进行傅里叶变换将返回另一个大小为 n 的相同信号但在频域中的向量。

频域将从 0(直流偏移)到您的采样频率。但是你只能使用其中的一半。后半部分将具有相同的值但已镜像。

您可以通过以下方式获得每个有用 bin 的中心频率:

f = Fs*(0:(n/2))/n;

【讨论】:

首先,感谢您的回答。我不太确定变量“n”代表什么?我知道,fft 是如何工作的,但我会尝试解决这个问题。不幸的是,我对 matlab 编程的知识有限 "n" 是你的 fft 的长度。在你的情况下 2048

以上是关于我如何获得定义频带中的所有 fft bin 数量?的主要内容,如果未能解决你的问题,请参考以下文章

解释 numpy.fft.fft2 输出

选带快速傅立叶变换ZOOM-FFT的matlab实现

如何在频率中指定一定数量的fft点

通过 C 中的 FFT 将 1000Hz 噪声添加到 wav 文件

Android AudioRecord - 在没有库的情况下获得 FFT 的最佳方式

如何获得 FFT 中每个值的频率?