信号处理中的窗函数
信号处理中的窗函数
天蚕宝衣 发表于9个月前
信号处理中的窗函数
  • 发表于 9个月前
  • 阅读 118
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

1. 什么是窗函数

在信号处理中,窗函数(window function)是一种除在给定区间之外取值均为0的实函数。譬如:在给定区间内为常数而在区间外为0的窗函数被形象地称为矩形窗。任何函数与窗函数之积仍为窗函数,所以相乘的结果就像透过窗口“看”其他函数一样。窗函数在频谱分析、滤波器设计、波束形成、以及音频数据压缩(如在Ogg Vorbis音频格式中)等方面有广泛的应用。

2. 为什么要用窗函数

加窗是为了减小泄漏!

信号截断及能量泄漏效应

数字信号处理的主要数学工具是傅里叶变换。应注意到,傅里叶变换研究的是整个时间域和频率域的关系。然而,当运用计算机实现工程测试信号处理时,不可能对无限长的信号进行测量和运算,而是取其有限的时间片段进行分析。具体做法是从信号中截取一个时间片段,然后用观察的信号时间片段进行周期延拓处理,从而得到虚拟的无限长的信号,然后就可以对信号进行傅里叶变换、相关分析等数学处理。

周期延拓后的信号与真实信号是不同的,下面从数学的角度来看这种处理带来的误差情况。

设有余弦信号x(t)在时域分布为无限长(-∞,+∞),将截断信号的谱XT(ω)与原始信号的谱X(ω)相比,它已不是原来的两条谱线,而是两段振荡的连续谱。这表明原来的信号被截断以后,其频谱发生了畸变,原来集中在f0处的能量被分散到了两个较宽的频带中去了,这种现象称之为频谱能量泄漏(Leakage)。

信号截断以后产生的能量泄漏现象是必然的,因为窗函数w(t)是一个频带无限的函数,所以即使原信号x(t)是限带宽信号,而在截断以后也必然成为无限带宽的函数,即信号在频域的能量与分布被扩展了。又从采样定理可知,无论采样频率多高,只要信号一经截断,就不可避免地引起混叠,因此信号截断必然导致一些误差,这是信号分析中不容忽视的问题。

如果增大截断长度T,即矩形窗口加宽,则窗谱W(ω)将被压缩变窄(π/T减小)。虽然理论上讲,其频谱范围仍为无限宽,但实际上中心频率以外的频率分量衰减较快,因而泄漏误差将减小。当窗口宽度T趋于无穷大时,则谱窗W(ω)将变为δ(ω)函数,而δ(ω)与X(ω)的卷积仍为H(ω),这说明,如果窗口无限宽,即不截断,就不存在泄漏误差。

为了减少频谱能量泄漏,可采用不同的截取函数对信号进行截断,截断函数称为窗函数,简称为窗。泄漏与窗函数频谱的两侧旁瓣有关,如果两侧旁瓣的高度趋于零,而使能量相对集中在主瓣,就可以较为接近于真实的频谱,为此,在时间域中可采用不同的窗函数来截断信号。

3. 常用窗函数

实际应用的窗函数,可分为以下主要类型:

幂窗:采用时间变量某种幂次的函数,如矩形、三角形、梯形或其它时间函数x(t)的高次幂;

三角函数窗:应用三角函数,即正弦或余弦函数等组合成复合函数,例如汉宁窗、海明窗等;

指数窗:采用指数时间函数,如e-st形式,例如高斯窗等。

下面介绍几种常用窗函数的性质和特点。

3.1 矩形窗

矩形窗使用最多,习惯上不加窗就是使信号通过了矩形窗。这种窗的优点是主瓣比较集中,缺点是旁瓣较高,并有负旁瓣,导致变换中带进了高频干扰和泄漏,甚至出现负谱现象。

3.2 三角窗

三角窗亦称费杰(Fejer)窗,是幂窗的一次方形式,
三角窗与矩形窗比较,主瓣宽约等于矩形窗的两倍,但旁瓣小,而且无负旁瓣。

3.3 汉宁窗

