几种常见窗函数及其MATLAB程序实现.doc

合集下载

几种常见窗函数及其MATLAB程序实现

几种常见窗函数及其MATLAB程序实现

几种常见窗函数及其MATLAB程序实现2013-12-16 13:58 2296人阅读评论(0) 收藏举报分类:Matlab(15)数字信号处理中通常是取其有限的时间片段进行分析,而不是对无限长的信号进行测量和运算。

具体做法是从信号中截取一个时间片段,然后对信号进行傅里叶变换、相关分析等数学处理。

信号的截断产生了能量泄漏,而用FFT算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的。

在FFT分析中为了减少或消除频谱能量泄漏及栅栏效应,可采用不同的截取函数对信号进行截短,截短函数称为窗函数,简称为窗。

泄漏与窗函数频谱的两侧旁瓣有关,对于窗函数的选用总的原则是,要从保持最大信息和消除旁瓣的综合效果出发来考虑问题,尽可能使窗函数频谱中的主瓣宽度应尽量窄,以获得较陡的过渡带;旁瓣衰减应尽量大,以提高阻带的衰减,但通常都不能同时满足这两个要求。

频谱中的如果两侧瓣的高度趋于零,而使能量相对集中在主瓣,就可以较为接近于真实的频谱。

不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。

信号的加窗处理,重要的问题是在于根据信号的性质和研究目的来选用窗函数。

图1是几种常用的窗函数的时域和频域波形,其中矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低,如果仅要求精确读出主瓣频率,而不考虑幅值精度,则可选用矩形窗,例如测量物体的自振频率等;布莱克曼窗主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高;如果分析窄带信号,且有较强的干扰噪声,则应选用旁瓣幅度小的窗函数,如汉宁窗、三角窗等;对于随时间按指数衰减的函数,可采用指数窗来提高信噪比。

表1 是几种常用的窗函数的比较。

如果被测信号是随机或者未知的,或者是一般使用者对窗函数不大了解,要求也不是特别高时,可以选择汉宁窗,因为它的泄漏、波动都较小,并且选择性也较高。

但在用于校准时选用平顶窗较好,因为它的通带波动非常小,幅度误差也较小。

Matlab的窗函数,矩形窗,三角窗,汉明窗,汉宁窗,布莱克曼窗

Matlab的窗函数,矩形窗,三角窗,汉明窗,汉宁窗,布莱克曼窗

%N =51%求矩形窗的频率响应图wn = rectwin(51) ; %矩形窗函数%20*log10(abs(WN))[h1,w] = freqz(wn,1);figure(1);plot(w/pi,20*log10(abs(h1/max(h1))));axis([0 1 -100 0]);xlabel('归一化频率/\pi');ylabel('20log_{10}|W(e^{j\omega})| /dB');title('矩形窗的傅里叶变换');set(gca,'YTick',[-100 -80 -60 -40 -20 0])set(gca,'XTick',[0 :0.2: 1])set(gca,'XAxisLocation','top'); %设置X轴在上方set(gca,'Y AxisLocation','left');%设置Y轴在左方text(1,-108,'\pi');%gtext('\pi');%求三角窗的频率响应图wn1 = bartlett(51);[h1,w1] = freqz(wn1,1);figure(2);plot(w/pi,20*log10(abs(h1/max(h1))));axis([0 1 -100 0]);xlabel('归一化频率/\pi');ylabel('20log_{10}|W(e^{j\omega})| /dB');title('三角窗的傅里叶变换');set(gca,'YTick',[-100 -80 -60 -40 -20 0])set(gca,'XTick',[0 :0.2: 1])set(gca,'XAxisLocation','top');%设置X轴在上方set(gca,'Y AxisLocation','left'); %设置Y轴在左方%hanningwn1 = hanning(51) ;[h1,w1] = freqz(wn1,1);figure(3);plot(w/pi,20*log10(abs(h1/max(h1))));axis([0 1 -100 0]);xlabel('归一化频率/\pi');ylabel('20log_{10}|W(e^{j\omega})| /dB');title('Hanning的傅里叶变换');set(gca,'YTick',[-100 -80 -60 -40 -20 0]);set(gca,'XTick',[0 :0.2: 1]);set(gca,'XAxisLocation','top');%设置X轴在上方set(gca,'Y AxisLocation','left'); %设置Y轴在左方%hammingwn1 = hamming(51) ;[h1,w1] = freqz(wn1,1);figure(4);plot(w/pi,20*log10(abs(h1/max(h1))));axis([0 1 -100 0]);xlabel('归一化频率/\pi');ylabel('20log_{10}|W(e^{j\omega})| /dB');title('Hamming的傅里叶变换');set(gca,'YTick',[-100 -80 -60 -40 -20 0])set(gca,'XTick',[0 :0.2: 1])set(gca,'XAxisLocation','top');%设置X轴在上方set(gca,'Y AxisLocation','left'); %设置Y轴在左方%Blackmanwn1 = blackman(51) ;[h1,w1] = freqz(wn1,1);figure(5);plot(w/pi,20*log10(abs(h1/max(h1))));axis([0 1 -100 0]);xlabel('归一化频率/\pi');ylabel('20log_{10}|W(e^{j\omega})| /dB');title('Blackman的傅里叶变换');set(gca,'YTick',[-100 -80 -60 -40 -20 0])set(gca,'XTick',[0 :0.2: 1])set(gca,'XAxisLocation','top');%设置X轴在上方set(gca,'Y AxisLocation','left'); %设置Y轴在左方参考书:数字信号处理教程(第三版) 程佩青清华大学出版社2009年11月第9次印刷P340的图7-11矩形窗三角窗汉宁窗海明窗布拉克曼窗。

