从采样音频中获取特定频率分量

信息处理 离散信号 自由度
2022-02-10 02:57:53

处采样了半秒的音频数据如果我对其进行 FFT,我会以为增量获得频率分量。现在假设我想要任意频率的分量,例如,我怎样才能得到它?44.1 kHz2 Hz32.45 Hz

查看维基百科的 DFT 公式:

Xk=n=0N1xnei2πkn/N

我想知道,如果我计算相关的并将其代入方程会怎样?像:k

32.45×2205044100=16.225thenX16.225=n=0N1xnei2π×16.225n/N

那会得到我想要的吗?

2个回答

用于检测单个频率分量的常用 Goertzel 滤波器(或算法)本质上是通过这种方式计算 DFT 的 1 个 bin 的计算优化。

请注意,Goertzel 滤波器和非窗口(或矩形窗口)DFT 的 1 个 bin 不仅响应单个频率,而且具有 Sinc 函数形状的非零带宽滤波器响应,大多数在 Fs/N 宽的数量级上的主瓣响应。因此,半秒长 FFT 的 32 Hz bin 将包含大部分 32.45 Hz 分量,反之亦然,Goertzel 结果也是如此。

请注意,如果 k 是小数或非整数,它对应的 Goertzel 滤波器长度不是所讨论频率周期的精确整数倍,则幅度结果对频率相位会有一​​些依赖性相对于采样窗口中某个点(例如开始)的分量。

而且,与完整的 FFT 不同,DFT 的 1 个 bin 不会告诉您测量的分量与相邻频率(峰值)或信号的其余部分(高于本底噪声)相比是否显着。

但除此之外,是的。

是的,如本文相关文章中所述,您可以以任何频率计算单箱 DFT 毕竟,F = k*f_s/N,其中 f_s 是采样频率,N 是点数。由于 f_s 和 N 是已知的,因此只需计算所需的 k 值即可获得所需的频率。它基本上是放下一个以频率 F 为中心的单个 bin DFT。“bin width”与基于 N 点的任何其他 DFT bin 得到的相同。

自 FFT 出现以来,人们已经习惯将参数“k”(频率指数)视为整数。但是,如果您将 DFT 计算视为相关性,那么您可以将其视为回答以下问题:我的时间记录看起来像特定频率的正弦波还是余弦波?因此,无论“k”的值是多少,也无论您的输入中是否有整数个周期 - 例如,输入中的 3.7825 个周期与正弦和余弦的 3.7825 个周期非常相关你的 DFT bin 的波。您只需要弄清楚要使用的“k”值。

至于相位——好吧,无论是完整的 DFT、单箱 DFT 还是 FFT——你已经定义了时间 = 0 点(你有一个数据点 x(0),不是吗?),相位将是相对于那个点。