汉宁(Hanning)窗又称升余弦窗,汉宁窗可以看作是3个矩形时间窗的频谱之和,它可以使用旁瓣互相抵消,消去高频干扰和漏能。 
汉宁窗与矩形窗的谱图对比,可以看出,汉宁窗主瓣加宽(第一个零点在2π/T处)并降低,旁瓣则显著减小。第一个旁瓣衰减一32dB,而矩形窗第一个旁瓣衰减-13dB。此外,汉宁窗的旁瓣衰减速度也较快,约为60dB/(10oct),而矩形窗为20dB/(10oct)。由以上比较可知,从减小泄漏观点出发,汉宁窗优于矩形窗。但汉宁窗主瓣加宽,相当于分析带宽加宽,频率分辨力下降。

3.4 海明窗(汉明窗)

海明(Hamming)窗也是余弦窗的一种,又称改进的升余弦窗,海明窗与汉宁窗都是余弦窗,只是加权系数不同。海明窗加权的系数能使旁瓣达到更小。分析表明,海明窗的第一旁瓣衰减为-42dB。海明窗的频谱也是由3个矩形时窗的频谱合成,但其旁瓣衰减速度为20dB/(10oct),这比汉宁窗衰减速度慢。海明窗与汉宁窗都是很有用的窗函数。

海明窗的用途是作为FIR滤波器。

注:

有限冲激响应(Finite impulse response, 缩写 FIR)滤波器是数字滤波器的一种,简称FIR数字滤波器。这类滤波器对于脉冲输入信号的响应最终趋向于0,因此是有限的,而得名。它是相对于无限冲激响应(IIR)滤波器而言。由于无限冲激响应滤波器中存在反馈回路,因此对于脉冲输入信号的响应是无限延续的。

通常,语音信号一般在10ms到30ms之间,我们可以把它看成是平稳的。为了处理语音信号,我们要对语音信号进行加窗,也就是一次仅处理窗中的数据。因为实际的语音信号是很长的,我们不能也不必对非常长的数据进行一次性处理。明智的解决办法就是每次取一段数据,进行分析,然后再取下一段数据,再进行分析。

怎么仅取一段数据呢?一种方式就是构造一个函数。这个函数在某一区间有非零值,而在其余区间皆为0.汉明窗就是这样的一种函数。它主要部分的形状像sin(x)在0到π区间的形状,而其余部分都是0,这样的函数乘上其他任何一个函数f,f只有一部分有非零值。

为什么海明窗这样取呢?因为之后我们会对海明窗中的数据进行FFT,它假设一个窗内的信号是代表一个周期的信号。(也就是说窗的左端和右端应该大致能连在一起)而通常一小段音频数据没有明显的周期性,加上汉明窗后,数据形状就有点周期的感觉了。

因为加上海明窗,只有中间的数据体现出来了,两边的数据信息丢失了,所以等会移窗的时候,只会移1/3或1/2窗,这样被前一帧或二帧丢失的数据又重新得到了体现。

简单的说海明窗就是个函数,它的形状像窗,所以类似的函数都叫做窗函数

3.4.1 什么是海明窗?

我是做语音识别的,我就从语音的角度跟你说一下吧。

语音信号一般在10ms到30ms之间,我们可以把它看成是平稳的。为了处理语音信号,我们要对语音信号进行加窗,也就是一次仅处理窗中的数据。因为实际的语音信号是很长的,我们不能也不必对非常长的数据进行一次性处理。明智的解决办法就是每次取一段数据,进行分析,然后再取下一段数据,再进行分析。

怎么仅取一段数据呢?一种方式就是构造一个函数。这个函数在某一区间有非零值,而在其余区间皆为0.汉明窗就是这样的一种函数。它主要部分的形状像sin(x)在0到π区间的形状,而其余部分都是0,这样的函数乘上其他任何一个函数f,f只有一部分有非零值。

为什么汉明窗这样取呢?因为之后我们会对汉明窗中的数据进行FFT(快速傅里叶变换),它假设一个窗内的信号是代表一个周期的信号。(也就是说窗的左端和右端应该大致能连在一起)而通常一小段音频数据没有明显的周期性,加上汉明窗后,数据形状就有点周期的感觉了。

因为加上汉明窗,只有中间的数据体现出来了,两边的数据信息丢失了,所以等会移窗的时候,只会移1/3或1/2窗,这样被前一帧或二帧丢失的数据又重新得到了体现。