matlab窗函数代码

matlab窗函数代码

matlab窗函数代码在信号处理和数字滤波器设计中,窗函数是一种常用的工具,用于限制信号的时间或频率特性。

MATLAB提供了多种窗函数的函数,为用户提供了便捷的窗函数生成方法。

本文将介绍使用MATLAB实现窗函数的代码,并展示窗函数在信号处理中的一些应用。

一、窗函数的概念和作用窗函数,顾名思义,是将信号与一个窗口函数进行相乘的操作。

窗口函数通常是一个在有限时间或有限频率范围内非零的函数,其作用是在截断信号的同时减小频谱泄露或干扰的效果。

窗函数主要用于以下几个方面:1. 信号截断:在信号处理中,常常需要将信号截断到特定的时间或频率范围内,窗函数可以实现这一功能。

2. 频谱分析:窗函数可以减少频谱泄露的问题,提高频谱分析的准确性。

3. 滤波器设计:窗函数可以用于设计数字滤波器,限制滤波器的频率响应,降低滤波器的波纹和旁瓣响应。

4. 信号调制:窗函数可以对信号进行调制,从而改变信号的频谱特性。

二、常见的窗函数在MATLAB中,常见的窗函数有以下几种:1. 矩形窗函数(rectwin):矩形窗函数是最简单的窗口函数,其在指定范围内等于1,在其他范围内等于0。

矩形窗函数常常用于频谱分析和滤波器设计中。

MATLAB代码实现:```matlabN = 256; % 窗口长度w = rectwin(N); % 生成矩形窗函数```2. 汉宁窗函数(hann):汉宁窗函数是一种改进的窗口函数,其在给定范围内平滑过渡,减少频谱泄露和旁瓣响应。

MATLAB代码实现:```matlabN = 256; % 窗口长度w = hann(N); % 生成汉宁窗函数```3. 汉明窗函数(hamming):汉明窗函数也是一种改进的窗口函数,类似于汉宁窗函数,但其衰减更快。

MATLAB代码实现:```matlabN = 256; % 窗口长度w = hamming(N); % 生成汉明窗函数```4. 埃尔米特窗函数(hermite):埃尔米特窗函数在MATLAB中用chebwin函数实现,其在给定范围内呈现类似埃尔米特多项式的特性。

Matlab的窗函数,矩形窗,三角窗,汉明窗,汉宁窗,布莱克曼窗

Matlab的窗函数,矩形窗,三角窗,汉明窗,汉宁窗,布莱克曼窗

