假设我有一个浮点数组,其中包含最后播放的 8192 个样本。我如何将该数组转换为 32 个频率区间,它们间隔为 0Hz - Nqyst?
如何从 44kHz 音频信号中提取 32 个均匀间隔的频段?
信息处理
声音的
fft
2022-02-15 17:51:57
1个回答
取决于你想用它做什么。一些可能性:
- 具有 64 FFT 长度的短时傅立叶变换将为您提供 33 个作为时间函数的 bin。这些实际上是 31 个“正常”bin(具有幅度和相位)和 2 个“半”bin,只有幅度(DC 和 Nyquist)和带宽的一半。如果您的输入向量很复杂,您可以使用 32 的 FFT 长度并获得 32 个“正常”箱。
- 对整个序列进行 FFT,在频域中创建您想要的任何 bin,然后简单地整合每个 bin 中的能量。但是,这将丢弃所有相位信息。
- 如果您确实需要 32 位等距复数频率箱来获取实值输入信号,您可以对频率采样网格进行“半箱旋转”。您基本上将您的序列与 FFT 网格之前的 exp(-jw/N * (n/2)) 相乘。然后,我们的第一个 bin 将从 0Hz 变为 1378Hz,而不是从 -689Hz 变为 689Hz。
这实际上取决于您希望如何进行频率分级。你关心中心频率或频带边缘的位置吗?您需要锋利的边缘或重叠部分吗?你需要幅度和相位吗?输入是实数还是复数?所有这些因素都会影响正确的分箱程序。
让我们看一下根据时域麦克风信号计算 A 加权声压级的示例。您的输入是真正有价值的,即您可以忽略负频率。你关心中心频率,但你需要一个对数间隔的网格。您希望频带之间有一些重叠,以便接近频带边缘的频率在两个频带中都有一些贡献。然而,重叠应该节约能量,因此总能量与频率无关。我们不关心相位,所以我们可以简单地将能量整合到一个波段内得到一个数字。
正如这个例子所示,频率分级是依赖于应用程序的,并不像人们最初想象的那样微不足道。
其它你可能感兴趣的问题