几种常见窗函数及其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。
- 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);。