窗函数的实现及分析.docx
- 文档编号:28916033
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:17
- 大小:153.92KB
窗函数的实现及分析.docx
《窗函数的实现及分析.docx》由会员分享,可在线阅读,更多相关《窗函数的实现及分析.docx(17页珍藏版)》请在冰豆网上搜索。
窗函数的实现及分析
1窗函数
1.1基本概念
在实际进行数字信号处理时,往往需要把信号的观察时间限制在一定的时间间隔内,只需要选择一段时间信号对其进行分析。
这样,取用有限个数据,即将信号数据截断的过程,就等于将信号进行加窗函数操作。
而这样操作以后,常常会发生频谱分量从其正常频谱扩展开来的现象,即所谓的“频谱泄漏”。
当进行离散傅立叶变换时,时域中的截断是必需的,因此泄漏效应也是离散傅立叶变换所固有的,必须进行抑制。
而要对频谱泄漏进行抑制,可以通过窗函数加权抑制DFT的等效滤波器的振幅特性的副瓣,或用窗函数加权使有限长度的输入信号周期延拓后在边界上尽量减少不连续程度的方法实现。
而在后面的FIR滤波器的设计中,为获得有限长单位取样响应,需要用窗函数截断无限长单位取样响应序列。
另外,在功率谱估计中也要遇到窗函数加权问题。
窗函数的基本概念。
设x(n)是一个长序列,w(n)是长度为N的窗函数,用w(n)截断x(n),得到N点序列xn(n),即
xn(n)=x(n)w(n)
在频域上则有
由此可见,窗函数w(n)不仅仅会影响原信号x(n)在时域上的波形,而且也会影响到频域内的形状。
1.2设计原理
窗函数设计法的基本原理是用有限长单位脉冲响应序列
逼近
。
由于
往往是无限长序列,而且是非因果的,所以用窗函数
将
截断,并进行加权处理,得到:
就作为实际设计的FIR数字滤波器的单位脉冲响应序列,其频率响应函数
为
式中,N为所选窗函数
的长度。
用窗函数法设计的滤波器性能取决于窗函数
的类型及窗口长度N的取值。
设计过程中,要根据对阻带最小衰减和过渡带宽度的要求选择合适的窗函数类型和窗口长度N。
2四种基本的窗函数
对时间序列作傅里叶变换时,实际上要作周期延拓,如果取长序列的一段进行处理,还要先作截断。
截断会引起频谱的泄漏问题,这是由于抽样后的离散序列与矩形截断序列相乘,在频域造成两者的频谱卷积形成的。
为了避免频谱泄露对结果的影响,在对非周期信号作时间截断时,除尽量增加截断序列的宽度外,也应选其频谱的旁瓣较小的截断窗函数,以减小泄漏的影响。
在信号处理中窗函数是一种除在给定区间之外取值均为0的实函数。
常用的窗函数很多,例如矩形窗、三角窗、Hanning窗、Hamming窗、Parzen窗、Kaiser窗、Chebyshev窗、Tukey窗、Poisson窗、Caushy窗、Gaussian窗和Blackman窗等等,定义方式不同,性质也不同,可以根据实际需要来选择合适的截断窗函数减轻泄露问题。
窗函数在光谱分析、滤波器设计以及音频数据压缩等方面有广泛的应用。
在这里,应用窗函数对输入数据进行截断(时域加窗),从而得到要处理的数据及其长度。
表2.1MATLAB窗函数
窗
窗函数
矩形窗
Boxcar
巴特利特窗
Barlett
三角窗
Triang
布莱克曼窗
Blackman
海明窗
Hamming
汉宁窗
Hanning
凯塞窗
Kaiser
切比雪夫窗
Chebwin
表2.2各种窗函数的基本参数
窗函数
旁瓣峰值幅度/dB
过渡带宽
阻带最小衰减/dB
矩形窗
-13
4π
-12
三角形窗
-25
8π/N
-25
汉宁窗
-31
8π/N
-44
海明窗
-41
8π/N
-53
不莱克曼窗
-57
12π/N
-74
凯塞窗(α=7.865)
-57
10π/N
-80
这样选定窗函数类型和长度N之后,求出单位脉冲响应
,并按照上式求出
。
是否满足要求,要进行演算。
一般在
尾部加零使长度满足2的整数次幂,以便用FFT计算
。
如果要观察细节,补零点数增多即可。
如果
不满足要求,则要重新选择窗函数类型和长度N,再次验算,直至满足要求。
如果要求线性相位特性,则
还必须满足
根据上式中的正、负号和长度N的奇偶性又将线性相位FIR滤波器分成四类。
要根据所设计的滤波特性正确选择其中一类,例如,要设计线性相位低通特性,可以选择
这一类,而不能选择
这一类。
主程序框图如图2.1所示。
其中幅度特性要求用dB表示。
设
画图时,用
打印幅度特性。
第k点对应的频率
。
为使曲线包络更接近
的幅度特性曲线,DFT变换区间要选大些。
例如窗口长度N=33时,可通过在
末尾补零的方法,使长度变为64,再进行64点DFT,则可以得到更精确的幅度衰减特性曲线。
在本课题的研究过程中,用到了矩形窗、三角窗、汉宁窗、海明窗、布莱克曼窗函数,由于在时域输入信号,时间不存在负值,故对窗函数要作一些变动。
下面介绍四种窗函数。
2.1矩形窗函数
矩形窗(RectangularWindow)函数的时域形式可以表示为:
它的频域特性为
Boxcar函数:
生成矩形窗
调用方式,w=boxcar(n):
输入参数n是窗函数的长度;输出参数w是由窗函数的值组成的n阶向量。
从功能上讲,该函数又等价于w=ones(n,1)。
2.2汉宁窗函数
汉宁窗函数的时域形式可以表示为:
它的频域特性为:
其中,
为矩形窗函数的幅度频率特性函数。
汉宁窗函数的最大旁瓣值比主瓣值低31dB,但是主瓣宽度比矩形窗函数的主瓣宽度增加了1倍,为8π/N。
hanning函数:
生成汉宁窗
调用方式
(1)w=hanning(n):
输入参数n是窗函数的长度;输出参数w是由窗函数的值组成的n阶向量。
注意:
此函数不返回是零点的窗函数的首尾两个元素。
(2)w=hanning(n,'symmetric'):
与上面相类似。
(3)w=hanning(n,'periodic'):
此函数返回包括为零点的窗函数的首尾两个元素。
2.3海明窗函数
海明窗函数的时域形式可以表示为
它的频域特性为
其中,
为矩形窗函数的幅度频率特性函数。
海明窗函数的最大旁瓣值比主瓣值低41dB,但它和汉宁窗函数的主瓣宽度是一样大的。
Hamming函数:
生成海明窗
调用方式
(1)w=hamming(n):
输入参数n是窗函数的长度;输出参数w是由窗函数的值组成的n阶向量。
(2)w=hamming(n,sflag):
参数sflag用来控制窗函数首尾的两个元素值;其取值为symmetric或periodic;默认值为symmetric。
2.4三角窗函数
三角窗是最简单的频谱函数
为非负的一种窗函数。
三角窗函数的时域形式可以表示为:
当n为奇数时
当n为偶数时
它的频域特性为:
三角窗函数的主瓣宽度为8π/N,比矩形窗函数的主瓣宽度增加了一倍,但是它的旁瓣宽度要小很多。
Triang函数:
生成三角窗
调用方式
w=triang(n):
输入参数n是窗函数的长度;输出参数w是由窗函数的值组成的n阶向量。
三角窗也是两个矩形窗的卷积。
三角窗函数的首尾两个数值通常是不为零的。
当n是偶数时,三角窗的傅立叶变换总是非负数。
3基于matlab的实现
3.1各窗函数的图形
用MATLAB编程绘制各种窗函数的形状,窗函数的长度为21。
程序如下:
clf;Nwin=21;n=0:
Nwin-1;
figure
(1)
forii=1:
4
switchii
case1
w=boxcar(Nwin);%矩形窗
stext='矩形窗';
case2
w=hanning(Nwin);%汉宁窗
stext='汉宁窗';
case3
w=hamming(Nwin);%海明窗
stext='海明窗';
case4
w=triang(Nwin);%三角窗
stext='三角窗';
end
posplot=['2,2,'int2str(ii)];
subplot(posplot);
stem(n,w);%绘出窗函数
holdon
plot(n,w,'r');%绘出包络线
xlabel('n');ylabel('w(n)');title(stext);
holdoff;gridon;
end
程序运行结果如下图:
3.1各窗函数的图形
3.2各窗函数的幅频特性
用MATLAB编程,采用512个频率点绘制各窗函数的幅频特性。
程序如下:
clf;Nf=512;%窗函数复数频率特性的数据点数
Nwin=20;%窗函数数据长度
figure
(1)
forii=1:
4
switchii
case1
w=boxcar(Nwin);%矩形窗
stext='矩形窗';
case2
w=hanning(Nwin);%汉宁窗
stext='汉宁窗';
case3
w=hamming(Nwin);%海明窗
stext='海明窗';
case4
w=triang(Nwin);%三角窗
stext='三角窗';
end
[y,f]=freqz(w,1,Nf);%求解窗函数的幅频特性
mag=abs(y);%求得窗函数幅频特性
posplot=['2,2,'int2str(ii)];
subplot(posplot);
plot(f/pi,20*log10(mag/max(mag)));%绘制窗函数的幅频特性
xlabel('归一化频率');ylabel('振幅/dB');
title(stext);gridon;
end
程序运行结果如下图:
3.2各窗函数的幅频特性
4频谱泄露
4.1产生机理
计算机只能处理有限长度的信号,原信号x(t)要以T(采样时间或采样长度)截断,即有限化。
有限化也称为加“矩形窗”或“不加窗”。
矩形窗将信号突然截断,这在频域造成很宽的附加频率成分,这些附加频率成分在原信号x(t)中其实是不存在的。
一般将这一问题称为有限化带来的泄露问题。
泄露使得原来集中在f0上的能量分散到全部频率轴上。
泄露带来许多问题:
如①使频率曲线产生许多“皱纹”(Ripple),较大的皱纹可能与小的共振峰值混淆;②如信号为两幅值一大一小频率很接近的正弦波合成,幅值较小的一个信号可能被淹没。
③f0附近曲线过于平缓,无法准确确定f0的值。
矩形窗的幅度谱函数主要是高度为N的主瓣以及若干个幅度较小的旁瓣组成,频谱中的旁瓣主要是由于矩形窗在两个端点突然截断而在谱中产生的高频分量引起的。
因而在利用矩形窗对信号进行加窗处理时,得到的谱函数会以谱的实际频率值为中心,以窗函数频谱波形的形状向两边扩散,这样就产生了在频谱分析中所谓的“频谱泄露”现象。
4.2窗函数对频谱泄露的抑制
窗函数修正了由于信号的非周期性并减小了频谱中由于泄露而带来的测量不准确性。
快速傅里叶变换假定了时间信号是周期无限的。
但在分析时,我们往往只截取其中的一部分,因此需要加窗以减小泄露。
窗函数可以加在时域,也可以加在频域上,但在时域上加窗更为普遍。
截断效应带来了泄漏,窗函数是为了减小这个截断效应,其设计成一组加权系数。
例如,一个窗函数可以定义为:
w(t)=g(t)-T/2 w(t)=0其他 g(t)是窗函数,T是窗函数的时间 待分析的数据x(t)则表示为: x(t)=w(t)*x(t)' x(t)'表示原始信号,x(t)表示待分析信号。 加窗在时域上表现的是点乘,因此在频域上则表现为卷积。 卷积可以被看成是一个平滑的过程。 这个平滑过程可以被看出是由一组具有特定函数形状的滤波器,因此,原始信号中在某一频率点上的能量会结合滤波器的形状表现出来,从而减小泄漏。 基于这个原理,人们通常在时域上直接加窗。 大多数的信号分析仪一般使用矩形窗(rectangular),汉宁(hann),flattop和其他的一些窗函数。 矩形窗函数: w(k)=1 汉宁窗: w(k)=0.5*(1-cos(2*pi*k/(N-1)))0<=k<=N-1 由于加窗计算中衰减了原始信号的部分能量,因此对于最后的结果还需要加上修正系数。 在线性谱分析中,一般使用幅度系数(amplitudecorrection),在功率谱中,一般使用能量系数(energycorrection)。 泄露效应 对于简单的信号,比如一个单频率的正弦波,泄露就表现为不在其频率点上仍然会有能量的出现。 离其本身的频率越近的频率,泄露的情况越严重,而离的越远,则情况则会好一些。 泄露的情况在时域上对原始信号做截断的时候非常容易发生。 如同图片上展示的,时域上明显的没有按其整周期截断,因此造成了频域上的能量泄露。 4.1频谱泄露的信号加窗处理图 上图阐述了非整周期信号采样时造成泄露的理论原因。 如果一个信号由两个不同频率的正弦波叠加而成,则泄露可能使用户无法区分其各自的频率分量。 如果它们的频率相差很多,而其中的一个分量的能量远大于另外一个,则能量小的那个频率可能完全会被从能量大的频率分量泄露过来的能量所覆盖。 若它们的频率相近,则它们双方泄露的能量可能会使它们之间的频率点和它们原有频率点的能量保持一致,就是说,可能会使用户只看到一个频率峰值。 下图显示了一个1010Hz的正弦波,但是其频率谱中有一个较宽的泄露情况。 该频率谱在1010Hz以外的地方也有着明显的能量值。 可以看到,泄露的能量总是围绕着其原始的峰值。 图4.2未加窗之前的频率谱 很多种的窗函数被设计出来以减小这种泄露情况,以下的图就展示了对1010Hz正弦波加floattop窗之后得到的功率谱。 图4.3加窗之后的频率谱 加上floattop窗之后,泄露明显的减小。 正弦频率和噪音可以被很好的区别开。 但是,这个窗函数仍然使得频率点的估计不是那么的精确。 以下将讨论怎样选择不同的窗函数。 如果在测试中可以保证不会有泄露的发生,则不需要用任何的窗函数(在软件中可选择uniform)。 但是如同刚刚讨论的那样,这种情况只是发生在时间足够长的瞬态捕捉和一帧数据中正好包含信号整周期的情况。 如果测试信号有多个频率分量,频谱表现的十分复杂,且测试的目的更多关注频率点而非能量的大小。 在这种情况下,需要选择一个主畔够窄的窗函数,汉宁窗是一个很好的选择。 如果测试的目的更多关注某周期信号频率点的能量值,如更关心其EUpeak等,那么其幅度的准确性则更加的重要,可以选择一个主畔稍宽的窗,flattop窗在这样的情况下经常被使用。 对冲击实验的数据进行分析时,因为在数据帧开始段的一些重要信息会被一般的窗函数所衰减,因此可以使用force/exponential窗。 Force窗一移去了数据帧末端的噪声,对激励信号有用。 而exponential窗则确保响应信号在末端的振动衰减为零值。 如果被测信号是随机或者未知的,选择汉宁窗。 5实验结果分析 由上图各窗函数的幅频特性可以看到各种窗函数都具有明显的主瓣和旁瓣。 主瓣频宽和旁瓣的幅值衰减特性决定了窗函数的应用场合。 矩形窗具有最窄的主瓣,但也有最大的旁瓣峰值(第一旁瓣衰减为13dB);不同窗函数在这两方面的特点是不同的,因此应根据具体的问题进行选择。 通常来讲,海明窗和汉宁窗的主瓣,具有较小的旁瓣和较大的衰减速度,是较为常用的窗函数。 本文针对连续信号在频域分析中常常出现的频谱泄漏现象产生的原因进行了分析研究,提出了在频谱分析中减小频谱泄露的方法与途径,给出了仿真结果。 采用此种处理手段可以使信号的频谱分析精度更准确,函数谱更加贴近实际,处理效果更加理想。 6总结 主要介绍了数字信号处理领域中窗函数的有关知识。 实际中遇到的离散时间信号总是有限长的,因此不可避免地要遇到数据截断问题。 而在信号处理中,对离散序列的数据截断是通过序列与窗函数相乘来实现的。 而且,有关滤波器的设计、功率谱估计等基本概念也要用到窗函数。 本章对经常用到的下面8个窗函数: 矩形窗函数、三角窗函数、巴特利特窗函数、汉宁窗函数、海明窗函函数、布莱克曼窗函数、凯塞窗函数以及切比雪夫窗函数,先是做了基本概念上的阐释,然后对其MATLAB实现函数做出了说明,最后又结合具体的实例,对这些窗函数的频域特性等进行了介绍。 通过本章的学习,相信用户已经切实掌握了窗函数的基本知识及其实际应用的技巧了。 参考文献 [1]丁玉美,高西全.数字信号处理[M].西安: 西安电子科技大学出版社,2000. [2]程佩青.数字信号处理教程第二版[M].北京: 清华大学出版社,2001. [3]陈敏歌.基于窗函数法的FIR数字滤波器的设计[J].陕西师范大学学报,2007,35: 72-74. [4]陈卫东,杨绍全.加窗离散傅里叶变换测频分辨率研究[J].西安电子科技大学学报,2000,27 (2): 157-160. [5]许珉,张鸿博.基于Blankman-harris窗的加窗FFT插值修正算法[J].郑州大学学报,2005,26(4): 99-101.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 实现 分析