%N =51%求矩形窗的频率响应图wn = rectwin(51) ; %矩形窗函数%20*log10(abs(WN))[h1,w] = freqz(wn,1);figure(1);plot(w/pi,20*log10(abs(h1/max(h1))));axis([0 1 -100 0]);xlabel('归一化频率/\pi');ylabel('20log_{10}|W(e^{j\omega})| /dB');title('矩形窗的傅里叶变换');set(gca,'YTick',[-100 -80 -60 -40 -20 0])set(gca,'XTick',[0 :0.2: 1])set(gca,'XAxisLocation','top'); %设置X轴在上方set(gca,'YAxisLocation','left'); %设置Y轴在左方text(1,-108,'\pi');%gtext('\pi');%求三角窗的频率响应图wn1 = bartlett(51);[h1,w1] = freqz(wn1,1);figure(2);plot(w/pi,20*log10(abs(h1/max(h1))));axis([0 1 -100 0]);xlabel('归一化频率/\pi');ylabel('20log_{10}|W(e^{j\omega})| /dB');title('三角窗的傅里叶变换');set(gca,'YTick',[-100 -80 -60 -40 -20 0])set(gca,'XTick',[0 :0.2: 1])set(gca,'XAxisLocation','top');%设置X轴在上方set(gca,'YAxisLocation','left'); %设置Y轴在左方%hanningwn1 = hanning(51) ;[h1,w1] = freqz(wn1,1);figure(3);plot(w/pi,20*log10(abs(h1/max(h1))));axis([0 1 -100 0]);xlabel('归一化频率/\pi');ylabel('20log_{10}|W(e^{j\omega})| /dB');title('Hanning的傅里叶变换');set(gca,'YTick',[-100 -80 -60 -40 -20 0]);set(gca,'XTick',[0 :0.2: 1]);set(gca,'XAxisLocation','top');%设置X轴在上方set(gca,'YAxisLocation','left'); %设置Y轴在左方%hammingwn1 = hamming(51) ;[h1,w1] = freqz(wn1,1);figure(4);plot(w/pi,20*log10(abs(h1/max(h1))));axis([0 1 -100 0]);xlabel('归一化频率/\pi');ylabel('20log_{10}|W(e^{j\omega})| /dB');title('Hamming的傅里叶变换');set(gca,'YTick',[-100 -80 -60 -40 -20 0])set(gca,'XTick',[0 :0.2: 1])set(gca,'XAxisLocation','top');%设置X轴在上方set(gca,'YAxisLocation','left'); %设置Y轴在左方%Blackmanwn1 = blackman(51) ;[h1,w1] = freqz(wn1,1);figure(5);plot(w/pi,20*log10(abs(h1/max(h1))));axis([0 1 -100 0]);xlabel('归一化频率/\pi');ylabel('20log_{10}|W(e^{j\omega})| /dB');title('Blackman的傅里叶变换');set(gca,'YTick',[-100 -80 -60 -40 -20 0])set(gca,'XTick',[0 :0.2: 1])set(gca,'XAxisLocation','top');%设置X轴在上方set(gca,'YAxisLocation','left'); %设置Y轴在左方参考书:数字信号处理教程(第三版) 程佩青清华大学出版社2009年11月第9次印刷P340的图7-11矩形窗三角窗汉宁窗海明窗布拉克曼窗。

(完整版)MATLAB常用函数总结,推荐文档

(完整版)MATLAB常用函数总结,推荐文档

