我已经多次发现了获取音频信号功率谱的以下准则:
- 收集N个样本,其中N是2的幂
- 对样本应用适当的窗口函数,例如Hanning
- 将窗口化的样本传递给FFT例程-理想情况下,您需要一个实际到复杂的FFT,但如果您只有复杂到复杂的FFT,则将所有虚数输入部分传递为0
- 计算FFT输出bin的平方幅度(re * re + im * im)
- (可选)计算每个幅度平方输出bin的10 * log10以获得dB中的幅度值
- 现在,您已经拥有功率谱,只需要识别峰值即可,如果您具有合理的S / N比,这应该非常简单。请注意,随着N的增大,频率分辨率会提高。对于上述44.1 kHz采样率和N = 32768的示例,每个bin的频率分辨率为44100/32768 = 1.35 Hz。
但是...为什么需要对样本应用窗口函数?这真正意味着什么?
功率谱呢?它是采样率范围内每个频率的功率吗?(例如:Windows Media Player音频可视化器)