实验四MATLAB在离散傅立叶变换(DFT)中的应用
离散傅立叶变换DFT实验报告
实验一离散时间系统的时域剖析之羊若含玉创作一、实验目标1.运用MATLAB仿真一些简略的离散时间系统,并研究它们的时域特性.2.运用MATLAB中的卷积运算盘算系统的输出序列,加深对离散系统的差分方程、冲激响应和卷积剖析办法的懂得.二、实验原理离散时间系统其输入、输出关系可用以下差分方程描写:当输入信号为冲激信号时,系统的输出记为系统单位冲激响应δ,则系统响应为如下的卷积盘算式:hn→[n]][当h[n]是有限长度的(n:[0,M])时,称系统为FIR系统;反之,称系统为IIR系统.在MATLAB中,可以用函数y=Filter(p,d,x) 求解差分方程,也可以用函数y=Conv(x,h)盘算卷积.例1clf;n=0:40;a=1;b=2;x1= 0.1*n;x2=sin(2*pi*n);x=a*x1+b*x2;num=[1, 0.5,3];den=[2 -3 0.1];ic=[0 0]; %设置零初始条件y1=filter(num,den,x1,ic); %盘算输入为x1(n)时的输出y1(n) y2=filter(num,den,x2,ic); %盘算输入为x2(n)时的输出y2(n) y=filter(num,den,x,ic); %盘算输入为x (n)时的输出y(n) yt= a*y1+b*y2;%画出输出信号subplot(2,1,1)stem(n,y);ylabel(‘振幅’);title(‘加权输入a*x1+b*x2的输出’);subplot(2,1,2)stem(n,yt);ylabel(‘振幅’);title(‘加权输出a*y1+b*y2’);(一)、线性和非线性系统对线性离散时间系统,若)(1n y 和)(2n y 分离是输入序列)(1n x 和)(2n x 的响应,则输入)()()(21n bx n ax n x +=的输出响应为)()()(21n by n ay n y +=,即相符叠加性,其中对任意常量a 和b 以及任意输入)(1n x 和)(2n x 都成立,不然为非线性系统.(二)、时不变系统和时变系统对离散时不变系统,若)(1ny是)(1nx的响应,则输入x(n)=x1(n-n0)的输出响应为y(n)=y1(n-n0),式中n0是任意整数.该输入输出关系,对任意输入序列及其相应的输出成立,若对至少一个输入序列及其相应的输出序列不成立,则系统称之为时变的.(三)、线性卷积假设待卷积的两个序列为有限长序列,卷积运算符在MATLAB中可敕令conv实现.例如,可以把系统的冲激响应与给定的有限长输入序列进行卷积,得到有限长冲激响应系统的输出序列.下面的MATLAB程序实现了该办法.例2clf;h=[3 2 1 -2 1 0 -4 0 3];%冲激x=[1 -2 3 -4 3 2 1 ]; %输入序列y=conv(h,x);n=0:14;stem(n,y);xlabel(‘时间序号n’);ylabel(‘振幅’);title(‘用卷积得到的输出’);grid;三、实验内容与步调y(n)-0.4y(n-1)+0.75y(n-2)=2.2403x(n)+2.4908x(n-1)+2.2403x(n-2)用MATLAB 程序仿真该系统,输入三个不合的输入序列: )1.02cos()(1n n x ⋅=π,)4.02cos()(2n n x ⋅=π,)(3)(221n x n x x -= 盘算并并显示相应的输出)(1n y ,)(2n y 和)(n y .2.用MATLAB 程序仿真步调1给出的系统,对两个不合的输入序列x(n)和x(n-10),盘算并显示相应的输出序列y3(n)和y4(n).3.用MATLAB 程序仿真盘算下列两个有限长序列的卷积和并显示图形.四、实验仪器设备盘算机,MATLAB 软件五、实验要求给出理论盘算成果和程序盘算成果并讨论.六、实验成果实验1:clf;n=0:40;a=2;b=-3;x1= cos(2*pi*0.1*n);x2=cos(2*pi*0.4*n);x=a*x1+b*x2;den=[1, -0.4,0.75];num =[2.2403 2.4908 2.2403];%分子系数ic=[0 0]; %设置零初始条件y1=filter(num,den,x1,ic); %盘算输入为x1(n)时的输出y1(n)y2=filter(num,den,x2,ic); %盘算输入为x2(n)时的输出y2(n)yn=filter(num,den,x,ic); %盘算输入为x (n)时的输出y(n)%画出输出信号subplot(2,2,1)stem(n,y1);ylabel('振幅');title('y1输出');subplot(2,2,2)stem(n,y2);ylabel('振幅');title('y2输出');subplot(2,2,3)stem(n,yn);ylabel('振幅');title('yn输出');实验2:clf;n=0:40;n1=0:50;a=2;b=-3;x1= cos(2*pi*0.1*n);x2=cos(2*pi*0.4*n);x3=a*x1+b*x2;x4=[zeros(1,10), x3];den=[1, -0.4,0.75];num=[2.2403 2.4908 2.2403];ic=[0 0]; %设置零初始条件y3=filter(num,den,x3,ic);y4=filter(num,den,x4,ic);%盘算输入为x (n)时的输出y(n) %画出输出信号subplot(2,1,1)stem(n,y3);ylabel('振幅');title('yn输出');subplot(2,1,2)stem(n1,y4);ylabel('振幅');title('y1输出');实验3:clf;x=[1 3 2];%冲激u=[1 1 1]; %输入序列y=conv(u,x);n=0:4;stem(n,y);xlabel('时间序号n');ylabel('振幅');title('用卷积得到的输出');grid;实验二(1)离散时间信号的DTFT一、实验目标1.运用MATLAB懂得Z变换及其绘制H(z)的零顶点图.2.运用MATLAB盘算逆Z变换.二、实验原理(一)、MATLAB在ZT中的应用.线性时不变离散时间系统的冲激响应h(n)的z变换是其系统函数H(z),在MATLAB中可以应用性质求解Z变换,例如可以应用线性卷积求的Z变换.若H(z)的收敛域包含单位圆,即系统为稳定系统,即系统在单位圆上ωj ez=处盘算的是系统的频率响应.(二)、逆Z变换Z变换对于剖析和暗示离散线性时不变系统具有重要作用.但是在MATLAB中不克不及直接盘算Z变换,但是对于一些序列可以进行逆Z变换.已知序列的Z变换及其收敛域,求序列称为逆Z变换.序列的Z变换及共逆Z变换暗示如下:通常,直接盘算逆Z变换的办法有三种:围线积分法、长除法和部分分式展开法.在实际中,直接盘算围线积分比较艰苦,往往不直接盘算围线积分.由于序列的Z 变换常为有理函数,因此采取部分分式展开法比较切合实际,它是将留数定律和经常使用序列的Z 变换相联合的一种办法.设x(n)的Z 变换X(z)是有理函数,分母多项式是N 阶,分子多项式是M 阶,将X(z)展成一些简略的经常使用的部分分式之和,通过经常使用序列的Z 变换求得各部分的逆变换,再相加即得到原序列x(n).在MATLAB 中提供了函数residuez 来实现上述进程,挪用格局如下:[R ,P ,K]=residuez (B ,A )其中B 、A 分离是有理函数分子多项式的系数和分母多项式的系数,输出R 是留数列向量,P 是顶点列向量.如果分子多项式的阶数大于分母多项式的阶数,则K 返回为常数项的系数.三、实验内容与步调选做一个实验:1、.运行下面程序并显示它,验证离散时间傅立叶变换DTFT 的时移性.已知两个线性时不变的因果系统,系统函数分离为 N z z H --=1)(1,N N N za z z H ----=11)(2 分离令N=8,a=0.8,盘算并图示这两个系统的零、顶点图及幅频特性.程序:2、运行下面程序并显示它,验证离散时间傅立叶变换DTFT 的频移性.四、实验仪器设备盘算机,MATLAB软件五、实验注意事项课前预先阅读并懂得实验程序;六、实验成果clearnum1=[1 0 0 0 0 0 0 0 -1];%分子系数高阶到低阶den1=[1 0 0 0 0 0 0 0 0];subplot(2,2,1)zplane(num1, den1)grid;title('H1零顶点散布图') ;[H,w]=freqz(num1,den1,200,'whole'); %中B和A分离为离散系统的系统函数分子、分母多项式的系数向量,HF=abs(H); %返回量H则包含了离散系统频响在 0~pi规模内N个频率等分点的值(其中N为正整数)subplot(2,2,2); %w则包含了规模内N个频率等分点.plot(w,HF)title('H1幅频响应特性曲线');a=0.8;A=a^8;num2=[1 0 0 0 0 0 0 0 -1];%分子系数高阶到低阶den2=[1 0 0 0 0 0 0 0 A];subplot(2,2,3)zplane(num2, den2);grid;title('H2零顶点散布图') ;[H,w]=freqz(num2,den2,200,'whole'); %中B和A分离为离散系统的系统函数分子、分母多项式的系数向量,HF=abs(H); %返回量H则包含了离散系统频响在 0~pi规模内N个频率等分点的值(其中N为正整数)subplot(2,2,4); %w则包含了规模内N个频率等分点.plot(w,HF)title('H2幅频响应特性曲线');实验二(2)离散傅立叶变换DFT一、实验目标1.运用MATLAB盘算有限长序列的DFT和IDFT.2.运用MATLAB验证离散傅立叶变换的性质.3 .运用MATLAB盘算有限长序列的圆周卷积.二、实验原理(一)、离散傅立叶变换DFT 的界说一个有限长度的序列x(n)(0≤n<N-1), 它的 DFT X(k) 可以通过在ω轴(πω20<≤)上对)(ωj e X 平均采样得到 可以看到)(k X 也是频域上的有限长序列,长度为N.序列)(k X 称为序列x(n)的N 点DFT.N 称为DFT 变换区间长度. 通常暗示可将界说式暗示为X(k)的离散傅里叶逆变换(IDFT)为(二)、DFT 的性质1.圆周移位界说序列x(n)的m 单位的圆周移位y(n)为:(N m n x ))((+即对x(n)以N 为周期进行周期延拓的序列)(~n x 的m 点移位,)(n R N 暗示对此延拓移位后再取主值序列)1. 圆周卷积设 )()(11k X n x NDFT −−→←10-≤≤N k 则 )(1n x )()()(212k X k X n x NDFT −−→←10-≤≤N k 这里 )(1n x )(2n x 暗示)(1n x 与 )(2n x 的N 点循环卷积.2. 共轭对称性实际应用中,应用上述对称性质可以削减DFT 的运算量,提高运算效率.三、实验内容与步调:(2,3选做一个)1.结构离散傅立叶正、反变换函数的MATLAB 程序,其中dft(xn,N)为离散傅立叶正变换,idft(xn,N)为离散傅立叶反变换.2、如果)4/sin()8/sin()(ππn n n x +=是一个N=16的有限长序列,应用离散傅立叶变换函数求其16点DFT.3、如果()cos(0.82)2sin(0.43)x n n n ππ=+是一个0100n ≤≤的有限长序列,绘制()x n 及其离散傅立叶变换X (K )的幅度、相位图.四、实验仪器设备盘算机,MATLAB 软件五、实验注意事项课前预先阅读并懂得实验程序;六、实验成果Dft:程序function xk=dft(xn,N) %dftn=[0:1:N-1];k=n;WN=exp(-i*2*pi/N); %旋转因子nk=n'*k;WNnk=WN.^nk;xk=xn*WNnk;endidft :程序function xn=idft(xk,N) %idftn=[0:1:N-1];k=n;WN=exp(-j*2*pi/N);nk=n'*k; %矩阵的转制*KWNnk=WN.^(-nk);xn=xk*WNnk/N;end实验程序:选做2k=16; %序列长N=16;%dft点数n1=[0:1:15];xn1=sin(pi/8*n1/k)+sin(pi/4*n1/k); %抽样信号xk1=dft(xn1,N);subplot(1,2,1);stem(n1,xn1);xlabel('t/T');ylabel('x(n)');subplot(1,2,2);stem(n1,xk1);grid;xlabel('k');ylabel('x(k)');实验二(3)快速傅立叶变换FFT 及其应用一、实验目标1.应用MATLAB 的快速傅立叶变换来盘算信号的离散傅立叶变换.2.应用MATLAB 程序,懂得进一步离散傅立叶变换的物理意义.3.应用MATLAB 程序,懂得快速卷积算法.二、实验原理在MATLAB 中,使用函数fft 可以很容易地盘算有限长序列x(n)的离散傅立叶变换X[k].此函数有两种形式,fft(x)盘算序列x(n) 的离散傅立叶变换X(k),这里X(k)的长度与x(n)的长度相等.fft(x ,L)盘算序列x(n) 的L 点离散傅立叶变换,其中L ≥N.若L>N ,在盘算离散傅立叶变换之前,对x(n)尾部的L-N 个值进行补零.同样,离散傅立叶变换序列X(k)的离散傅立叶逆变换x(n)用函数ifft 盘算,它也有两种形式.(一)、根本序列的离散傅立叶变换盘算N 点离散傅立叶变换的一种物理说明就是,X[k]是x(n)以N 为周期的周期延拓序列的离散傅立叶级数系数~)(k X 的主值区间序列,即)()()(~k R k X k X N =.例如序列)()8cos(n R n N π,当N=16时,)()8cos(n R n N π正好是)8cos(n π的一个周期,所以)()8cos(n R n N π的周期延拓序列就是这种单一频率的正弦序列.而当N=8时,)()8cos(n R n N π正好是)8cos(n π的半个周期,)()8cos(n R n N π的周期延拓就不再是单一频率的正弦序列,而是含有丰硕的谐波成分,其离散傅立叶级数的系数与N=16时的不同很大,因此对信号进行谱剖析时,一定要截取整个周期,不然得到错误的频谱.(二)、验证N 点DFT 的物理意义假如x(n)非周期、有限长,则傅立叶变换存在,那么对)(ωj e X 在N 个等距离频率k ω=2πk/N, k=0,1,…,,N-1取样,则可得X(k).序列x(n)的N 点DFT 的物理意义是对X(ω)在[0,2π]上进行N 点的等距离采样.(三)、应用FFT 盘算序列的线性卷积直接盘算线性卷积盘算量大,并且盘算机无法断定y(n)的长度,需要盘算若干的y(n)值,若输入为无限长,就更无法盘算,其运算量随长度成级数增长.由于可以应用FFT 对DFT 进行有效的盘算,我们希望可以或许应用DFT 来盘算线性卷积.设 x(n) 和 h(n) 是长度分离为M 和N 的有限长序列, 令 L=M+N-1,界说两个长度L 的有限长序列:⎩⎨⎧-≤≤-≤≤=1,010),()('L n M M n n x n x () ⎩⎨⎧-≤≤-≤≤=1,010),()('L n N N n n h n h () 通过对x(n) 和 h(n)填补零样本值得到上面两个序列.那么:)(')()()()(n x n y n h n x n y c l ==*=)('n h ()上面的进程如下图所示:盘算线性卷积也可以直接挪用函数con 来盘算,因为MATLAB 中的计时比较粗糙,所以只有M 和N 较大的时候,才干比较两种办法的执行时间快慢.三、实验内容与步调(选做一个)1.对复正弦序列)()(8n R e n x N n j π=,应用MATLAB 程序求当N=16和N=8时的离散傅立叶变换,并显示其图形.2.已知)()(4n R n x =,ωωωj j e e X ----=11)(4, 绘制相应的幅频和相频曲线,并盘算N=8和N=16时的DFT.四、实验仪器设备盘算机,MATLAB 软件五、实验注意事项课前预先阅读并懂得实验程序;六、实验成果k1=16; %序列长N1=16;%dft 点数n1=[0:1:15];xn1=exp(j*pi/8*n1/k1); %抽样信号xk1=dft(xn1,N1);subplot(2,2,1);stem(n1,xn1);xlabel('t/T');ylabel('x(n)');subplot(2,2,2);stem(n1,xk1);grid;xlabel('k');ylabel('x(k)');k2=8; %序列长N2=8;%dft点数n2=[0:1:7];xn2=exp(j*pi/8*n2/k2); %抽样信号xk2=dft(xn2,N2);subplot(2,2,3);stem(n2,xn2);xlabel('t/T');ylabel('x(n)');subplot(2,2,4);stem(n2,xk2);grid;xlabel('k');ylabel('x(k)');实验三基于MATLAB 的IIR 数字滤波器设计一、实验目标1.进一步熟悉IIR 数字滤波器的理论知识.2.熟悉与IIR 数字滤波器设计有关的MATLAB 函数.3 .学会通过MATLAB ,应用脉冲响应不变法和双线性变换法设计IIR 数字滤波器,加深对数字滤波器的经常使用指标和设计进程的懂得.二、实验原理(一)、低通滤波器的经常使用指标:通带边沿频率:p ω,阻带边沿频率:s ω ,通带起伏:p δ,通带峰值起伏: ])[1(log 2010dB p p δα--=,阻带起伏:s δ最小阻带衰减:])[(log 2010dB s S δα-=.(二)、IIR 数字滤波器设计今朝,设计IIR 数字滤波器的通用办法是先设计相应的低通滤波器,然后再通过双线性变换法和频率变换得到所需要的数字滤波器.模仿滤波器从功效上分有低通、高通、带通及带阻四种,从类型上分有巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器以及贝塞尔滤波器等.1、应用模仿滤波器设计IIR 数字低通滤波器的步调.(1)确定命字低通滤波器的技巧指标:通带截止频率ωp 、通带衰减αp 、阻带截止频率ωs 、阻带衰减αs.(2)将数字低通滤波器的技巧指标转换成模仿低通滤波器的技巧指标.脉冲响应不变法:双线性变换法: (3)依照模仿低通滤波器的技巧指标设计模仿低通滤波器.(4)将模仿滤波器Ha(s),从s 平面转换到z 平面,得到数字低通滤波器系统函数H(z).2、下面给出与IIR 数字滤波器设计有关的MATLAB 文件.用来确定命字低通或模仿低通滤波器的阶次,其挪用格局分离是a. [N,Wn]=buttord(Wp,Ws,Rp,Rs)b. [N,Wn]=buttord(Wp,Ws,Rp,Rs,’s ’)格局a 对应数字滤波器,式中Wp,Ws 分离是通带和阻带的截止频率,实际上它们是归一化频率,其值在0-1之间,1对应π(即对π的归一化).Rp,Rs 分离是通带和阻带衰减,单位为dB.N 是求出的相应低通滤波器的阶次,Wn 是求出的3dB 频率.格局b 对应模仿滤波器,式中各个变量的寄义和格局a 相同,但Wp,Ws 及Wn 是模仿角频率,单位为rad/s.用来设计模仿低通原型(归一化)滤波器Ha(p),其挪用的格局为[z , p, k]=buttap(N)21tan()2T T ωω=ΩΩ=N是欲设计的低通原型(归一化)滤波器的阶次,z, p和k分离是设计出Ha(p)的顶点、零点及增益.(3)lp2l将模仿低通原型(归一化)滤波器Ha(p)转换为实际的低通滤波器Ha(s).(去归一化),其挪用格局为:[B,A]=lp2lp(b,a,Wn)b,a分离是模仿低通原型滤波器Ha(p)的分子、分母多项式的系数向量,其中B,A是去归一化后Ha(s) 的分子、分母多项式的系数向量, Wn为截止频率.实现双线性变换,即由模仿滤波器Ha(s)得到数字滤波器H(z).其挪用格局是: [Bz,Az]=bilinear(B,A,Fs)B,A是去归一化后Ha(s) 的分子、分母多项式的系数向量,Bz,Az是H (z) 的分子、分母多项式的系数向量, Fs是抽样频率.由脉冲响应不变法将模仿滤波器Ha(s)转换为数字滤波器H(z).其挪用格局是: [Bz,Az]= impinvar(B,A,Fs)B,A是去归一化后Ha(s) 的分子、分母多项式的系数向量,Bz,Az是H (z) 的分子、分母多项式的系数向量, Fs是抽样频率.用来直接设计巴特沃斯数字滤波器(双线性变换法),实际上它把buttord.m,buttap.m,lp2lp.m及bilinear.m等文件都包含进去,从而使设计进程更简捷,其挪用格局为: a.[B,A]=butter(N, Wn)b. [B,A]=butter(N,Wn,‘s’)格局a是设计低通数字滤波器,格局b是设计低通模仿滤波器.B,A是H (z) 的分子、分母多项式的系数向量,Wn 是截止频率.三、实验内容与步调以下选做一个1. 设计MATLAB程序,采取脉冲响应不变法设计一个巴特沃斯低通数字滤波器,其通带上限临界频率为400Hz,阻带临界频率为600Hz,抽样频率是1000Hz,在通带内的最大衰减为0.3dB, 阻带内的最小衰减为60dB,并绘出幅频特性曲线.2. 设计MATLAB程序,ππ,π]内衰减不小于40dB,并绘出幅频特性曲线.四、实验仪器设备盘算机,MATLAB软件五、实验要求依据要求自力编程设计,并依据程序运行成果写出滤波器的系统函数六、实验成果选做1:fp=400; %通带上限临界频率fs=600; %阻带临界频率Rp=0.3; %通带允许的最大衰减Rs=60; %阻带允许的最小衰减Fs=1000; %采样频率Wp=2*pi*fp; %通带截止平率Ws=2*pi*fs; %阻带截止平率%Nn=256;n=(0:100-1);%采样点数[N,Wn]=buttord(Wp,Ws,Rp,Rs,'s'); %用于盘算阶数和截止平率[b,a]=butter(N,Wn,'s'); %盘算分子向量b,分母向量aw=linspace(1,400,100)*2*pi; %起始值,终止值,元素个数H=freqs(b,a,w); % 在[0,2π]上进行采样,采样频率点由矢量w 指定figure(1);plot(w/(2*pi),20*log10(abs(H)));title('巴特沃斯模仿滤波器幅频特性');xlabel('频率/Hz');ylabel('幅度/db');%[bz,az]=impinvar(b,a,Fs); %caiyong冲击响应不变法转换为数字滤波器实验四基于MATLAB的FIR数字滤波器设计一、实验目标1.进一步熟悉FIR 数字滤波器的理论知识.2.熟悉与FIR 数字滤波器设计有关的MATLAB 函数.3.学会通过MATLAB ,应用窗函数法设计FIR 数字滤波器.二、实验原理设计FIR 滤波器实际上是要在知足线性相位的条件下,实现幅度响应的迫近.而一个FIR 滤波器若是相符线性相位,则必须知足一定的条件,即:一个FIR 滤波器若是线性相位的,则其单位冲激响应必定知足)1()(n N h n h --±= n=0,1,…,N-1h(n)是关于(N-1)/2对称(奇对称或偶对称)即,(1) h(n)是偶对称序列 (1) h(n) 是奇对称(否决称)序列 设滤波器要求的幻想频率响应为Hd(ejw) , 那么FIR 滤波器的设计问题在于——寻找一系统函数∑-=-=10)()(N n n z n h z H ,使其频率响应jwe z jw z H e H ==|)()(迫近Hd(ejw).若要求FIR 滤波器具有线性相位特性,则h(n)必须知足上节所述的对称条件.迫近的办法有三种:窗口设计法(时域迫近);频率采样法Frequency-sampling (频域迫近);最优化设计Optimum Equiripple (等波纹迫近).()()⎪⎩⎪⎨⎧-≤≤--=-=10,121N n n N h n h N α窗函数法又称傅立叶级数法,是设计FIR数字滤波器的最简略的办法.FIR数字滤波器的设计问题就是要使所设计的FIR数字滤波器的频率响应H(w)去迫近所要求的幻想滤波器的响应Hd(w).从单位采样响应序列来,就是使所设计滤波器的h(n)迫近幻想单位采样响应序列hd(n),这可以用hd(n)和一个窗函数w(n)的乘积来得到.(一)、设计原理.窗函数设计FIR数字滤波器的步调如下:(1)给定要求的频率响应函数Hd(w);(2)盘算hd(n);(3)依据过渡带宽及阻带最小衰减的要求,选定窗的性状以及窗的大小N;(4)依据所选择的适合的窗函数w(n)来修正hd(n),得到所设计的FIR数字滤波器的单位采样响应序列h (n)= hd(n) w(n),n=0,1,…,N-1(二)、函数的应用MATLAB中用fir1函数来设计具有尺度频率响应的FIR滤波器.其挪用方法: b=fir1(n,wn)——设计n阶低通FIR滤波器,返回的向量b为滤波器的系数(即h(n)的值),它的阶数为n+1;截止频率为wn(对π归一化后的值).b=fir1(n,wn,’hign’)——设计n阶高通FIR滤波器b=fir1(n,wn,’low’)——设计n阶低通FIR滤波器b=fir1(n,wn,’bandpass’)——设计n阶带通FIR滤波器b=fir1(n,wn,’stop’)——设计n阶带阻FIR滤波器b=fir1(n,wn,win)——输入参数win用来指定使用的窗函数的类型,其长度为n+1,缺省情况下,默认为汉明窗.三、实验内容与步调以下选做一个1.用矩形窗、三角窗、汉宁窗、汉明窗分离设计低通数字滤波器.信号采样频率为1000Hz,数字滤波器的截止频率为100Hz,滤波器的阶数为80.2.编写MATLAB程序,应用窗函数法设计线性相位FIR低通数字滤波器,实现对模仿信号采样落后行数字低通滤波,对模仿信号的滤波要求如下:通带截止频率:fp=2kHz;阻带截止频率:fs=3kHz; 阻带最小衰减:αs=40dB;采样频率:Fs=10kHz选择适合的窗函数及其长度,求出h(n),并画出幅频特性衰减曲线.3.编写MATLAB程序,应用窗函数法设计一线性相位FIR 数字低通滤波器,通带鸿沟频率频率0.6π,阻带鸿沟频率0.7π0, 阻带衰减αs>50dB,通带波纹不大于1dB.四、实验仪器设备盘算机,MATLAB软件五、实验注意事项依据要求自力编程设计.六、实验成果选做3clear;ππ0wd=ws-wp;%主瓣宽度N=ceil(8*pi/wd);wn=(0.6+0.7)*pi/2;b=fir1(N,wn/pi,hanning(N+1)); freqz(b,1,512);。
基于MATLAB图像DFT的分析与实现
摘要离散傅立叶变换(Discrete Fourier Transform)简称DFT,在数字信号处理和数字图像处理中应用十分广泛,它建立了离散时域和离散之间的联系。
在数字图像处理中,二维离散傅立叶被广泛的应用于图像增强、复原、编码和分类中。
本课程设计是在MATLAB软件环境下读入图像,实现图像的离散傅立叶变换(DFT),并对系数进行分析,并对图像变换后的系数的分布特点进行分析和变换后的系数进行重新排列,将低频系数移到中心位置。
关键词:DFT;MATLAB;系数分析目录1 课题描述 (1)2 设计原理 (1)2.1 离散傅立叶变换原理 (1)2.2 二维离散傅立叶变换的性质 (2)3 设计过程 (5)3.1 软件介绍 (5)3.2 设计内容 (6)3.3 设计程序 (6)3.4 程序运行结果及分析 (6)总结 (9)参考文献 (10)1 课题描述离散傅立叶变换(DFT )在数字信号处理和数字图像处理中应用十分广泛。
它建立了离散时域和离散之间的联系。
如果直接应用卷积和相关运算在时域中处理,计算量将随着取样点数的平方而增加,这使计算机的计算量大,很费时,很难达到实时处理的要求。
因此,一般可采用 DFT 方法,将输入的数字信号首先进行 DFT 变换,在频域中进行各种有效的处理,然后进行 DFT 反变换,恢复为时域信号。
这样用计算机对变换后的信号进行频域处理。
比在时域中直接处理更加方便,计算量也大大减少,提高了处理速度。
因此,DFT 在数字图像处理领域中有很大的实用价值。
离散傅立叶变换还有一个明显的优点就是具有快速算法,即快速傅立叶算法(Fast Fourier Transform),它可以大大减少计算次数,使计算量减少到只是相当于直接使用离散傅立叶变换所用的一小部分。
并且,二维离散傅立叶变换很容易从一维的概念推广得到。
在数字图像处理中,二维离散傅立叶被广泛的应用于图像增强、复原、编码和分类中。
2设计原理2.1 离散傅立叶变换原理傅立叶分析: 建立以时间为自变量的‘信号’和以频率为自变量的‘频谱函数’之间的关系。
离散信号的傅里叶变换(MATLAB实验)
离散信号的变换(MATLAB 实验)一、实验目的掌握用Z 变换判断离散系统的稳定与否的方法,掌握离散傅立叶变换及其基本性质和特点,了解快速傅立叶变换。
二、实验内容1、已经系统函数为5147.13418.217.098.22505)(2342-++--+=z z z z z z Z H (1) 画出零极点分布图,判断系统是否稳定;(2)检查系统是否稳定;(3) 如果系统稳定,求出系统对于u(n)的稳态输出和稳定时间b=[0,0,1,5,-50];a=[2,-2.98,0.17,2.3418,-1.5147];subplot(2,1,1);zplane(b,a);title('零极点分布图');z=roots(a);magz=abs(z)magz =0.90000.92200.92200.9900n=[0:1000];x=stepseq(0,0,1000);s=filter(b,a,x);subplot(2,1,2);stem(n,s);title('稳态输出');(1)因为极点都在单位园内,所以系统是稳定的。
(2)因为根的幅值(magz )都小于1,所以这个系统是稳定的。
(3)稳定时间为570。
2、综合运用上述命令,完成下列任务。
(1) 已知)(n x 是一个6点序列: ⎩⎨⎧≤≤=其它,050,1)(n n x计算该序列的离散时间傅立叶变换,并绘出它们的幅度和相位。
要求:离散时间傅立叶变换在[-2π,2π]之间的两个周期内取401个等分频率上进行数值求值。
n=0:5;x=ones(1,6);k=-200:200;w=(pi/100)*k;X=x*(exp(-j*pi/100)).^(n'*k);magX=abs(X);angX=angle(X);subplot(2,1,1);plot(w/pi,magX);grid;title('幅度');subplot(2,1,2);plot(w/pi,angX);grid;title('相位');(2) 已知下列序列:a. ,1000),52.0cos()48.0cos()(≤≤+=n n n n x ππ;b .)4sin()(πn n x =是一个N =32的有限序列;试绘制)(n x 及它的离散傅立叶变换)(k X 的图像。
基于Matlab的数字图像离散傅里叶变换及应用
图像平滑 的过程 ,但此时 图像 的边缘清晰度 可能会降低 ,图像 变模 糊 的 实 质 是 高 频 分量 被 衰 减 。
[ 1 】 赵 小 川 ,何 灏 ,缪 远 诚 . MA T L A B数 字 图像 处 理 实践 [ M】 . 北 京 :机 械 工 业 出版 社 ,2 0 1 3 :4 2 -7 5 . 【 2 2徐献灵 ] ,袜弈水 . Ma t l a b在图像处理中 的应用 [ J 】 . 现 代计 算机 ,2 0 0 8 ,2 8 3 :6 6 - 6 9 . 【 3 1 郝强 ,赵 何 明,张毅 . 基 于 MA T L A B的数 字图像处 理技 术 与应 用 [ J 】 . 河 北 农 机 ,2 0 1 4 , ( 1 I ) :4 4 - 4 6 . [ 4 】 王斌 . MA T L A B实现 数字图像 增强处理 [ J 】 . 佳木斯大 学学 报 ( 自然 科 学 版 ) ,2 0 0 5 ,2 3( 1 ) :3 1 - 3 4 . 【 5 】 于 殿 泓 .图像 检 测 与处 理 技 术 【 M】 . 西安 : 西 安 电子 科 技 大 学 出版 社 ,2 0 0 6 :1 1 0 -1 2 3 .
增 强 技 术 有 两 类 方 法 :空 间 域 法 和 频 率 域 法 。 空 间 域 法 是在 空 间 域
少模糊 ,会使模糊的边缘部分得到增强。这就是 用 DF T进 行图像平
中对数 字图像的像 素灰 度值直接进行 运算处理 ;而频 率域 法是在数 滑和边缘提取的依据 。 字 图像 先进行某种变换 域 ,再对变换 值进行运算 。本文 中采用频 率 域法 ,先对 图像进 行 DF T,再对 图像频谱进行滤波 ,然后将 滤波后
简单FFT实验报告Matlab
MATLAB EXAM.4 用语言编程实现DFT和FFT实验报告专业班级:姓名学号指导教师:完成时间:一、实验题目1. 用语言编程实现DFT和FFT二、实验目的1.不使用MATLAB现有的FFT函数,自己编写所有具体算法2.给出流程图和理论计算结果。
3.设计实验,给出DFT和FFT算法差异的证明,如复杂度等。
(精度、不同长度的序列等)4.分析数据,得出结论。
三、实验内容1.不使用MATLAB现有的FFT函数,自己编写所有具体算法2.给出流程图和理论计算结果。
3.设计实验,给出DFT和FFT算法差异的证明,如复杂度等。
(精度、不同长度的序列等)4.分析数据,得出结论。
四、实验步骤(一)文件与文件夹管理1.自行编写8点FFT流程算法下图为8点FFT的蝶形运算图,我们采用基2蝶形运算单元来实现8点FFT的变换。
图1 8点FFT蝶形运算图2.给出流程图和理论计算结果()x n 2⎛+ ⎝x n N ()(n )2=++N A x n x ()[(n )]2-+⨯n N N x n x W图2 基2蝶形运算单元图3 8点FFT 架构模型利用Matlab 对已知输入数据进行 DFT 运算,得出其理论值假设输入数据为:实现DFT 算法:得出其理论值3.设计实验,给出DFT 和FFT 算法差异的证明,如复杂度等。
(精度、不同长度的序列等)通过在matlab中对DFT 和FFT的建模,计算相同点数的变换所需要的加法次数和乘法次数。
以此来比较两种不同算法的差异性。
首先DFT 算法中,由于一次循环需要一次复数乘法和一次复数加法(第一次循环不需要加法,所以需要加法次数为计算结果减1)同理在FFT的蝶形运算中,每一次蝶形运算所消耗的复数乘法和复数加法都可以通过参数来计算出来。
每次运行基2蝶形模块一次,都需要消耗两次复数加法,一次复数乘法。
通过运行matlab 程序我们可以得出其中的运算复杂度的数值可以看出一个8点的DFT运算需要64次复数乘法,63次复数加法,符合理论值。
实验四 利用离散傅立叶变换(DFT)分析信号的频谱
实验四 利用离散傅立叶变换(DFT )分析信号的频谱一、实验目的1、通过这一实验,能够熟练掌握快速离散傅里叶变换(FFT )的原理及其用FFT 进行频谱分析的基本方法。
2、在通过计算机上用软件实现FFT 及信号的频谱分析。
3、通过实验对离散傅里叶变换的主要性质及FFT 在数字信号处理中的重要作用有进一步的了解。
二、实验原理1、离散傅里叶变换(DFT )及其主要性质DFT 表示离散信号的离散频谱,DFT 的主要性质中有奇偶对称特性,虚实特性等。
通过实验可以加深理解。
例如:实序列的DFT 具有偶对称的实部和奇对称的虚部,这可以证明如下: 由定义∑-==10)()(N n kn NW n x k X ∑∑-=-=-=1010)2sin()()2cos()(N n N n kn N n x j kn N n x ππ ∑-=-=-10)()()(N n n k N N W n x k N X∑-=-=10)(N n kn N Nn W W n x ∑-=-=10)(N n kn N W n x ∑∑-=-=+=1010)2sin()()2cos()(N n N n kn N n x j kn N n x ππ )(*)(k N X k X -=∴实序列DFT 的这个特性,在本实验中可以通过实指数序列及三角序列看出来。
对于单一频率的三角序列来说它的DFT 谱线也是单一的,这个物理意义我们可以从实验中得到验证,在理论上可以推导如下: 设:)()2sin()(n R n N n x N π=,其DFT 为: ∑-=-=102)()(N n kn N j en x k X π kn Nj N n e n N ππ210)2sin(--=∑= kn N j N n n N j n N j e e e j πππ21022)(21--=-∑-= ∑-=+----=10)1(2)1(2)(21N n k n N j k n N j e e j ππ 从而∑-=-=-=10220)(21)0(N n n N j n N j e e j X ππ∑-=--==-=10422)1(21)1(N n n N j N j j N e j X π 0)2(=X0)2(=-N X22)(21)1(102)2(2N j j N e e j N X N n n j n N N j =-=-=-∑-=--ππ以上这串式中)0(X 反映了)(n x 的直流分量,)1(x 是)(n x 的一次谐波,又根据虚实特性)1()1(*X N X =-,而其它分量均为零。
matlab画离散傅里叶变换dft公式
离散傅里叶变换(Discrete Fourier Transform,DFT)是一种常用的信号处理工具,用于分析信号的频谱和频率成分。
在MATLAB中,可以使用内置函数来快速实现离散傅里叶变换,并且可以通过公式来理解其原理和实现过程。
一、离散傅里叶变换的定义离散傅里叶变换是将离散的时间序列信号转化为离散的频谱序列,其定义如下:给定长度为N的离散信号x(n),其离散傅里叶变换X(k)的计算公式为:X(k) = Σ x(n) * exp(-j*2πnk/N),n = 0, 1, ..., N-1其中,k表示频率序列的索引,取值范围为0到N-1。
exp(-j*2πnk/N)是复数指数形式的旋转因子,n表示时间序列的索引。
二、MATLAB中的离散傅里叶变换函数在MATLAB中,可以使用fft函数来快速计算离散傅里叶变换。
其函数原型为:Y = fft(X)其中,X为输入的离散信号,Y为离散傅里叶变换的结果。
如果需要计算反变换,则可以使用ifft函数。
三、MATLAB代码实现离散傅里叶变换下面是使用MATLAB实现离散傅里叶变换的示例代码:```matlab生成长度为N的离散信号N = 100;x = rand(1, N);计算离散傅里叶变换X = fft(x);绘制频谱图f = (0:N-1) * (1/N); 频率序列plot(f, abs(X));xlabel('频率');ylabel('幅度');title('离散傅里叶变换频谱图');```以上代码首先生成了长度为N的随机离散信号x,然后使用fft函数计算了其离散傅里叶变换结果X,并绘制了频谱图。
四、离散傅里叶变换的性质和应用离散傅里叶变换具有线性、周期性、卷积和相关性等性质,可以广泛应用于信号处理、通信、图像处理、音频处理等领域。
通过分析离散信号的频谱和频率成分,可以实现信号的滤波、频谱分析、频率提取等功能。
信号处理实验四离散傅里叶变换
信号处理实验四离散傅里叶变换哈尔滨工程大学实验报告实验名称:实验四:离散傅里叶变换班级:电子信息工程4班学号:姓名:实验时间: 2016年10月19日成绩:________________________________指导教师:栾晓明实验室名称: 数字信号处理实验室哈尔滨工程大学实验室与资产管理处 制实验四 离散傅里叶变换一、 实验原理1. 由DFT 定义式:10()[()]()NN knn X k DFT x n x n W -===∑ k=0,1 , … , N -1,将其写成矩阵方程表示为NX W x =利用MATLAB 的矩阵运算功能,可编写出计算DFT 的函数文件。
function [Xk] = dft(xn,N) %计算离散傅里叶变换%Xk = 在0<=k<=N-1间的DFT 系数数组 %xn = N 点有限长序列 % N = DFT 的长度 n = [0:1:N-1]; %n 的行向量 k = [0:1:N-1]; %k 的行向量WN = exp(-j*2*pi/N);%Wn 因子 nk = n'*k;%产生一个含bk 值的N 乘N 维矩阵 WNnk = WN.^nk; %DFT 矩阵 Xk = xn*WNnk; %DFT 系数的行向量由IDFT 定义式:11()[()]()N nkk x n IDFT X k X k W N--===∑ ,n= 0, 1, 2, … ,N -1,利用MATLAB 的矩阵运算功能,可编写出计算傅里叶反变换的函数文件。
function [xn] = idft(Xk,N) %计算离散傅里叶反变换 %----------------- %xn = 在0<=n<=N-1 %Xk = N 点有限长序列 % N = IDFT 的长度 k = [0:1:N-1]; %k 的行向量 n = [0:1:N-1]; %n 的行向量WN = exp(-j*2*pi/N); %Wn 因子 nk = n'*k;%产生一个含bk 值的N 乘N 维矩阵 WNnk = WN.^nk; %DFT 矩阵 xn = Xk*WNnk;%傅里叶反变换计算序列值 DFT 的快速算法FFT 利用了W nkN的三个固有特性:(1)对称性,(W )W nk nkN N*-=,(2)周期性,()()W W W nk n N k n k N N N N++==,(3)可约性,W nk nmkN mNW =和//W nk nk m N N mW =。
数字信号处理实验 matlab版 离散傅里叶变换(DFT)
>> xn1=xn(mod(n,N)+1); %即xn1=[xn,xn,xn,xn]
>> Xk=xn1*exp(-j*2*pi/N).^(n'*k);%离散傅里叶变换
>> subplot(2,2,1),stem(xn);%显示序列主值
>> title('原主值信号x(n)');
>>N=length(xn);
>>n=0:N-1;
>> w=linspace(-2*pi,2*pi,500);%将[-2p,2p]频率区间分割为500份
>> X=xn*exp(-j*n'*w);%离散时间傅里叶变换
>>subplot(3,1,1),stem(n,xn,'k');
>>ylabel('x(n)');
解MATLAB程序如下:
>> xn=[7,6,5,4,3,2];
>> N=length(xn);
>> n=0:N-1;
>> w=linspace(-2*pi,2*pi,500);%将[-2p,2p]频率区间分割为500份
>> X=xn*exp(-j*n'*w);%离散时间傅里叶变换
>> subplot(3,1,1),stem(n,xn,'k');
(12-2)
从离散傅里叶变换定义式可以看出,有限长序列在时域上是离散的,在频域上也是离散的。式中, 即仅在单位圆上N个等间距的点上取值,这为使用计算机进行处理带来了方便。
MATLAB离散傅里叶变换及应用资料
subplot(2,2,1),stem(n,xn);
title('x(n)');
subplot(2,2,2),stem(n,abs(x));
title('IDFT|X(k)|');
subplot(2,2,3),stem(k,abs(Xk));
title('|X(k)|');
subplot(2,2,4),stem(k,angle(Xk));
已知周期序列的主值 x(n) =[ 0, 1,2,3, 4, 5,6,7],
求 x(n) 周期重复次数为 4 次时的 DFS。要求: (1) 画出原主值和信号周期序列信号。 (2) 画出序列傅里叶变换对应的 X~ (k) 和 arg[X~(k)] 的图形。 程序源代码: xn=[0,1,2,3,4,5,6,7]; N=length(xn); n=0:4*N-1;k=0:4*N-1; xn1=xn(mod(n,N)+1); Xk=xn1*exp(-j*2*pi/N).^(n'*k); subplot(2,2,1),stem(xn); title(' 原主值信号 x(n)'); subplot(2,2,2),stem(n,xn1); title(' 周期序列信号 '); subplot(2,2,3),stem(k,abs(Xk)); title('|X(k)|'); subplot(2,2,4),stem(k,angle(Xk)); title('arg|X(k)|'); 运行结果如下:
原 主 值 信 号 x(n) 8
周期序 列信号 8
6
6
4
4
2
2
matlab编程实现傅里叶变换
傅里叶变换是信号处理和图像处理中的重要数学工具,可以将一个信号或图像从时域转换到频域。
MATLAB作为一款强大的数学软件,可以方便地实现傅里叶变换并进行相应的分析和处理。
本文将介绍如何使用MATLAB编程实现傅里叶变换,并探讨其在信号处理和图像处理中的应用。
一、MATLAB中的傅里叶变换函数在MATLAB中,可以使用fft函数来进行一维离散傅里叶变换(DFT)的计算,使用fft2函数进行二维离散傅里叶变换(DFT)的计算。
这两个函数的基本语法如下:1. 一维离散傅里叶变换Y = fft(X)其中,X是输入的一维信号(向量),Y是输出的一维频谱(向量)。
2. 二维离散傅里叶变换Y = fft2(X)其中,X是输入的二维图像(矩阵),Y是输出的二维频谱(矩阵)。
除了fft和fft2函数外,MATLAB还提供了ifft和ifft2函数用于进行离散傅里叶逆变换。
通过这些函数,我们可以方便地实现傅里叶变换和逆变换的计算。
二、MATLAB中的傅里叶变换实例为了更好地理解MATLAB中的傅里叶变换实现,我们可以通过一个具体的实例来进行演示。
假设我们有一个包含两个正弦波的信号,我们首先可以使用MATLAB生成这个信号,并对其进行傅里叶变换。
生成信号fs = 1000; 采样频率为1000Hzt = 0:1/fs:1-1/fs; 时间范围为1秒f1 = 50; 第一个正弦波的频率为50Hzf2 = 120; 第二个正弦波的频率为120Hzx = 0.7*sin(2*pi*f1*t) + sin(2*pi*f2*t); 生成包含两个正弦波的信号进行傅里叶变换N = length(x); 信号的长度X = fft(x)/N; 进行离散傅里叶变换,并进行归一化处理f = (0:N-1)*(fs/N); 计算频率轴figure;subplot(2,1,1);plot(f,abs(X)); 绘制频谱幅度title('单边频谱');xlabel('频率/Hz');ylabel('幅度');subplot(2,1,2);plot(f,angle(X)); 绘制频谱相位title('频谱相位');xlabel('频率/Hz');ylabel('相位');通过上面的实例,我们可以看到,MATLAB可以很方便地实现最常见的傅里叶变换,并且提供了丰富的绘图功能来呈现变换结果。
离散傅里叶变换(dft)与快速傅里叶变换(fft)的matlab实现
离散傅里叶变换(DFT)和快速傅里叶变换(FFT)是信号处理领域中常用的数学工具,可以用于信号的频域分析、滤波、压缩等应用。
以下是MATLAB中实现DFT和FFT的示例代码:
1. 实现DFT
n = 100; 信号长度
x = linspace(0, 2*pi, n); 信号采样点
y = sin(2*pi/n*x); 信号
f = dft(y, 2^0); DFT
f_shifted = f(2:end); 频域结果向左平移2^0
plot(x, y, 'o', x, f_shifted, '-'); 绘制信号和频域结果
xlabel('Time');
ylabel('Amplitude');
2. 实现FFT
n = 100; 信号长度
x = linspace(0, 2*pi, n); 信号采样点
y = sin(2*pi/n*x); 信号
fft_result = fft(y, n); FFT
fft_result_shifted = fft_result(2:end); FFT结果向左平移1个周期
plot(x, y, 'o', x, fft_result_shifted, '-'); 绘制信号和频域结果
xlabel('Time');
ylabel('Amplitude');
在上述代码中,DFT和FFT的参数n分别表示信号长度和基函数长度。
注意,在MATLAB中,FFT默认使用基函数长度为信号长度的一半,因此需要通过调整参数n来实现FFT的基函数长度。
[整理]matlab离散信号的DFT及其快速算法fft以及ifft
实验四离散信号的DFT及其快速算法一、实验目的1.在学习DFT理论的基础上,通过本实验,加深对FFT的理解,体会二者之间的关系。
2.熟悉应用FFT实现两个序列的线性卷积的方法。
二、实验原理N点序列x[n] 的DFT和IDFT定义:可以用函数U=fft(u,N)和u=ifft(U,N)计算N点序列的DFT正、反变换。
三、实验内容(n),求N分别取8,32时的X(k),最后绘出图形。
1. x(n)=R5离散傅立叶变换函数的MATLAB实现如下:N=8;x=[ones(1,5),zeros(1,N-5)];n=0:N-1;X=dft(x,N);magX=abs(X);phaX=angle(X)*180/pi;k=(0:length(magX)'-1)*N/length(magX);subplot(2,2,1);stem(n,x);title('x(n)—8点');subplot(2,2,2);stem(k,magX);axis([0,8,0,6]);title('|X(k)|--8点');N=32;x=[ones(1,5),zeros(1,N-5)];n=0:N-1;X=dft(x,N);magX=abs(X);phaX=angle(X)*180/pi;k=(0:length(magX)'-1)*N/length(magX);subplot(2,2,3);stem(n,x);title('x(n)—32点');subplot(2,2,4);stem(k,magX);axis([0,32,0,5]);title('|x(k)|--32点');% dft函数function[Xk]=dft(xn,N)n=[0:1:N-1];k=[0:1:N-1];WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^nk;Xk=xn*WNnk;2. 已知一个8点的时域非周期离散阶跃信号,n1=0,n2=7,在n0=4前为0,n0以后为1。
Matlab实现DFT和FFT
一个 N 点 DFT 分解为两个 N/2 点的 DFT,继续分解,迭代下去,其运算
量约为
N log 2 N 2
四、பைடு நூலகம்及实验的相关情况介绍(包含使用软件或实验设备等情况) 计算机一台 Matlab 6.1 以上 五、实验记录(程序相关的图形、相关数据记录及分析)
根据上述两个步骤的实验结果, 比较 DFT 与 FFT 在算法与结果上的 相同与差异。 DFT 与 FFT 在结果上相同。Xk 相同,产生的图像也相同。 FFT 是 DFT 的一种快速算法,对于 16 点的 FFT,我们需要 M==4 阶运算,每一阶有八个蝴蝶因子,在每个蝴蝶因子中需要 1 次复数乘法与 两次复数加法, 因为每个蝴蝶因子都一样, 所以 FFT 通过重复运算大大简
X (2l ) = ∑ [ x(n) + x(n +
n =0 N −1 2
N 2ln )]WN 2 N )]WN2lnWNn 2
X (2l + 1) = ∑ [ x(n) − x(n + l = 0,1,...., N 2
改写为:
X 1 ( K ) + WNK X 2 ( K ), 0 ≤ k ≤ N / 2 − 1
实验指导教师:黄启宏 实验名称 姓 名
Matlab 实现 DFT 和 FFT
专业、 班级
仿古实验楼 B305
电子与通信工程 1 班 实验日期
2011-11-26
侯纪龙
实验地点
一、实验内容 1、利用 matlab 实现 DFT 2、利用 matlab 实现 FFT,分析有限离散数列的 FFT 二、实验目的 1、通过研究 DFT,FFT 性质,用语言实现 DFT, FFT。不使用 MATLAB 现 有的 FFT 函数,自己编写具体算法。 2、掌握 FFT 基 2 时间抽选法,理解其提高减少乘法运算次数提高运算速 度的原理。 三、实验原理 时间抽取(DIT)基 2FFT 算法 设 N 点序列 x(n),N= 2M ,将 x(n)按奇偶分组,有
matlab离散傅里叶变换dft
文章标题:探究Matlab中的离散傅立叶变换(DFT)在Matlab中,离散傅立叶变换(DFT)是一项非常重要的数学工具,被广泛应用于信号处理、图像处理、通信系统等领域。
本文将深入探讨Matlab中的DFT,从基本概念、数学原理到实际应用,帮助读者全面理解和灵活运用这一重要工具。
1. DFT的基本概念在Matlab中,DFT是一种将离散信号转换为频域表示的数学工具。
通过DFT,我们可以将时间域内的信号转换为频域内的频谱,从而可以分析信号的频率成分、频谱特性等重要信息。
DFT的基本公式表达为:\[ X(k) = \sum_{n=0}^{N-1} x(n)e^{-j\frac{2\pi}{N}kn}, k = 0, 1, ..., N-1 \]其中,\( x(n) \) 表示输入信号的离散样本,\( X(k) \) 表示DFT结果频域中的离散频谱样本。
2. DFT的数学原理要理解DFT的数学原理,我们需要深入了解傅立叶变换的基本概念。
傅立叶变换是指将一个信号分解为不同频率成分的过程,通过对信号在无限时间域上的积分,可以将信号转换为频域上的连续谱。
而DFT则是对离散信号的傅立叶变换,因此其基本原理是将有限长的离散信号通过离散的傅立叶变换转换为频域上的离散频谱。
3. Matlab中的DFT实现在Matlab中,我们可以使用fft函数来进行离散傅立叶变换。
通过简单的一行代码,就可以对信号进行DFT变换,并得到频域上的频谱信息。
我们可以使用以下代码对一个时间序列信号进行DFT变换:```matlabx = [1, 2, 3, 4];X = fft(x);```通过这样的方式,我们就可以得到输入信号x在频域上的频谱信息,并可以进一步分析信号的频率成分、频谱特性等重要信息。
4. 个人观点与理解作为一种重要的数学工具,DFT在Matlab中的应用非常广泛。
通过DFT,我们可以更好地分析和处理各种信号,为信号处理、通信系统等领域提供了重要的数学支持。
实验四 离散时间信号的傅里叶变换
实验四离散时间信号的傅里叶变换1.实验目的(1)理解离散序列傅里叶变换的原理和方法。
(2)掌握快速傅里叶变换的原理和方法。
2.实验原理(1)离散傅里叶变换(DFT)和快速傅里叶变换(FFT)在MATLAB中,离散傅里叶正变换采用fft( )函数,离散傅里叶逆变换采用ifft( )函数。
调用格式为:Xk=fft(x) 表示计算信号x的快速傅里叶变换Xk。
Xk=fft(x,N) 表示计算信号x的N点快速傅里叶变换。
xn=ifft(Xk)表示计算Xk的快速傅里叶逆变换xn。
Xn=ifft(Xk,N) 表示计算Xk的N点快速傅里叶逆变换xn。
另外,MATLAB中使用fftshift()函数来移动零频点到频谱中间,重新排列fft( )的输出结果,便于观察傅里叶变换。
其调用格式为:X=fftshift(Xk)(2)离散时间系统的频率特性在用MATLAB计算系统的频率响应时,可调用freqz( )函数进行求解,其调用格式为:H=freqz(b,a,w)其中b为系统函数中分子多项式的系数向量,a为分母多项式的系数向量,w为角频率向量,向量H则返回在w所定义的频率点上系统函数的值。
该函数还有其他调用形式[h,w]=freqz(b,a,n)该形式计算默认范围内n个频率点的系统函数的值(n的默认值为512)。
freqz(b,a)该形式并不返回系统函数的值,而是以对数坐标的方式绘出系统频率响应曲线。
3.实验内容(1)求有限长序列x[n]=(0.7e^(jpi/4))^n,0<=n<=16的傅里叶变换。
N=17;n=0:N-1;x=(0.7*(exp(j*pi/4))).^n;X=fft(x,N);stem(n,fftshift(X));grid on;0246810121416(2)已知无限长序列x[n]=a^n*u[n](a=0.7),用fft( )计算其频谱。
a=0.7;N=51;n=0:N-1;x=(a.^n).*heaviside(n);X=fft(x,N);stem(n,fftshift(X));grid on;05101520253035404550(3)对于矩阵脉冲波序列x[n]=1(-M<=n<=M),0(n为其他值),自取M值用freqs( )函数求幅度频谱。
Matlab在离散傅立叶变换教学中的应用
Matlab在离散傅立叶变换教学中的应用摘要:离散傅立叶变换(DFT)是数字信号处理课程的重点。
DFT中涉及到的基本概念、物理意义、参数改变对DFT的影响是教学难点。
利用matlab工具,精心设计案例,进行对比教学,在课堂实践中收到了良好的教学效果。
关键词:数字信号处理;离散傅立叶变换;Matlab 中图分类号:G434 文献标识码:A 文章编号:1672-7800(2012)001-0180-02?お?1 离散信号的傅立叶变换―DTFT离散傅立叶变换(DFT)的一个重要应用就是和作为原模拟信号的频谱近似。
为说明DFT与原信号频谱的关系,我们设计以下教学实例。
例1:产生一个100秒长的包含两个频率分别为0.05Hz和0.3Hz的连续信号,分析其抽样前后的频谱关系。
步骤如下:(1)计算机上为实现连续信号,可以采取远大于信号最高分量0.3Hz的2倍的采样频率,令Fs=10Hz 来近似实现。
信号波形如图1所示。
图1 连续信号(T=100s)(2)计算连续信号的频谱X(jΩ)。
同理,计算机上可用间隔很小的频域抽样近似。
部分代码如下:N=1000; %频域点数xft=fftshift(fft(x3,N));%取正负频率轴不同时长信号的FT如图2所示。
对于本例中无限长的2分量周期信号,其FT应表现为两根离散谱线(考虑到负频率,为四根谱线)。
由于处理的信号实际为有限长,受到加窗的影响,因此谱线有所展宽,即非周期连续信号的频谱为连续谱。
图2显示,将信号截断为原来的一半,图2(b)谱线展宽较图2(a)明显。
图2 连续信号的FT(a)100s b)50s(3)对原连续信号以满足抽样定理的较低抽样频率抽样,Fs=1Hz,得到长度为51点的离散信号x(n);并计算该离散信号的DTFTX(ejω)。
如图3所示。
比较图3中信号的DTFT和图2中信号的FT,可以发现:时域上抽样,导致频谱发生周期延拓,离散信号的DTFT是以f=fs为周期的周期谱。
Matlab中的离散傅里叶变换方法介绍
Matlab中的离散傅里叶变换方法介绍Matlab中的离散傅里叶变换(Discrete Fourier Transform,DFT)方法是数字信号处理中常用的工具。
通过将时域信号转换为频域信号,可以提取信号的频谱信息,帮助我们分析信号的频率成分以及进行滤波、压缩等处理。
本文将介绍Matlab中常用的几种离散傅里叶变换方法。
首先,我们来了解一下DFT的概念。
DFT是将时域中N个数据点的离散信号转换为频域中N个数据点的过程,其中N为一个正整数。
在Matlab中,可以使用fft函数来实现DFT。
fft函数的输入是一个长度为N的向量,输出是一个长度为N的复数向量,表示信号在频域中的幅度谱和相位谱。
在离散傅里叶变换中,有两种常用的方法,分别是直接计算和快速傅里叶变换(Fast Fourier Transform,FFT)。
首先我们来介绍直接计算方法。
直接计算方法是通过DFT的定义来计算每个频率点的幅度和相位,然后将它们组成一个复数向量。
在Matlab中,可以使用for循环来逐个计算每个频率点的值。
具体的代码如下所示:```N = length(signal); % 信号长度X = zeros(1, N); % 存储频域结果的向量for k = 0:N-1for n = 0:N-1X(k+1) = X(k+1) + signal(n+1) * exp(-1i * 2 * pi * k * n / N);endend```上述代码中的signal为输入的时域信号,X为计算得到的频域结果。
通过两层循环,我们可以计算出每个频率点的幅度和相位。
然而,直接计算方法的复杂度为O(N^2),计算效率较低,不适用于大规模的信号处理。
接下来,我们介绍更高效的FFT方法。
FFT是将DFT分解为多个较小规模的DFT的过程,从而提高计算效率。
在Matlab中,可以直接使用fft函数来进行FFT计算。
fft函数的输入和输出与DFT的定义相同,但是计算速度更快。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB 在离散傅立叶变换(DFT)中的应用
一、序列的移位和周期延拓运算。
已知)()8.0()(8n R n x n =,利用MATLAB 生成并图示序列),(),(m n x n x -和)())((8n R n x N ),())((8n R m n x N -其中为周期的延拓。
以表示8)())((,0,248n x n x N m N <<= 解:MATLAB 程序清单如下:
N=24;
M=8;
m=3;% 设移位值为3
n=0:N-1;
xn=0.8.^n.*(n>=0 & n<M); % 产生序列x(n)
subplot(3,1,1);stem(n,xn,'.');grid;
axis([0 length(xn),0 1]);title('序列x(n)');
xc=xn(mod(n,8)+1); % 产生序列x(n)的周期延拓,求余后加1是因为 % MATLAB 矢量的下标从1开始
subplot(3,1,2);stem(n,xc,'.');grid;
axis([0 length(xc),0 1]);title('序列x(n)的周期延拓序列');
xm=[xn(m+1:M) xn(1:m)]; % 产生圆周移位序列xm=x((n+m))NRN (n)
xm=[xm zeros(1,N-length(xm))];
subplot(3,1,3);stem(n,xm,'.');grid;
axis([0 length(xm),0 1]);title('圆周移位序列x(n+m)');
二、利用MATLAB 验证N 点DFT 的物理意义。
ωω
j j jw e e n x DFT e X DTFT n R n x ----===11)]([)()
(),()(44其离散时间傅立叶变换已知有限长序列
试绘制出)(ωj e X 幅度频谱和相位频谱,并分别计算N=8和N=16时的DFT 。
解:MATLAB 程序清单如下:
clf % 清除所有的图形窗口
N1=8;N2=16; % 设置两种DFT 的长度
n=0:N1-1;
k1=n;k2=0:N2-1;
w=(0:2047)*2*pi/2048;
Xw=(1-exp(-j*4*w))./(1-exp(-j*w)); % 对x(n)的频谱采样2048点
xn=[n>=0 & n<4]; % 产生序列x(n)
Xk1=fft(xn,N1); % 计算序列x(n)的8点DFT
Xk2=fft(xn,N2); % 计算序列x(n)的16点DFT
subplot(3,1,1);
plot(w/pi,abs(Xw)); % 绘制序列x(n)的DTFT 的幅频曲线
grid;title('序列x(n)的幅频曲线|X(e^{j\omega})|');
subplot(3,1,2);
stem(k1*2/N1,abs(Xk1),'.');
grid;title('序列x(n)的8点DFT');
subplot(3,1,3);stem(k2,abs(Xk2),'.');
grid;title('序列x(n)的16点DFT');
% 也可以利用MATLAB 中的hold 命令,将上述3个图形绘制在一个图中,程序如下: clf % 清除所有的图形窗口
N1=8;N2=16; % 设置两种DFT 的长度
n=0:N1-1;
k1=n;k2=0:N2-1;
w=(0:2047)*2*pi/2048;
Xw=(1-exp(-j*4*w))./(1-exp(-j*w)); % 对x(n)的频谱采样2048点
xn=[n>=0 & n<4]; % 产生序列x(n)
Xk1=fft(xn,N1); % 计算序列x(n)的8点DFT
Xk2=fft(xn,N2); % 计算序列x(n)的16点DFT
plot(w/pi,abs(Xw)); % 绘制序列x(n)的DTFT 的幅频曲线
hold % 保持当前的图形窗口
H1=stem(k1*2/N1,abs(Xk1),'o');
set(H1,'color','r')
H2=stem(k2*2/N2,abs(Xk2),'*');
set(H2,'color','k');
% legend('|X(e^{j\omega})|','X_1(k)','X_2(k)');
上机练习题:
已知一个12点的离散序列}1,2,3,4,5,6,6,5,4,3,2,1{)(=n x ,要求:
(1) 利用MATLAB 计算序列的12点离散傅立叶变换(DFT ))(k X ,并绘出它的幅度和相
位图;
(2) 利用MATLAB 计算序列的离散时间傅立叶变换(DTFT )),(ωj e
X 并绘出它的幅度和相位图;
(3) 利用MATLAB 的hold 命令,将上述两张幅度频谱图合成一张,进行比较,以验证)
(k X 是)(ωj e X 的抽样。
三、验证DFT 的共轭对称性
分别以]5,4,3,2,1,0[)(],32,21,31,0,31,21,2,1[)(21=----++-+=n x j j j j j j n x 两个
序列为例,验证序列的DFT 的对称性质。
程序略。
四、利用MATLAB 验证两个序列的线性卷积和圆周卷积的关系
已知两个有限长序列:
()()2(1)3(2)4(3)5(4)x n n n n n n δδδδδ=+-+-+-+-
()()2(1)(2)2(3)h n n n n n δδδδ=+-+-+-
编写一个计算两个任意有限长序列的圆周卷积matlab 程序,计算这两个序列以下几种情况的圆周卷积,并与这两个序列的线性卷积结果相比较:
①()x n ⑤()h n ②()x n ⑥()h n ②()x n ⑨()h n ③()x n ⑩()h n
程序略。
五、利用快速卷积法计算两个序列的卷积
已知序列)(9.0)(),()4.0sin()(2015n R n h n R n n x n ==,试利用快速卷积法计算这两个序列的
卷积)(*)()(n h n x n y =。
解:快速卷积法的计算框图如下所示:
MAT L AB 程序清单如下:
Nx=15;Nh=20;
n1=1:Nx-1;n2=0:Nh-1;
xn=sin(0.4*n1).*(n1>=0 &n1<Nx); % 产生序列x(n)
hn=0.9.^n2.*(n2>=0 &n2<Nh); % 产生序列h(n)
L=pow2(nextpow2(Nx+Nh-1)); % 计算对序列x(n)和h(n) 卷积后得到序列yn 的长度 Xk=fft(xn,L); % 对序列x(n)作L 点DFT
Hk=fft(hn,L); % 对序列h(n)作L 点DFT
yn=ifft(Xk.*Hk);。