MATLAB 常用函数总结Matlab 的内部常数pi 圆周率exp(1)自然对数的底数ei 或j虚数单位Inf 或 inf无穷大Matlab 的常用内部数学函数指数函数exp(x)以e 为底数log(x)自然对数,即以e 为底数的对数log10(x)常用对数,即以10为底数的对数对数函数log2(x)以2为底数的x 的对数开方函数sqrt(x)表示x 的算术平方根绝对值函数abs(x)表示实数的绝对值以及复数的模sin(x)正弦函数cos(x)余弦函数tan(x)正切函数cot(x)余切函数sec(x)正割函数三角函数(自变量的单位为弧度)csc(x)余割函数反三角函数asin(x)反正弦函数acos(x)反余弦函数atan(x)反正切函数acot(x)反余切函数asec(x)反正割函数acsc(x)反余割函数sinh(x)双曲正弦函数cosh(x)双曲余弦函数tanh(x)双曲正切函数coth(x)双曲余切函数sech(x)双曲正割函数双曲函数csch(x)双曲余割函数asinh(x)反双曲正弦函数acosh(x)反双曲余弦函数atanh(x)反双曲正切函数acoth(x)反双曲余切函数asech(x)反双曲正割函数反双曲函数acsch(x)反双曲余割函数求角度函数atan2(y,x)以坐标原点为顶点,x轴正半轴为始边,从原点到点(x,y)的射线为终边的角,其单位为弧度,范围为(,]gcd(a,b)两个整数的最大公约数数论函数lcm(a,b)两个整数的最小公倍数排列组合函数factorial(n)阶乘函数,表示n的阶乘real(z)实部函数imag(z)虚部函数复数函数abs(z)求复数z的模angle(z)求复数z 的辐角,其范围是( ,]conj(z)求复数z 的共轭复数ceil(x)表示大于或等于实数x 的最小整数floor(x)表示小于或等于实数x 的最大整数求整函数与截尾函数round(x)最接近x 的整数max([a ,b ,c ,...])求最大数最大、最小函数min([a ,b ,c ,..])求最小数符号函数sign(x)Matlab 中的数学运算符a+b 加法 a./b 数组右除a-b 减法 a.\b 数组左除a*b 矩阵乘法a^b 矩阵乘方a.*b 数组乘法 a.^b 数组乘方a/b 矩阵右除-a负号a\b矩阵左除' 共轭转置.'一般转置Matlab 的关系运算符 ==等于<小于>大于<=小于或等于>=大于或等于~=不等于如何用matlab求阶乘factorial(n) 求n的阶乘如何用matlab进行多项式运算(1)合并同类项 syms 表达式中包含的变量 collect(表达式,指定的变量)(2)因式分解 syms 表达式中包含的变量 factor(表达式)(3)展开syms 表达式中包含的变量 expand(表达式)(4)化简syms 表达式中包含的变量simplify(表达式)  如何用matlab进行复数运算 a+b*i 或 a +b*j表示复数a+bi 或 a+bjreal(z)求复数z的实部imag(z)求复数z的虚部abs(z)求复数z的模angle(z)求复数z的辐角,conj(z)求复数z的共轭复数exp(z)复数的指数函数,表示e^z如何用Matlab求集合的交集、并集、差集和补集 union(A,B)求集合A和B的并集intersect(A,B)求集合A和B的交集setdiff(A,B)求集合A和B的差集A-Bsetdiff(U,A)求集合A关于全集U的补集如何用matlab排序sort(v) 将向量v的元素从小到大排列(升序排列)sort(v,dim,’descend or ascend’)当dim=1时矩阵按列排序,descend or ascend用来控制升序还是降序当dim=2时矩阵按行排序,descend or ascend用来控制升序还是降序如何用Matlab求极限(1)极限:syms xlimit(f(x), x, a)求f(x)关于x趋于a时的极限(2)单侧极限:左极限:syms x limit(f(x), x, a,’left’)求f(x)关于x趋于a时的左极限右极限:syms x limit(f(x), x, a,’right’)求f(x)关于x趋于a时的右极限如何用Matlab求导数diff('f(x)') diff('f(x)','x') 求f(x)关于x的导数或者:syms x diff(f(x))syms x diff(f(x), x)如何用Matlab求高阶导数如何用Matlab求高阶导数diff('f(x)',n) diff('f(x)','x',n)求f(x)关于x的n阶导数syms x diff(f(x),n)syms x diff(f(x), x,n)如何用Matlab求不定积分int('f(x)') int ('f(x)','x')求f(x)关于x的积分syms x int(f(x))syms x int(f(x), x)如何用Matlab求定积分、广义积分int('f(x)',a,b) int ('f(x)','x',a,b)求f(x)关于x的积分,区间为a到b syms x int(f(x),a,b)syms x int(f(x), x,a,b)如何用Matlab展开级数syms x taylor(f(x), x, n,)a如何在Matlab中进行积分变换syms s tlaplace( f(t), t, s ) 拉普拉斯变换ilaplace( F(s), s, t ) 拉普拉斯变换的逆变换 syms t ωfourier( f(t), t, ω)傅立叶变换ifourier( F(ω), ω, t ) 傅立叶变换的逆变换 syms n zztrans( f(n), n, z) Z变换iztrans( F(z), z, n ) Z变换的逆变换 如何用Matlab解微分方程dsolve('微分方程','自变量')dsolve('微分方程','初始条件或边界条件','自变量') dsolve('D2x+2*x+x=sin(t)','x(0)=1','Dx(0)=1','t')如何用matlab求多变量函数的极限 以两个变量为例说明,多于两个变量的函数极限可以依次类推。

matlab窗函数及fft

matlab窗函数及fft

在MATLAB中,窗函数和FFT(快速傅里叶变换)是信号处理和频域分析中常用的工具。