简单的说汉明窗就是个函数,它的形状像窗,所以类似的函数都叫做窗函数。希望你能明白。

3.4.2 为什么加Hanmming窗?

现在在看G.723.1,对语音编码刚入门,发现在对信号进行LPC分析前,对信号乘以一个Hamming窗,乘法是:信号直接乘以一个HammingWindowTable中的值,这个加窗有什么作用?

如果是限制带宽的话,在时域应对信号应做卷积的,不明白,请赐教。因为要处理的是无限长序列中的一段,所以必须对这段序列加窗采集出来。

典型的窗口大小是25ms,帧移是10ms。汉明窗函数为

W(n,α)=(1-α)-αcos(2*PI*n/(N-1)),0≦n≦N-1

一般情况下,α取0.46。

谁能解释一下这个函数吗?我实在是不理解,谢谢。

由于直接对信号(加矩形窗)截断会产生频率泄露,为了改善频率泄露的情况,加非矩形窗,一般都是加汉明窗,因为汉明窗的幅频特性是旁瓣衰减较大,主瓣峰值与第一个旁瓣峰值衰减可达40db。

举例:

a = wavread('jiasiqi.wav');            % 将音频信号jiasiqi.wav读入
subplot(2, 1, 1),                      % 分配画布,一幅图上共两个图,这是第一个
plot(a);
title('original signal');              % 画出原始信号,即前面这个音频信号的原始波形
grid                                   % 添加网格线
N = 256;                               % 设置短时傅里叶变换的长度,同时也是汉明窗的长度
h = hamming(N);                        % 设置汉明窗。
for m = 1 : N                          % 用汉明窗截取信号,长度为N,主要是为了减少截断引起的栅栏效应等
b(m) = a(m) * h(m)
end
y = 20 * log(abs(fft(b)))              % 做傅里叶变换,取其模值,即幅频特性,然后用分贝(dB)表示
subplot(2, 1, 2)                       % 分配画布,第二副图
plot(y);
title('短时谱');                        % 画出短时谱
grid                                    % 添加网格线

3.5 高斯窗

是一种指数窗,高斯窗谱无负的旁瓣,第一旁瓣衰减达一55dB。高斯窗谱的主瓣较宽,故而频率分辨力低。高斯窗函数常被用来截断一些非周期信号,如指数衰减信号等。

除了以上几种常用窗函数以外,尚有多种窗函数,如平顶窗、帕仁(Parzen)窗、布拉克曼(Blackman)窗、凯塞(kaiser)窗等。

对于窗函数的选择,应考虑被分析信号的性质与处理要求。如果仅要求精确读出主瓣频率,而不考虑幅值精度,则可选用主瓣宽度比较窄而便于分辨的矩形窗,例如测量物体的自振频率等;如果分析窄带信号,且有较强的干扰噪声,则应选用旁瓣幅度小的窗函数,如汉宁窗、三角窗等;对于随时间按指数衰减的函数,可采用指数窗来提高信噪比。

4. 窗函数选择指南

如果在测试中可以保证不会有泄露的发生,则不需要用任何的窗函数(在软件中可选择uniform)。但是如同刚刚讨论的那样,这种情况只是发生在时间足够长的瞬态捕捉和一帧数据中正好包含信号整周期的情况。

如果测试信号有多个频率分量,频谱表现的十分复杂,且测试的目的更多关注频率点而非能量的大小。在这种情况下,需要选择一个主畔够窄的窗函数,汉宁窗是一个很好的选择。

如果测试的目的更多的关注某周期信号频率点的能量值,比如,更关心其EUpeak,EUpeak-peak,EUrms或者EUrms2,那么其幅度的准确性则更加的重要,可以选择一个主畔稍宽的窗,flattop窗在这样的情况下经常被使用。

对冲击实验的数据进行分析时,因为在数据帧开始段的一些重要信息会被一般的窗函数所衰减,因此可以使用force/exponential窗。Force窗一移去了数据帧末端的噪声,对激励信号有用。而exponential窗则确保响应信号在末端的振动衰减为零值。激励信号加力窗是为了减小干扰,而响应信号加指数窗是为了减小泄露。

如果被测信号是随机或者未知的,选择汉宁窗。

共有 人打赏支持
粉丝 16
博文 222
码字总数 146332
×
天蚕宝衣
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: