如何从 44kHz 音频信号中提取 32 个均匀间隔的频段?

信息处理 声音的 fft
2022-02-15 17:51:57

假设我有一个浮点数组,其中包含最后播放的 8192 个样本。我如何将该数组转换为 32 个频率区间,它们间隔为 0Hz - Nqyst?

1个回答

取决于你想用它做什么。一些可能性:

  1. 具有 64 FFT 长度的短时傅立叶变换将为您提供 33 个作为时间函数的 bin。这些实际上是 31 个“正常”bin(具有幅度和相位)和 2 个“半”bin,只有幅度(DC 和 Nyquist)和带宽的一半。如果您的输入向量很复杂,您可以使用 32 的 FFT 长度并获得 32 个“正常”箱。
  2. 对整个序列进行 FFT,在频域中创建您想要的任何 bin,然后简单地整合每个 bin 中的能量。但是,这将丢弃所有相位信息。
  3. 如果您确实需要 32 位等距复数频率箱来获取实值输入信号,您可以对频率采样网格进行“半箱旋转”。您基本上将您的序列与 FFT 网格之前的 exp(-jw/N * (n/2)) 相乘。然后,我们的第一个 bin 将从 0Hz 变为 1378Hz,而不是从 -689Hz 变为 689Hz。

这实际上取决于您希望如何进行频率分级。你关心中心频率或频带边缘的位置吗?您需要锋利的边缘或重叠部分吗?你需要幅度和相位吗?输入是实数还是复数?所有这些因素都会影响正确的分箱程序。

让我们看一下根据时域麦克风信号计算 A 加权声压级的示例。您的输入是真正有价值的,即您可以忽略负频率。你关心中心频率,但你需要一个对数间隔的网格。您希望频带之间有一些重叠,以便接近频带边缘的频率在两个频带中都有一些贡献。然而,重叠应该节约能量,因此总能量与频率无关。我们不关心相位,所以我们可以简单地将能量整合到一个波段内得到一个数字。

正如这个例子所示,频率分级是依赖于应用程序的,并不像人们最初想象的那样微不足道。