下面分别介绍一下MATLAB中的窗函数和FFT的基本用法:窗函数:窗函数在信号处理中用于抑制频谱泄漏和减小截断效应。

MATLAB 中提供了多种窗函数,如rectwin、hamming、hanning、blackman等。

下面是一个简单的例子,展示如何生成一个长度为N 的汉宁窗(Hanning Window):N = 256; % 窗口长度w = hanning(N); % 生成汉宁窗plot(w);title('Hanning Window');xlabel('Sample');ylabel('Amplitude');FFT:FFT 用于将信号从时域转换到频域,MATLAB 中使用fft 函数来实现。

以下是一个简单的示例,演示如何对一个包含正弦波的信号进行FFT:Fs = 1000; % 采样率T = 1/Fs; % 采样间隔L = 1000; % 信号长度t = (0:L-1)*T; % 时间向量f = 50; % 正弦波频率A = 1; % 正弦波振幅x = A*sin(2*pi*f*t); % 生成正弦波信号Y = fft(x); % 对信号进行FFTP2 = abs(Y/L); % 计算双边频谱P1 = P2(1:L/2+1); % 截取单边频谱P1(2:end-1) = 2*P1(2:end-1);frequencies = Fs*(0:(L/2))/L; % 频率轴figure; % 绘制频谱图plot(frequencies, P1);title('Single-Sided Amplitude Spectrum of x(t)');xlabel('Frequency (Hz)');ylabel('|P1(f)|');这个例子中,我们生成了一个包含50 Hz 正弦波的信号,并对其进行了FFT。

几种常见窗函数及其MATLAB程序实现

几种常见窗函数及其MATLAB程序实现

几种常见窗函数及其MATLAB程序实现2013-12-16 13:58 2296人阅读评论(0) 收藏举报分类:Matlab(15)数字信号处理中通常是取其有限的时间片段进行分析,而不是对无限长的信号进行测量和运算。

具体做法是从信号中截取一个时间片段,然后对信号进行傅里叶变换、相关分析等数学处理。

信号的截断产生了能量泄漏,而用FFT算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的。

在FFT分析中为了减少或消除频谱能量泄漏及栅栏效应,可采用不同的截取函数对信号进行截短,截短函数称为窗函数,简称为窗。

泄漏与窗函数频谱的两侧旁瓣有关,对于窗函数的选用总的原则是,要从保持最大信息和消除旁瓣的综合效果出发来考虑问题,尽可能使窗函数频谱中的主瓣宽度应尽量窄,以获得较陡的过渡带;旁瓣衰减应尽量大,以提高阻带的衰减,但通常都不能同时满足这两个要求。

频谱中的如果两侧瓣的高度趋于零,而使能量相对集中在主瓣,就可以较为接近于真实的频谱。

不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。

信号的加窗处理,重要的问题是在于根据信号的性质和研究目的来选用窗函数。

图1是几种常用的窗函数的时域和频域波形,其中矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低,如果仅要求精确读出主瓣频率,而不考虑幅值精度,则可选用矩形窗,例如测量物体的自振频率等;布莱克曼窗主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高;如果分析窄带信号,且有较强的干扰噪声,则应选用旁瓣幅度小的窗函数,如汉宁窗、三角窗等;对于随时间按指数衰减的函数,可采用指数窗来提高信噪比。

表1 是几种常用的窗函数的比较。

如果被测信号是随机或者未知的,或者是一般使用者对窗函数不大了解,要求也不是特别高时,可以选择汉宁窗,因为它的泄漏、波动都较小,并且选择性也较高。

但在用于校准时选用平顶窗较好,因为它的通带波动非常小,幅度误差也较小。

MATLAB各种“窗函数”定义及调用(可打印修改)

MATLAB各种“窗函数”定义及调用(可打印修改)

MATLAB窗函数大全1.矩形窗(Rectangle Window)调用格式:w=boxcar(n),根据长度 n 产生一个矩形窗 w。

2.三角窗(Triangular Window)调用格式:w=triang(n),根据长度 n 产生一个三角窗 w。

3.汉宁窗(Hanning Window)调用格式:w=hanning(n),根据长度 n 产生一个汉宁窗 w。

4.海明窗(Hamming Window)调用格式:w=hamming(n),根据长度 n 产生一个海明窗 w。

5.布拉克曼窗(Blackman Window)调用格式:w=blackman(n),根据长度 n 产生一个布拉克曼窗 w。

