为什么在构建音频信号的功率谱时需要对窗口函数应用窗口函数?

Nun*_*tos 20 audio signal-processing fft spectrum window-functions

我已经多次找到了以下获取音频信号功率谱的指南:

  • 收集N个样本,其中N是2的幂
  • 对样本应用合适的窗函数,例如汉宁
  • 将窗口样本传递给FFT例程 - 理想情况下,您需要一个实际到复数的FFT,但如果您只有一个是复杂到复杂的FFT,则为所有虚拟输入部分传递0
  • 计算FFT输出箱的平方幅度(re*re + im*im)
  • (可选)计算每个幅度平方输出仓的10*log10,得到以dB为单位的幅度值
  • 现在你已经拥有了你的功率谱,你只需要确定峰值,如果你有一个合理的信噪比,这应该非常简单.注意,频率分辨率随着N的增大而提高.对于上述44.1kHz采样率和N = 32768的示例,每个箱的频率分辨率为44100/32768 = 1.35Hz.

但是......为什么我需要对样本应用窗口函数?这到底意味着什么?

功率谱怎么样,它是采样率范围内每个频率的功率?(例如:windows media player声音可视化器?)

Bab*_*son 33

大多数真实世界的音频信号是非周期性的,这意味着在任何给定的时间跨度内,真实的音频信号通常不会精确地重复.

然而,傅立叶变换的数学假设被傅立叶变换的信号在所讨论的时间跨度上是周期性的.

傅立叶周期性假设与音频信号通常是非周期性的现实事实之间的这种不匹配导致变换中的误差.

这些误差被称为"频谱泄漏",并且通常表现为信号功率谱上的能量的错误分布.

下图显示了弹奏A4音符的原声吉他的功率谱特写.使用FFT(快速傅里叶变换)计算频谱,但是在FFT之前信号没有加窗.

注意能量分布在-60 dB线以上,三个不同的峰值在大约440 Hz,880 Hz和1320 Hz.这种特定的能量分布包含"频谱泄漏"误差.

吉他演奏A4音符的功率谱,没有应用窗口

为了在某​​种程度上减轻"频谱泄漏"误差,您可以通过专门为此目的设计的窗函数预乘信号,例如Hann窗函数.

下图显示了时域中的Hann窗口函数.注意函数的尾部如何平滑地变为零,而函数的中心部分平滑地趋向于值1.

汉恩窗功能

现在让我们将Hann窗口应用于吉他的音频数据,然后对得到的信号进行FFT.

下图显示了相同信号功率谱的特写(播放A4音符的原声吉他),但这次信号在FFT之前被Hann窗函数预乘.

请注意-60 dB线以上的能量分布如何发生显着变化,以及三个不同的峰值如何改变形状和高度.光谱能量的这种特定分布包含较少的"光谱泄漏"误差.

吉他演奏A4音符的功率谱,应用了Hann窗口

用于此分析的原声吉他A4音符在工作室条件下使用高质量麦克风以44.1 KHz采样,它基本上包含零背景噪音,没有其他乐器或声音,也没有后期处理.

参考文献:

这里完成了真实的音频信号数据,Hann窗函数,图,FFT和频谱分析:

快速傅立叶变换,频谱分析,Hann窗函数,音频数据


Pau*_*l R 14

正如@ cyco130所说,您的样品已经被矩形函数加窗.由于傅里叶变换假定周期性,因此最后样本与重复的第一样本之间的任何不连续性将导致光谱中的假象(例如,峰的"拖尾").这被称为频谱泄漏.为了减少这种影响,我们应用了一个锥形窗口函数,例如Hann窗口,它可以消除任何这种不连续性,从而减少光谱中的假象.


hot*_*aw2 7

请注意,非矩形窗口既有优点,也有成本.时域中窗口的结果等同于窗口变换与信号频谱的卷积.典型的窗口,例如von​​ Hann窗口,将减少来自任何非周期性光谱内容的"泄漏",这将导致较少噪声的光谱; 但是,作为回报,卷积将"模糊"任何精确或接近于几个相邻区间的周期性光谱峰值.例如,所有光谱峰将变得更圆,这可能降低频率估计精度.如果你知道,没有非周期性内容(例如来自某些旋转同步采样系统的数据),非矩形窗口实际上可能使FFT看起来更糟.

非矩形窗口也是信息有损的过程.假设有限精度算术,将丢弃靠近窗口边缘的大量光谱信息.因此,非矩形窗口最好与重叠窗口处理一起使用,和/或当人们可以假设感兴趣的光谱在整个窗口宽度上是静止的,或者在窗口中居中时.


cyc*_*130 6

如果您没有应用任何窗口函数,那么您实际上是在使用矩形窗口函数.不同的窗口函数具有不同的特征,它取决于您想要的内容.