几种常见窗函数及其MATLAB程序实现
信号采集与处理--MATLAB窗函数及其特征
信号采集与处理MATLAB 窗函数及其特征数字信号处理中通常是取其有限的时间片段进行分析,而不是对无限长的信号进行测量和运算。
具体做法是从信号中截取一个时间片段,然后对信号进行傅里叶变换、相关分析等数学处理。
信号的截断产生了能量泄漏,而用FFT算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的。
在FFT分析中为了减少或消除频谱能量泄漏及栅栏效应,可采用不同的截取函数对信号进行截短,截短函数称为窗函数,简称为窗。
泄漏与窗函数频谱的两侧旁瓣有关,对于窗函数的选用总的原则是,要从保持最大信息和消除旁瓣的综合效果出发来考虑问题,尽可能使窗函数频谱中的主瓣宽度应尽量窄,以获得较陡的过渡带;旁瓣衰减应尽量大,以提高阻带的衰减,但通常都不能同时满足这两个要求。
频谱中的如果两侧瓣的高度趋于零,而使能量相对集中在主瓣,就可以较为接近于真实的频谱。
不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。
信号的加窗处理,重要的问题是在于根据信号的性质和研究目的来选用窗函数。
图1是几种常用的窗函数的时域和频域波形,其中矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低,如果仅要求精确读出主瓣频率,而不考虑幅值精度,则可选用矩形窗,例如测量物体的自振频率等;布莱克曼窗主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高;如果分析窄带信号,且有较强的干扰噪声,则应选用旁瓣幅度小的窗函数,如汉宁窗、三角窗等;对于随时间按指数衰减的函数,可采用指数窗来提高信噪比。
表1 是几种常用的窗函数的比较。
如果被测信号是随机或者未知的,或者是一般使用者对窗函数不大了解,要求也不是特别高时,可以选择汉宁窗,因为它的泄漏、波动都较小,并且选择性也较高。
但在用于校准时选用平顶窗较好,因为它的通带波动非常小,幅度误差也较小。
5.3 广义余弦窗汉宁窗、海明窗和布莱克曼窗,都可以用一种通用的形式表示,这就是广义余弦窗。
MATLAB窗函数法实现FIR的高通,带通和低通滤波器的程序
MATLAB窗函数法实现FIR的高通,带通和低通滤波器的程序MATLAB 学院:地球物理与石油资源学院班级:姓名:学号:班内编号:指导教师:完成日期:测井11001大牛啊啊啊陈义群2013年6月3日课程设计报告一、题目FIR滤波器的窗函数设计法及性能比较 1. FIR滤波器简介数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
根据其单位冲激响应函数的时域特性可分为两类:无限冲激响应滤波器和有限冲激响应滤波器。
与IIR滤波器相比,FIR滤波器的主要特点为: a. 线性相位;b.非递归运算。
2. FIR 滤波器的设计FIR滤波器的设计方法主要有三种:a.窗函数设计法;b.频率抽样发;c.最小平法抽样法;这里我主要讨论在MATLAB环境下通过调用信号分析与处理工具箱的几类窗函数来设计滤波器并分析与比较其性能。
窗函数法设计FIR滤波器的一般步骤如下: a. 根据实际问题确定要设计的滤波器类型; b. 根据给定的技术指标,确定期望滤波器的理想频率特性;c. 求期望滤波器的单位脉冲响应;d. 求数字滤波器的单位脉冲响应; e. 应用。
常用的窗函数有(1)Hanningwindoww(n)?[?((2)Hammingw indoww(n)?[?((3)Balckmanwindoww(n)?[ ?((4)KaiserwindowI0{?1?[2n/(N?1)]2}w(n )?RN(n)I0(?)式中I0(x)是零阶Bessel函数,可定义为()2?n4?n)?()]RN(n)N?1N?1()2?n)]RN(n)N ?1() ?nN?1)]RN(n)() (x/2)m2I0(x)?1??m!m?1? 当x?0时与矩形窗一致;当x?时与海明窗结果相同;当x?时与布莱克曼窗结果相同。
3.窗函数的选择标准 1. 较低的旁瓣幅度,尤其是第一旁瓣; 2. 旁瓣幅度要下降得快,以利于增加阻带衰减;3. 主瓣宽度要窄,这样滤波器过渡带较窄。
几种常见窗函数及其MATLAB程序实现
几种常见窗函数及其MATLAB程序实现2013-12-16 13:58 2296人阅读评论(0) 收藏举报分类:Matlab(15)数字信号处理中通常是取其有限的时间片段进行分析,而不是对无限长的信号进行测量和运算。
具体做法是从信号中截取一个时间片段,然后对信号进行傅里叶变换、相关分析等数学处理。
信号的截断产生了能量泄漏,而用FFT算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的。
在FFT分析中为了减少或消除频谱能量泄漏及栅栏效应,可采用不同的截取函数对信号进行截短,截短函数称为窗函数,简称为窗。
泄漏与窗函数频谱的两侧旁瓣有关,对于窗函数的选用总的原则是,要从保持最大信息和消除旁瓣的综合效果出发来考虑问题,尽可能使窗函数频谱中的主瓣宽度应尽量窄,以获得较陡的过渡带;旁瓣衰减应尽量大,以提高阻带的衰减,但通常都不能同时满足这两个要求。
频谱中的如果两侧瓣的高度趋于零,而使能量相对集中在主瓣,就可以较为接近于真实的频谱。
不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。
信号的加窗处理,重要的问题是在于根据信号的性质和研究目的来选用窗函数。
图1是几种常用的窗函数的时域和频域波形,其中矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低,如果仅要求精确读出主瓣频率,而不考虑幅值精度,则可选用矩形窗,例如测量物体的自振频率等;布莱克曼窗主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高;如果分析窄带信号,且有较强的干扰噪声,则应选用旁瓣幅度小的窗函数,如汉宁窗、三角窗等;对于随时间按指数衰减的函数,可采用指数窗来提高信噪比。
表1 是几种常用的窗函数的比较。
如果被测信号是随机或者未知的,或者是一般使用者对窗函数不大了解,要求也不是特别高时,可以选择汉宁窗,因为它的泄漏、波动都较小,并且选择性也较高。
但在用于校准时选用平顶窗较好,因为它的通带波动非常小,幅度误差也较小。
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实现窗函数的代码,并展示窗函数在信号处理中的一些应用。
一、窗函数的概念和作用窗函数,顾名思义,是将信号与一个窗口函数进行相乘的操作。
窗口函数通常是一个在有限时间或有限频率范围内非零的函数,其作用是在截断信号的同时减小频谱泄露或干扰的效果。
窗函数主要用于以下几个方面: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设计数字带通FIR滤波器的几种窗函数的比较
课题介绍通过平时所学、书本内容和网络上了解的知识,我们小组讨论决定对MATLAB结合窗函数设计一个数字带通FIR滤波器工程中涉及的几个窗函数方法优劣好坏用图形形象的进行比较,以MATLAB软件为工具探讨出一个失真小高效的设计方法。
数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
与IIR滤波器相比,FIR的实现是非递归的,总是稳定的;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特性。
根据FIR滤波器的原理,提出了FIR滤波器的窗函数设计法,给出了在MATLAB环境下,用窗函数法设计FIR滤波器的过程和设计实例。
通过利用不同的窗函数方法设计FIR滤波器,对所设计的滤波器进行分析比较,得出各种方法设计的滤波器的优缺点及其不同的使用场合,从而可以在设计滤波器时能够正确的选择FIR数字滤波器的窗函数的选取及设计方法。
数字滤波技术数字滤波,就是通过一定的计算或判断程序减少干扰在有用信号中的比重,所以故实质上是一种程序滤波。
与此对应的就是模拟滤波,模拟滤波主要无源绿波(直接用电阻、电容、电感等不外接电源的元件组成的)与有源滤波(如运算放大器等需要外接电源组成的),其目的是将信号中的噪音和干扰滤去或者将希望得到的频率信号滤出为我所用。
数字滤波的出现克服了模拟滤波的很多不足,具有以下优点:1.是用程序实现的,不需要增加硬设备,所以可靠性高,稳定性好。
2.可以对频率很低的信号实现滤波,克服了模拟滤波的缺陷。
3.可以根据信号的不同,采用不同的滤波方法或参数,具有灵活、方便、功能强的特点。
本文主要对FIR滤波器加以介绍。
FIR滤波器FIR滤波器是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位冲激响应是有限的,没有输入到输出的反馈,是稳定的系统。
FIR滤波器具有以下主要优点:1.FIR滤波器具有准确的线性相位;2.FIR滤波器永远稳定;3.FIR滤波器设计方法一般是线性的;4.FIR滤波器在硬件上具有更高的运行效率;5.FIR滤波器启动传输时间只需要有限时间。
窗函数的实现及分析
窗函数的实现及分析1窗函数1.1基本概念在实际进⾏数字信号处理时,往往需要把信号的观察时间限制在⼀定的时间间隔内,只需要选择⼀段时间信号对其进⾏分析。
这样,取⽤有限个数据,即将信号数据截断的过程,就等于将信号进⾏加窗函数操作。
⽽这样操作以后,常常会发⽣频谱分量从其正常频谱扩展开来的现象,即所谓的“频谱泄漏”。
当进⾏离散傅⽴叶变换时,时域中的截断是必需的,因此泄漏效应也是离散傅⽴叶变换所固有的,必须进⾏抑制。
⽽要对频谱泄漏进⾏抑制,可以通过窗函数加权抑制DFT 的等效滤波器的振幅特性的副瓣,或⽤窗函数加权使有限长度的输⼊信号周期延拓后在边界上尽量减少不连续程度的⽅法实现。
⽽在后⾯的FIR 滤波器的设计中,为获得有限长单位取样响应,需要⽤窗函数截断⽆限长单位取样响应序列。
另外,在功率谱估计中也要遇到窗函数加权问题。
窗函数的基本概念。
设x (n )是⼀个长序列,w (n )是长度为N 的窗函数,⽤w (n )截断x (n ),得到N 点序列x n (n ),即x n (n ) = x (n ) w (n )在频域上则有由此可见,窗函数w (n )不仅仅会影响原信号x (n )在时域上的波形,⽽且也会影响到频域内的形状。
1.2设计原理窗函数设计法的基本原理是⽤有限长单位脉冲响应序列()n h 逼近()n h d 。
由于()n h d 往往是⽆限长序列,⽽且是⾮因果的,所以⽤窗函数()n ω将()n h d 截断,并进⾏加权处理,得到:()n h 就作为实际设计的FIR 数字滤波器的单位脉冲响应序列,其频率响应函数()ωj e H 为式中,N 为所选窗函数()n ω的长度。
⽤窗函数法设计的滤波器性能取决于窗函数()n ω的()()()()--=ππj j j d e π21e θθωθωW e X X N ()()()n n h n h d ω=()()nj N n j en h eH ωω∑-==1类型及窗⼝长度N的取值。
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函数详解及用法
随机信号产生rand:产生均匀分布的随机数rand(n) 产生一个n*n的随机矩阵,元素分布于(0,1)rand(m,n) 产生m*n均匀分布的随机矩阵randn:产生标准正态分布的随机数(均值为0,方差为1)Y = randn(n) 返回一个n*n的随机项的矩阵Y = randn(m,n) 返回一个m*n的随机项矩阵。
Y = randn(size(A)) 返回一个和A有同样维数大小的随机数组。
randn 返回一个每次都变化的一个数值randi:产生均匀分布的随机整数randi(imax) 产生分布于[1:imax]的随机整数r = randi(imax,n) 产生分布于[1:imax]的n*n随机整数矩阵. randi(imax,m,n) 产生分布于[1:imax]的m*n随机整数矩阵.r = randi([imin,imax],...) 产生分布于[imin:imax]间的随机整数Ex:生成均匀分布于-10:10的整数 r = randi([-10 10],100,1); wgn:生成高斯白噪声y = wgn(m,n,p) 产生一个m行n列的高斯白噪声的矩阵,p为输出功率,单位dBW。
默认负载阻抗为1Ωy = wgn(m,n,p,imp) 以欧姆为单位指定负载阻抗。
y = wgn(...,powertype) powertype指定p的单位, 'dBW', 'dBm', 'linear'。
linear power以瓦特(Watt)为单位。
y = wgn(...,outputtype) outputtype指定输出为'real' 或'complex'。
若输出为 'complex',实部和虚部的功率分别为p/2.y = wgn(m,n,p,imp,state) 重置randn的状态。
awgn:在某一信号中加入高斯白噪声y = awgn(x,SNR) 在信号x中加入高斯白噪声。
MATLAB窗函数
4.3 实验原理 数字滤波器的设计是数字信号处理中的一个重要内容。
数字滤波器设计包括FIR(有限单位脉冲响应)滤波器与IIR(无限单位脉冲响应)滤波器两种。
与IIR滤波器相比,FIR滤波器在保证幅度特性满足技术要求的同时,很容易做到严格的线性相位特性。
设FIR滤波器单位脉冲响应h(n)长度为N,其系统函数H(z)为: H(z)是z-1的N-1次多项式,它在z平面上有N-1个零点,原点z=0是N-1阶重极点,因此H(z)是永远稳定的。
稳定和线性相位特性是FIR滤波器突出的优点。
FIR滤波器的设计任务是选择有限长度的h(n)。
使传输函数H( )满足技术要求。
FIR滤波器的设计方法有多种,如窗函数法、频率采样法及其它各种优化设计方法,本实验介绍窗函数法的FIR滤波器设计。
窗函数法是使用矩形窗、三角窗、巴特利特窗、汉明窗、汉宁窗和布莱克曼窗等设计出标准响应的高通、低通、带通和带阻FIR滤波器。
一、firl函数的使用 在MA TLAB 下设计标准响应FIR滤波器可使用firl函数。
firl函数以经典方法实现加窗线性相位FIR滤波器设计,它可以设计出标准的低通、带通、高通和带阻滤波器。
firl函数的用法为: b=firl(n,Wn,/ftype/,Window) 各个参数的含义如下: b—滤波器系数。
对于一个n阶的FIR滤波器,其n+1个滤波器系数可表示为:b(z)=b(1)+b(2)z-1+…+b(n+1)z-n。
n—滤波器阶数。
Wn—截止频率,0≤Wn≤1,Wn=1对应于采样频率的一半。
当设计带通和带阻滤波器时,Wn=[W1 W2],W1≤ω≤W2。
ftype—当指定ftype时,可设计高通和带阻滤波器。
Ftype=high时,设计高通FIR滤波器;ftype=stop时设计带阻FIR滤波器。
低通和带通FIR滤波器无需输入ftype参数。
Window—窗函数。
窗函数的长度应等于FIR滤波器系数个数,即阶数n+1。
(完整)MatLab常用函数大全,推荐文档
13、求矩阵的最大值和最小值
求矩阵A的最大值的函数有三种调用格式,分别是:
(1)max(A):返回一个行向量,向量的i个元素是矩阵A的第i列的最大值。
(2)[y,u]=max(A):返回行向量y和u,y纪录A的每列的最大值,u纪录每列最大值的行号。
factor(s):对符号表达式s分解因式。
expand(s):对符号表达式s进行展开。
例如:
syms x y;
s1=x^3-6*x^2+11*x-6
s1 =
x^3-6*x^2+11*x-6
factor(s1)
ans =
(x-1)*(x-2)*(x-3)
s2=(x-y)*(x+y)
s2 =
(x-y)*(x+y)
findsym(s)
ans =
x, y
findsym(5*x+2)
ans =
x
findsym(a*x+b*y+c)%符号变量c不会出现在结果中
ans =
a, b, x, y
29、符号表达式四则运算
符号表达式的加、减、乘、除和幂运算可分别由函数symadd、symsub、symmul、symdiv和sympow来实现。例如
对多项式求导数的函数是:
p=polyder(p1):求多项式p1的导函数。
p=polyder(p1,p2):求多项式p1和p2乘积的导函数。
[p,q]=polyder(p1,p2):求多项式p1和p2之商的导函数,p、q是导函数的分子、分母。
例:求有理分式 的导函数。
命令如下:
p1=[1,-1];
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。
(仅供参考)各种窗函数设计
n=51; window=hamming(n); [h,w]=freqz(window,1); subplot(1,2,1); stem(window); subplot(1,2,2); plot(w/pi,20*log(abs(h)/abs(h(1))));
哈明窗及其频谱特性
2.5 布莱克曼窗函数
本章对经常用到的6个窗函数矩形窗函数三角窗函数汉宁窗函数海明窗函数布莱克曼窗函数和凯塞窗函数先是做了基本概念上的阐释然后对其matlab实现函数做出了说明最后又结合具体的实例对这些窗函数的频域特性等进行了介绍
窗函数
本文对数字信号处理过程中用到的有关窗函数进行了说明�这些窗函数主要有�矩形 窗函数、三角窗函数、汉宁窗函数、海明窗函数、布莱克曼窗函数和凯塞窗函数等。
例�生成一个长度为 50 的布莱克曼窗�并观察其频率特性(使用归一化的幅值和频 率)�结果如图所示。
程序
n=51; window=blackman(n); [h,w]=freqz(window,1); subplot(1,2,1); stem(window);
subplot(1,2,2); plot(w/pi,20*log(abs(h)/abs(h(1))));
�
� �
2k � n
1
,
� �
2(n
�
k
�
1)
,
1� k � n 2
n�k�n
�n
2
它的频率响应为�
2
� � WR e j�
�
�
j�
� �
e�
N �1 � �
2�
�
2
� �
N �1� �
�
sin
6种窗函数基本参数
6种窗函数基本参数窗函数是一种在信号处理、频谱分析和滤波器设计中经常使用的数学工具。
它是一种在有限时间区间内为信号施加权重的函数,可以用来调整信号在频谱域中的性质。
窗函数的选择可以影响信号的频谱特性,因此选择适当的窗函数是非常重要的。
在信号处理中,有多种常用的窗函数,下面将介绍其中的6种常用窗函数及其基本参数:1. 矩形窗函数(Rectangular Window):矩形窗函数是最简单的窗函数之一,其窗函数为常数值1,表示在有限时间窗口内等比例地对信号进行加权。
其数学表达式为:\[w(n)=1\]其中,\(n\)为窗函数的序号,代表时间点。
2. 汉宁窗函数(Hanning Window):汉宁窗函数是一种常用的窗函数,具有较好的频率分辨率和副瓣抑制能力。
其数学表达式为:\[ w(n) = 0.5 - 0.5\cos\left(\frac{2\pi n}{N-1}\right) \]其中,\(N\)为窗口长度。
3. 汉明窗函数(Hamming Window):汉明窗函数也是一种常用的窗函数,与汉宁窗函数相似但有所不同。
其数学表达式为:\[ w(n) = 0.54 - 0.46\cos\left(\frac{2\pi n}{N-1}\right) \]其中,\(N\)为窗口长度。
4. 布莱克曼窗函数(Blackman Window):布莱克曼窗函数是一种频谱主瓣宽度较窄的窗函数,能够有效抑制副瓣。
其数学表达式为:\[ w(n) = 0.42 - 0.5\cos\left(\frac{2\pi n}{N-1}\right) + 0.08\cos\left(\frac{4\pi n}{N-1}\right) \]其中,\(N\)为窗口长度。
5. 凯塞窗函数(Kaiser Window):凯塞窗函数是一种可调节的窗函数,参数\(\beta\)用来控制主瓣宽度和副瓣抑制的平衡。
其数学表达式为:\[ w(n) = \frac{I_0\left[\beta\sqrt{1-\left(\frac{2n}{N-1}-1\right)^2}\right]}{I_0(\beta)} \]其中,\(I_0(\cdot)\)为修正贝塞尔函数,\(\beta\)为形状参数。
matlab 窗函数对幅度 -回复
matlab 窗函数对幅度-回复Matlab窗函数对幅度引言:窗函数是信号处理领域中经常使用的工具,广泛应用于滤波、谱分析、频谱估计以及信号重建等领域。
在Matlab中,有许多常用的窗函数可供使用,如矩形窗、汉宁窗、汉明窗等。
本文将详细介绍窗函数的概念,以及窗函数对信号的幅度的影响。
第一部分:窗函数的概念首先,我们来了解一下窗函数的概念。
窗函数通常用于信号的截断和加权处理。
它通过将信号与一个特定形状的窗函数相乘,来限制信号在一定时间范围内的有效部分,同时减小信号在边界上的泄漏。
常见的窗函数有以下几种:1. 矩形窗:一个简单的矩形函数,信号的有效部分与窗函数的大小相同。
2. 汉宁窗:它具有较好的主瓣抑制特性和较小的峰值旁瓣,但会引入一些泄漏。
3. 汉明窗:汉明窗经过优化,适用于频谱分析。
4. 升余弦窗:它在边界处具有连续性,并提供较好的主瓣抑制效果。
第二部分:窗函数对信号幅度的影响接下来,我们将探讨不同窗函数对信号幅度的影响。
为了说明问题,我们选择一个简单的正弦信号作为例子。
我们首先生成一个频率为100 Hz的正弦信号,采样频率为1000 Hz,持续时间为1秒。
代码如下:matlabfs = 1000; 采样频率t = 0:1/fs:1-1/fs; 时间轴f = 100; 正弦波频率x = sin(2*pi*f*t); 正弦信号接下来,我们将使用不同的窗函数对该信号进行加权处理,并观察其对幅度的影响。
以汉宁窗为例,代码如下:matlabw = hann(length(x)); 生成长度与信号相同的汉宁窗xw = x.*w; 信号与窗函数相乘在此代码中,我们使用了Matlab中的`hann`函数来生成汉宁窗。
通过将信号与窗函数相乘,我们得到了加权后的信号`xw`。
接下来,我们绘制原始信号和加权后的信号的频谱图,以观察幅度的变化。
matlabX = fft(x);Xw = fft(xw);frequencies = linspace(0, fs, length(X));figure;subplot(2, 1, 1);plot(frequencies, 20*log10(abs(X)));title('原始信号频谱');xlabel('频率(Hz)');ylabel('幅度(dB)');subplot(2, 1, 2);plot(frequencies, 20*log10(abs(Xw)));title('加窗后信号频谱');xlabel('频率(Hz)');ylabel('幅度(dB)');运行以上代码后,我们可以观察到原始信号和加权后信号的频谱图。
matlab窗函数代码
matlab窗函数代码MATLAB 窗函数代码用于信号处理中的频谱分析和滤波设计等领域。
窗函数在时域上对信号进行加权,使得信号在频谱上表现出更好的特性。
本文将介绍MATLAB 窗函数代码的使用方法和原理,并通过一步一步的回答来帮助读者了解窗函数的概念及其在信号处理中的应用。
第一步:了解窗函数的概念窗函数是一种在时域上对信号进行加权的方法,它在信号的前后端施加一个权重因子来减小信号的边界效应。
常用的窗函数包括矩形窗、汉宁窗、汉明窗、布莱克曼窗等等。
通过对信号进行窗函数加权后,信号在频谱上的表现会更加平滑,减少了频谱泄漏和频谱扩展等问题。
第二步:了解MATLAB 中窗函数的使用方法在MATLAB 中,我们可以使用窗函数对信号进行加权。
MATLAB 提供了一系列的窗函数函数,在使用前需要先了解各个窗函数的特性及其在不同应用场景中的适用性。
例如,可以通过`rectwin` 函数生成矩形窗函数,`hann` 函数生成汉宁窗函数,`hamming` 函数生成汉明窗函数等。
第三步:生成窗函数通过在MATLAB 中调用相应的窗函数函数,我们可以生成不同类型的窗函数。
例如,通过`window = rectwin(N)` 可以生成长度为N 的矩形窗函数,`window = hann(N)` 可以生成长度为N 的汉宁窗函数,`window= hamming(N)` 可以生成长度为N 的汉明窗函数。
第四步:对信号进行窗函数加权在获得窗函数后,我们可以将其应用于待处理的信号上。
例如,可以通过`y = x .* window` 将窗函数应用于信号x 上,得到加权后的信号y。
这样,信号在边界处的幅值会逐渐减小,减小了边界效应。
第五步:进行频谱分析窗函数加权后的信号常用于频谱分析中。
我们可以使用MATLAB 中的傅里叶变换函数`fft` 将信号从时域转换到频域。
例如,通过`Y = fft(y)` 将加权后的信号y 进行傅里叶变换,得到其频谱Y。
matlab常用函数汇总
MATLAB总结一MATLAB常用函数1、特殊变量与常数2、操作符与特殊字符3、基本数学函数4、基本矩阵和矩阵操作5、数值分析和傅立叶变换6、多项式与插值7、绘图函数二Matlab工作间常用命令:1、常用的窗口命令2、有关文件及其操作的语句3、启动与退出的命令4、管理变量工作空间的命令5、对命令窗口控制的常用命令6、此外还有一些常用的命令:↑Ctrl+p 调用上一次的命令↓Ctrl+n 调用下一行的命令←Ctrl+b 退后一格→Ctrl+f 前移一格Ctrl + ←Ctrl+r 向右移一个单词Ctrl + →Ctrl+l 向左移一个单词Home Ctrl+a 光标移到行首End Ctrl+e 光标移到行尾Esc Ctrl+u 清除一行Del Ctrl+d 清除光标后字符Backspace Ctrl+h 清除光标前字符Ctrl+k 清除光标至行尾字 Ctrl+c 中断程序运行三Matlab 运行加速1)性能加速a、采用如下数据类型:logical、char、int、uint、double;b、数据维数不超过3;c、f or循环范围内只采用标量值;只调用内建函数..if 、else if 、while、swicth的条件测试语句只采用标量;d、同一行的命令条数为一条;e、命令操作为改变数据类型或者形状大小;维数;f、复数写为:a+bj型;2遵守3条准则a、避免使用循环语句将循环语句向量化:向量化技术函数有All、diff、ipermute、permute、reshape、squeeze、any、find、logical、prod、shiftdim、sub2ind、cumsum、ind2sub、ndgrid、repmat、sort、sum 等;不得不使用循环语句时;超过2重;循环次数少的在外环;b、预分配矩阵空间函数有:zeros、ones、cell、struct、repmat和采用repmat函数对非double 型预分配空间或对一个变量扩容;c、优先使用内建函数和function;3绝招:采用Mex技术;或者利用matlab提供的工具将程序转化为C语言、Fortran 语言注意:比较向量化和加速器;加速之前采用profiler测试各部分耗时情况..SIMILINK模块库按功能进行分为以下8类子库:Continuous连续模块Discrete离散模块Function&Tables函数和平台模块Math数学模块Nonlinear非线性模块Signals&Systems信号和系统模块Sinks接收器模块Sources输入源模块连续模块Continuouscontinuous.mdlIntegrator:输入信号积分Derivative:输入信号微分State-Space:线性状态空间系统模型Transfer-Fcn:线性传递函数模型Zero-Pole:以零极点表示的传递函数模型Memory:存储上一时刻的状态值Transport Delay:输入信号延时一个固定时间再输出Variable Transport Delay:输入信号延时一个可变时间再输出离散模块Discrete discrete.mdlDiscrete-time Integrator:离散时间积分器Discrete Filter:IIR与FIR滤波器Discrete State-Space:离散状态空间系统模型Discrete Transfer-Fcn:离散传递函数模型Discrete Zero-Pole:以零极点表示的离散传递函数模型First-Order Hold:一阶采样和保持器Zero-Order Hold:零阶采样和保持器Unit Delay:一个采样周期的延时函数和平台模块Function&Tables function.mdlFcn:用自定义的函数表达式进行运算:利用matlab的现有函数进行运算S-Function:调用自编的S函数的程序进行运算Look-Up Table:建立输入信号的查询表线性峰值匹配Look-Up Table2-D:建立两个输入信号的查询表线性峰值匹配数学模块Math math.mdlSum:加减运算Product:乘运算Dot Product:点乘运算Gain:比例运算Math Function:包括指数函数、对数函数、求平方、开根号等常用数学函数Trigonometric Function:三角函数;包括正弦、余弦、正切等MinMax:最值运算Abs:取绝对值Sign:符号函数Logical Operator:逻辑运算Relational Operator:关系运算Complex to Magnitude-Angle:由复数输入转为幅值和相角输出Magnitude-Angle to Complex:由幅值和相角输入合成复数输出Complex to Real-Imag:由复数输入转为实部和虚部输出Real-Imag to Complex:由实部和虚部输入合成复数输出非线性模块Nonlinear nonlinear.mdlSaturation:饱和输出;让输出超过某一值时能够饱和..Relay:滞环比较器;限制输出值在某一范围内变化..Switch:开关选择;当第二个输入端大于临界值时;输出由第一个输入端而来;否则输出由第三个输入端而来..Manual Switch:手动选择开关信号和系统模块Signal&Systems sigsys.mdlIn1:输入端..Out1:输出端..Mux:将多个单一输入转化为一个复合输出..Demux:将一个复合输入转化为多个单一输出..Ground:连接到没有连接到的输入端..Terminator:连接到没有连接到的输出端..SubSystem:建立新的封装Mask功能模块接收器模块Sinks sinks.mdlScope:示波器..XY Graph:显示二维图形..To Workspace:将输出写入MA TLAB的工作空间..To File.mat:将输出写入数据文件..输入源模块Sources sources.mdlConstant:常数信号..Clock:时钟信号..From Workspace:来自MA TLAB的工作空间..From File.mat:来自数据文件..Pulse Generator:脉冲发生器..Repeating Sequence:重复信号..Signal Generator:信号发生器;可以产生正弦、方波、锯齿波及随意波..Sine Wave:正弦波信号..Step:阶跃波信号..在MA TLAB命令窗口下直接运行一个已经存在的simulink模型t;x;y=sim'model';timespan;option;ut其中;t为返回的仿真时间向量;x为返回的状态矩阵;y为返回的输出矩阵;model为系统Simulink模型文件名;timespan为仿真时间; option为仿真参数选择项;由simset设置; ut 为选择外部产生输入;ut=T;u1;u2;...;un..Sources库信号源库无输入;至少一个输出Sine Wave: 产生幅值、频率可设置的正弦波信号..Step: 产生幅值、阶跃时间可设置的阶跃信号..Sinks库显示和写模块输出Display: 数字表;显示指定模块的输出数值XY Graph: 用同一图形窗口;显示X-Y坐标的图形需现在参数对话框中设置每个坐标的变化范围..Scope: 示波器..显示在仿真过程中产生的信号波形..Continuous库包含描述线性函数的模块Derivative: 微分环节..其输出为其输入信号的微分..Integrator: 积分环节..其输出为其输入信号的积分..Transfer Fcn: 分子分母为多项式形式的传递函数Zero-Poles: 零极点增益形式的传递函数..Math库包含描述一般数学函数的模块..AddSign: 符号函数..输出为输入信号的符号Math function: 实现一个数学函数..Signals & Systems 库Demux: 信号分路器..将混路器输出的信号依照原来的构成方法分解成多路信号..Mux: 信号汇总器..将多路信号依照向量的形式混合成一路信号..Simulink环境下的仿真运行仿真参数对话框Solver页设置仿真开始和终止时间Solver options仿真算法选择:分为定步长算法和变步长算法离散系统一般默认选择定步长算法;在实时控制中则必须选用定步长算法变步长算法;对连续系统仿真一般选择ode45;步长范围用auto Error Tolerance误差限度:算法的误差是指当前状态值与当前状态估计值的误差;分为Relative tolerance相对限度和Absolute tolerance绝对限度;通常可选auto..。
matlab常用函数汇总
MATLAB总结(一)MATLAB常用函数1、特殊变量与常数2、操作符与特殊字符3、基本数学函数4、基本矩阵和矩阵操作5、数值分析和傅立叶变换6、多项式与插值7、绘图函数(二)Matlab工作间常用命令:1、常用的窗口命令2、有关文件及其操作的语句3、启动与退出的命令4、管理变量工作空间的命令5、对命令窗口控制的常用命令6、此外还有一些常用的命令:↑ Ctrl+p 调用上一次的命令↓ Ctrl+n 调用下一行的命令← Ctrl+b 退后一格→ Ctrl+f 前移一格Ctrl + ← Ctrl+r 向右移一个单词Ctrl + → Ctrl+l 向左移一个单词Home Ctrl+a 光标移到行首End Ctrl+e 光标移到行尾Esc Ctrl+u 清除一行Del Ctrl+d 清除光标后字符Backspace Ctrl+h 清除光标前字符Ctrl+k 清除光标至行尾字Ctrl+c 中断程序运行(三)Matlab 运行加速1) 性能加速a、采用如下数据类型:logical、char、int、uint、double;b、数据维数不超过3;c、 for循环范围内只采用标量值,只调用内建函数。
if 、else if 、while、swicth的条件测试语句只采用标量;d、同一行的命令条数为一条;e、命令操作为改变数据类型或者形状(大小,维数);f、复数写为:a+bj型;2)遵守3条准则a、避免使用循环语句(将循环语句向量化:向量化技术函数有All、diff、ipermute、permute、reshape、squeeze、any、find、logical、prod、shiftdim、sub2ind、cumsum、ind2sub、ndgrid、repmat、sort、sum 等;不得不使用循环语句时,超过2重,循环次数少的在外环);b、预分配矩阵空间(函数有:zeros、ones、cell、struct、repmat)和采用repmat函数对非double 型预分配空间或对一个变量扩容;c、优先使用内建函数和function;3)绝招:采用Mex技术,或者利用matlab提供的工具将程序转化为C语言、Fortran语言注意:比较向量化和加速器;加速之前采用profiler测试各部分耗时情况。
matlab窗函数频谱,功率谱、频率分辨率、频谱泄漏与窗函数
matlab窗函数频谱,功率谱、频率分辨率、频谱泄漏与窗函数功率谱、频率分辨率、频谱泄漏与窗函数2008-06-01 23:49功率谱、频率分辨率、频谱泄漏与窗函数在分析和测定所采集的数据记录时,快速傅⽴叶变换(FFT)和功率谱是⾮常有⽤的⼯具。
借助这些⼯具能够有效地采集时域信号、测定其频谱成分、并对结果进⾏显⽰。
功率谱图(参考抽样程序)在频率轴(x 轴)上的频率范围和分辨率取决于采样速率和数据记录的长度(采样点数)。
功率谱图上的频率点数或谱线数为N/2 ,N 是信号采样记录中包含的点数。
所有的频点间隔为fSAMPLE/N ,通常称之为频率分辨率或FFT 分辨率: fSAMPLE/N = 1 / (N · (tSAMPLE)频谱泄漏和窗函数FFT 分析中常常要⽤到窗函数。
在基于FFT 的测量中正确选择窗函数⾮常关键。
频谱泄漏是由FFT 算法中的假设造成的,FFT 算法中假设离散时间序列可以精确地在整个时域进⾏周期延拓,所有包含该离散时间序列的信号为周期函数,周期与时间序列的长度相关。
然⽽如果时间序列的长度不是信号周期的整数倍(fIN/fSAMPLE ( NWINDOW/NRECORD) ,假设条件即不成⽴,就会发⽣频谱泄漏。
绝⼤多数情况下所处理的是⼀个未知的平稳信号,不能保证采样点数为周期的整数倍。
频谱泄漏使给定频率分量的能量泄漏到相邻的频率点,从⽽在测量结果中引⼊误差。
选择合适的窗函数可以减⼩频谱泄漏效应。
为进⼀步了解窗函数对频谱的影响,我们考察⼀下窗函数的频率特性。
输⼊数据通过⼀个窗函数相当于原始数据的频谱与窗函数频谱的卷积。
窗函数的频谱由⼀个主瓣和⼏个旁瓣组成,主瓣以时域信号的每个频率成份为中⼼。
旁瓣在主瓣的两侧以⼀定的间隔衰减⾄零。
FFT 产⽣离散的频谱,出现在FFT 每个谱线的是在每个谱线上的连续卷积频谱。
如果原始信号的频谱成份与FFT 中的谱线完全⼀致,这种情况下采样数据的长度为信号周期的整数倍,频谱中只有主瓣。
几种常见窗函数及其MATLAB程序实现
几种常见窗函数及其MATLAB程序实现2013-12-16 13:58 2296人阅读评论(0) 收藏举报分类:Matlab(15)数字信号处理中通常是取其有限的时间片段进行分析,而不是对无限长的信号进行测量和运算。
具体做法是从信号中截取一个时间片段,然后对信号进行傅里叶变换、相关分析等数学处理。
信号的截断产生了能量泄漏,而用FFT算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的。
在FFT分析中为了减少或消除频谱能量泄漏及栅栏效应,可采用不同的截取函数对信号进行截短,截短函数称为窗函数,简称为窗。
泄漏与窗函数频谱的两侧旁瓣有关,对于窗函数的选用总的原则是,要从保持最大信息和消除旁瓣的综合效果出发来考虑问题,尽可能使窗函数频谱中的主瓣宽度应尽量窄,以获得较陡的过渡带;旁瓣衰减应尽量大,以提高阻带的衰减,但通常都不能同时满足这两个要求。
频谱中的如果两侧瓣的高度趋于零,而使能量相对集中在主瓣,就可以较为接近于真实的频谱。
不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。
信号的加窗处理,重要的问题是在于根据信号的性质和研究目的来选用窗函数。
图1是几种常用的窗函数的时域和频域波形,其中矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低,如果仅要求精确读出主瓣频率,而不考虑幅值精度,则可选用矩形窗,例如测量物体的自振频率等;布莱克曼窗主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高;如果分析窄带信号,且有较强的干扰噪声,则应选用旁瓣幅度小的窗函数,如汉宁窗、三角窗等;对于随时间按指数衰减的函数,可采用指数窗来提高信噪比。
表1 是几种常用的窗函数的比较。
如果被测信号是随机或者未知的,或者是一般使用者对窗函数不大了解,要求也不是特别高时,可以选择汉宁窗,因为它的泄漏、波动都较小,并且选择性也较高。
但在用于校准时选用平顶窗较好,因为它的通带波动非常小,幅度误差也较小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
几种常见窗函数及其MATLAB程序实现2013-12-16 13:58 2296人阅读评论(0) 收藏举报分类:Matlab(15)数字信号处理中通常是取其有限的时间片段进行分析,而不是对无限长的信号进行测量和运算。
具体做法是从信号中截取一个时间片段,然后对信号进行傅里叶变换、相关分析等数学处理。
信号的截断产生了能量泄漏,而用FFT算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的。
在FFT分析中为了减少或消除频谱能量泄漏及栅栏效应,可采用不同的截取函数对信号进行截短,截短函数称为窗函数,简称为窗。
泄漏与窗函数频谱的两侧旁瓣有关,对于窗函数的选用总的原则是,要从保持最大信息和消除旁瓣的综合效果出发来考虑问题,尽可能使窗函数频谱中的主瓣宽度应尽量窄,以获得较陡的过渡带;旁瓣衰减应尽量大,以提高阻带的衰减,但通常都不能同时满足这两个要求。
频谱中的如果两侧瓣的高度趋于零,而使能量相对集中在主瓣,就可以较为接近于真实的频谱。
不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。
信号的加窗处理,重要的问题是在于根据信号的性质和研究目的来选用窗函数。
图1是几种常用的窗函数的时域和频域波形,其中矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低,如果仅要求精确读出主瓣频率,而不考虑幅值精度,则可选用矩形窗,例如测量物体的自振频率等;布莱克曼窗主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高;如果分析窄带信号,且有较强的干扰噪声,则应选用旁瓣幅度小的窗函数,如汉宁窗、三角窗等;对于随时间按指数衰减的函数,可采用指数窗来提高信噪比。
表1 是几种常用的窗函数的比较。
如果被测信号是随机或者未知的,或者是一般使用者对窗函数不大了解,要求也不是特别高时,可以选择汉宁窗,因为它的泄漏、波动都较小,并且选择性也较高。
但在用于校准时选用平顶窗较好,因为它的通带波动非常小,幅度误差也较小。
表1 几种常用的窗函数的比较名称特点应用矩形窗Rectangle 矩形窗使用最多,习惯上不加窗就是使信号通过了矩形窗。
这种窗的优点是主瓣比较集中,缺点是旁瓣较高,并有负旁瓣,导致变换中带进了高频干扰和泄如果仅要求精确读出主瓣频率,而不考虑幅值精度,则可选用矩形窗,例如测量物体的自振频率下面是几种窗函数归一化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','P0304a'); w=linspace(-pi,pi,501); wtick=[-1:0.5:1]; magtick=[0:0.5:1.1]; % M=10M=10; n=0: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=0: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=0: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('\omega/\pi'); ylabel('|X|');title('M=50'); set(gca,'XTick',wtick,'YTick',magtick);% M=101M=101; n=0:M; x=ones(1,length(n));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,4); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);xlabel('\omega/\pi'); ylabel('|X|');title(['M=101']);三角窗:% Triangular Window:% DTFT of a Triangular Window,M = 10,25,50,101clc; close all;Hf_1=figure; set(Hf_1,'NumberTitle','off','Name','P0304b'); w=linspace(-pi,pi,501); wtick=[-1:0.5:1]; magtick=[0:0.5:1.1]; % M = 10M=10; 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,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=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,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/\pi'); 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);subplot(2,2,4); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);xlabel('\omega/\pi'); title(['M = 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,'NumberTitle','off','Name','P0304c'); w=linspace(-pi,pi,501); wtick=[-1:0.5:1]; magtick=[0:0.5:1.1]; % M = 10M=10;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,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=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(['M = 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'); ylabel('|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)));X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);subplot(2,2,4); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]); xlabel('\omega/\pi'); title(['M = 101']);set(gca,'XTick',wtick,'YTick',magtick);哈明窗:% Hamming Window:clc; close all;Hf_1=figure; set(Hf_1,'NumberTitle','off','Name','P0304d');w=linspace(-pi,pi,501); wtick=[-1:0.5:1]; magtick=[0:0.5:1.1];% M = 10M=10; 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,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=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,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'); ylabel('|X|'); title(['M=50']);set(gca,'XTick',wtick,'YTick',magtick);% M = 101M=101; 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,4); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]); xlabel('\omega/\pi');title(['M=101']);set(gca,'XTick',wtick,'YTick',magtick);。