6.恺撒窗(Kaiser Window)调用格式:w=kaiser(n,beta),根据长度 n 和影响窗函数旁瓣的β参数产生一个恺撒窗w。

窗函数:1.矩形窗:利用w=boxcar(n)的形式得到窗函数,其中n为窗函数的长度,而返回值w 为一个n阶的向量,它的元素由窗函数的值组成。

‘w=boxcar(n)’ 等价于‘w=ones(1,n)’.2.三角窗:利用w=triang(n)的形式得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,它的元素由窗函数的值组成。

w=triang(N-2)等价于bartlett(N)。

3.汉宁窗:利用w=hanning(n)得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,包含了窗函数的n个系数。

4.海明窗:利用w=hamming(n)得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,包含了窗函数的n个系数。

它和汉宁窗的主瓣宽度相同,但是它的旁瓣进一步被压低。

5.布拉克曼窗:利用w=blackman(n)得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,包含了窗函数的n个系数。

它的主瓣宽度是矩形窗主瓣宽度的3倍,为12*pi/N,但是它的最大旁瓣值比主瓣值低57dB。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

几种常见窗函数及其MATLAB程序实现2013-12-16 13:58 2296人阅渎评论(0)收藏举报:=分类:Matlab (15) ▼数字信号处理屮通常是取其有限的时间片段进行分析,而不足对无限长的信号进行测:W:和运算。

具体做法是从信号屮截取一个时间片段,然后对信号进行傅里叶变换、相关分析等数学处理。

信号的截断产生了能量泄漏,而用FFT算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的。

在FFT分析屮为了减少或消除频谱能y:泄漏及栅栏效应,可采用不同的截取函数对信号进行截短,截短函数称为窗函数,简称为窗。

泄漏与窗函数频谱的两侧旁瓣有关,对于窗函数的选川总的原则是,要从保持最大信息和消除旁瓣的综合效果出发来考虑问题,尽可能使窗函数频谱屮的主瓣宽度应尽量窄,以获得较陡的过渡带;旁瓣袞减应尽量大,以提高阻带的袞减,供通常都不能同时满足这两个要求。

频谱中的如果两侧瓣的高度趋于零,而使能量相对集中在主瓣,就可以较为接近于真实的频谱。

不同的窗函数对信号频谱的影响是不一样的,这主要是因力不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。

信号的加窗处理,重要的问题是在于根据信号的性质和研究目的来选川窗函数。

图1是几种常川的窗函数的时域和频域波形,其屮矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低,如果仅耍求糈确读出主瓣频率,而不考虑幅值精度,则可选川矩形窗,例如测量物体的自振频率等;布莱克曼窗主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高:如果分析窄带信号,且有较强的干扰噪声,则应选川旁瓣幅度小的窗函数,如汉宁窗、三角窗等;对于随时间按指数衰减的函数,可采用指数窗来提高信噪比。

表1是儿种常用的窗函数的比较。

如果被测信号是随机或者未知的,或者是一般使用者对窗函数不大了解,要求也不是特别高时,可以选择汉宁窗,因为它的泄漏、波动都较小,并且选择性也较高。

但在用于校准时选用平顶窗较好,因为它的通带波动非常小,幅度误差也较小。

表1几种常用的窗函数的比较下而是儿种窗函数归一化DTFT幅度的MATLAB程序: 附上DTFT 函数(dtft.m):function [ X ] = dtft( x,n,w )% Computes Discrete-time Fourier Transform% [X] = dtft(x,n,w)% X = DTFT values computed at w.frequencies% x = finite duration sequence over n% n = sample position vector% w = frequency location vectorX = x*exp(-j*n,*w);%end矩形窗:%DTFT of a Rectangular Window, M=10,25,50,101clc; close all;Hf_1 =figure; set(Hf_1 /NumberTitle./off/Name./POSCMa'); %M=10M=10; n=O:M; x=ones(1,length(n));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,1); plot(w/pi,magX,’LineWidth',1.5); axis([-1 1 0 1.1]); ylabel(,|X|,);title([,M=10,]);set(gca,’XTick’,wtick,’YTick’,magtick);% M=25M=25; n=O:M; x=ones(1,length(n));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,2); plot(w/pi,magX,’LineWidth',1.5); axis([-1 1 0 1.1]); title([’M=25’]); set(gca/XTick’,wtick,’YTick',magtick);% M=50M=50; n=O:M; x=ones(1,length(n));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,3); plot(w/pi,magX,’LineWidth',1.5); axis([-1 1 0 1.1]); xlabel('omegaApi’); ylabel(’|X|’);title(’M=50’); set(gca/XTick’,wtick,’YTick’,magtick);%M=101M=101; n=0:M; x=ones(1 Jength(n));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);xlabel(’\omegaApi’); ylabel(’|X「);三角窗:% Triangular Window:% DTFT of a Triangular Window,M = 10,25,50,101clc; close all;Hf_1 =figure; set(Hf_1 ,'NumberTitle7off',,Name',,P0304b');M=10; n=O:M; x=(1 -(abs(M-1 -(2*n))/(M+1)));x=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,1); plot(w/pi,magX/LineWidth',1.5); axis([-1 1 0 1.1]); ylabelC|X|,);title([,M = 10,]);set(gca,’XTick’,wtick,’YTick’,magtick);% M = 25M=25; n=O:M; x=(1-(abs(M-1-(2*n))/(M+1)));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,2); plot(w/pi,magX,’LineWidth',1.5); axis([-1 1 0 1.1]); title(['M = 25']); set(gca,,XTick',wtick,'YTick,,magtick);% M = 50M=50; n=0:M; x=(1 -(abs(M-1 -(2*n))/(M+1)));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,3); plot(w/pi,magX/LineWidth',1.5); axis([-1 1 0 1.1]); xlabel(’\omega/\p「); ylabel(’|X|’);title([’M = 50’]);set(gca,’XTick’,wtick,’YTick’,magtick);%M = 100M=101 ;n=0:M; x=(1 -(abs(M-1 -(2*n))/(M+1)));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);xlabel(’\omegaApi’);title, = 101’]);set(gca,’XTick’,wtick,’YTick’,magtick);海宁窗:% Hann Window% DTFT of a Hann Window, M = 10,25,50,101clc;close all;Hf_1 = figure; set(Hf_1/NumberTitleVoff'/Name'/POSO^'); M=10;n=O:M; x=0.5*(1 -cos((2*pi*n)/(M-1)));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,1); plot(w/pi,magX,’LineWidth',1.5); axis([-1 1 0 1.1]); ylabelC|X|,);title([,M = 10,]);set(gca,’XTick’,wtick,’YTick’,magtick);% M = 25M=25;n=0:M; x=0.5*(1 -cos((2*pi*n)/(M-1)));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,2); plot(w/pi,magX,’LineWidth',1.5); axis([-1 1 0 1.1]); title,= 25.]);set(gca,’XTick’,wtick,’YTick’,magtick);% M = 50M=50;n=0:M; x=0.5*(1 -cos((2*pi*n)/(M-1)));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,3); plot(w/pi,magX,’LineWidth',1.5); axis([-1 1 0 1.1]); xlabel(’\omega/\pi.); ylabelf|X|'); title([’M =50’]);set(gca,’XTick’,wtick,’YTick’,magtick);%M = 101M=101 ;n=0:M; x=0.5*(1 -cos((2*pi*n)/(M-1)));xlabel(’\omegaAp「); title(['M = 101’]);set(gca,’XTick’,wtick,’YTick’,magtick);哈明窗:% Hamming Window:clc; close all;Hf_1 =figure; set(Hf_1 ,'NumberTitle7off',,Name',,P0304d');X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,1); plot(w/pi,magX,’LineWidth',1.5); axis([-1 1 0 1.1]); ylabelf|X|,);title([,M = 10,]);set(gca,’XTick’,wtick,’YTick’,magtick);% M = 25M=25; n=O:M; x=(0.54-0.46*cos((2*pi*n)/(M-1)));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,2); plot(w/pi,magX,’LineWidth',1.5); axis([-1 1 0 1.1]); title(['M = 25']);set(gca,’XTick’,wtick,’YTick’,magtick);% M = 50M=50; n=0:M; x=(0.54-0.46*cos((2*pi*n)/(M-1)));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,3); plot(w/pi,magX,’LineWidth',1.5); axis([-1 1 0 1.1]); xlabel(’\omega/\pi’);ylabelf|X|'); title([’M=50’]);set(gca,’XTick’,wtick,’YTick’,magtick);%M = 101xlabel(’\omegaApi’);title([.M=101 •]);set(gca,’XTick’,wtick,’YTick’,magtick);。

相关文档
最新文档