数字信号处理实验 matlab版 离散傅里叶变换DFT.docx

上传人:b****5 文档编号:6849407 上传时间:2023-01-11 格式:DOCX 页数:12 大小:82.48KB
下载 相关 举报
数字信号处理实验 matlab版 离散傅里叶变换DFT.docx_第1页
第1页 / 共12页
数字信号处理实验 matlab版 离散傅里叶变换DFT.docx_第2页
第2页 / 共12页
数字信号处理实验 matlab版 离散傅里叶变换DFT.docx_第3页
第3页 / 共12页
数字信号处理实验 matlab版 离散傅里叶变换DFT.docx_第4页
第4页 / 共12页
数字信号处理实验 matlab版 离散傅里叶变换DFT.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

数字信号处理实验 matlab版 离散傅里叶变换DFT.docx

《数字信号处理实验 matlab版 离散傅里叶变换DFT.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验 matlab版 离散傅里叶变换DFT.docx(12页珍藏版)》请在冰豆网上搜索。

数字信号处理实验 matlab版 离散傅里叶变换DFT.docx

数字信号处理实验matlab版离散傅里叶变换DFT

实验12离散傅里叶变换(DFT)

(完美格式版,本人自己完成,所有语句正确,不排除极个别错误,特别适用于山大,勿用冰点等工具下载,否则下载之后的word格式会让很多部分格式错误,谢谢)

XXXX学号姓名处XXXX

一、实验目的

(1)加深对离散傅里叶变换(DFT)基本概念的理解。

(2)了解有限长序列傅里叶变换(DFT)与周期序列傅里叶级数(DFS)、离散时间傅里叶变换(DTFT)的联系。

(3)掌握用MATLAB语言进行离散傅里叶变换和逆变换的方法。

二、实验内容

1.有限长序列的傅里叶变换(DFT)和逆变换(IDFT)

2.有限长序列DFT与周期序列DFS的联系

3.有限长序列DFT与离散时间傅里叶变换DTFT的联系

三、实验环境

MATLAB7.0

四、实验原理

1.有限长序列的傅里叶变换(DFT)和逆变换(IDFT)

在实际中常常使用有限长序列。

如果有限长序列信号为x(n),则该序列的离散傅里叶变换对可以表示为

(12-1)

(12-2)

从离散傅里叶变换定义式可以看出,有限长序列在时域上是离散的,在频域上也是离散的。

式中,

即仅在单位圆上N个等间距的点上取值,这为使用计算机进行处理带来了方便。

由有限长序列的傅里叶变换和逆变换定义可知,DFT和DFS的公式非常相似,因此在程序编写上也基本一致。

例12-1已知x(n)=[0,1,2,3,4,5,6,7],求x(n)的DFT和IDFT。

要求:

(1)画出序列傅里叶变换对应的|X(k)|和arg[X(k)]图形。

(2)画出原信号与傅里叶逆变换IDFT[X(k)]图形进行比较。

解MATLAB程序如下:

 

>>xn=[0,1,2,3,4,5,6,7];%建立信号序列

>>N=length(xn);

>>n=0:

(N-1);k=0:

(N-1);

>>Xk=xn*exp(-j*2*pi/N).^(n'*k);%离散傅里叶变换

>>x=(Xk*exp(j*2*pi/N).^(n'*k))/N;%%离散傅里叶逆变换

>>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));%显示|X(k)|

>>title('|X(k)|');

>>subplot(2,2,4),stem(k,angle(Xk));%显示arg|X(k)|

>>title('arg|X(k)|');

运行结果如图12-1所示。

图12-1例12-1有限长序列的傅里叶变换和逆变换结果

从得到的结果可见,与周期序列不同的是,有限长序列本身是仅有N点的离散序列,相当于周期序列的主值部分。

因此,其频谱也对应序列的主值部分,是含N点的离散序列。

2.有限长序列DFT与周期序列DFS的联系

将周期序列的傅里叶级数变换对(式(11-1)和式(11-2))与有限长序列离散傅里叶变换对(式(12-1)和式(12-2))进行比较,可以看出两者的区别仅仅是将周期序列换成了有限长序列。

例12-2已知周期序列的主值x(n)=[0,1,2,3,4,5,6,7],求x(n)周期重复次数为4次时的DFS。

要求:

  

(1)画出原主值和信号周期序列信号。

  

(2)画出序列傅里叶变换对应的

的图形。

解MATLAB程序如下:

>>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);%即xn1=[xn,xn,xn,xn]

>>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)|');

运行结果如图12-2所示。

图12-2例12-2周期序列的傅里叶级数(DFS)结果

由这个周期序列的实验我们可以看出,与例12-1相比,有限长序列x(n)可以看成是周期序列

的一个周期;反之,周期序列

可以看成是有限长序列x(n)以N为周期的周期延拓。

频域上的情况也是相同的。

从这个意义上说,周期序列只有有限个序列值有意义。

3.有限长序列DFT与离散时间傅里叶变换DTFT的联系

离散时间傅里叶变换(DTFT)是指信号在时域上为离散的,而在频域上则是连续的。

如果离散时间非周期信号为x(n),则它的离散傅里叶变换对(DTFT)表示为

其中X(ejw)称为信号序列的频谱。

将频谱表示为

.|X(ejw)|称为序列的幅度谱,

称为序列的相位谱。

从离散时间傅里叶变换的定义可以看出,信号在时域上是离散的、非周期的,而在频域上则是连续的、周期性的。

与有限长序列相比,X(ejw)仅在单位圆上取值,X(k)是在单位圆上N个等间距的点上取值。

因此,连续谱X(ejw)可以由离散谱X(k)经插值后得到。

为了进一步理解有限长序列的傅里叶变换(DFT)与离散时间傅里叶变换(DTFT)的联系,我们举例说明离散时间傅里叶变换的使用方法和结果。

例12-3求x(n)=[0,1,2,3,4,5,6,7],0≤n≤7的DTFT,将(-2p,2p)区间分成500份。

要求:

(1)画出原信号。

(2)画出由离散时间傅里叶变换求得的幅度谱X(ejw)和相位谱arg[X(ejw)]图形。

解MATLAB程序如下:

>>xn=[0,1,2,3,4,5,6,7];

>>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)');

>>subplot(3,1,2),plot(w,abs(X),'k');%显示序列的幅度谱

>>axis([-2*pi,2*pi,1.1*min(abs(X)),1.1*max(abs(X))]);

>>ylabel('幅度谱');

>>subplot(3,1,3),plot(w,angle(X),'k');%显示序列的相位谱

>>axis([-2*pi,2*pi,1.1*min(angle(X)),1.1*max(angle(X))]);

>>ylabel('相位谱');

运行结果如图12-3所示。

图12-3例12-3离散时间傅里叶变换(DTFT)的结果

由图12-3与DFT的结果图12-1相比可以看出,两者有一定的差别。

主要原因在于,该例进行DTFT时,X(ejw)在单位圆上取250个点进行分割;而图12-1进行DFT时,X(k)是在单位圆上N=8的等间距点上取值,X(k)的序列长度与X(ejw)相比不够长。

例12-4仍然用x(n)=[0,1,2,3,4,5,6,7],将x(n)的有限长序列后面补足至N=100,求其DFT,并与例12-3进行比较。

解将例12-1程序的前2行改为

  N=100;

  xn=[0,1,2,3,4,5,6,7,zeros(1,N-8)];

则|X(k)|和arg[X(k)]的图形接近由离散时间傅里叶变换求得的幅度谱X(ejw)和相位谱arg[X(ejw)]的图形,如图12-4所示。

注意,此图对应[0,2p]区间。

MATLAB程序如下:

>>N=100;

>>xn=[0,1,2,3,4,5,6,7,zeros(1,N-8)];%建立信号序列

>>n=0:

(N-1);k=0:

(N-1);

>>Xk=xn*exp(-j*2*pi/N).^(n'*k);%离散傅里叶变换

>>x=(Xk*exp(j*2*pi/N).^(n'*k))/N;%离散傅里叶逆变换

>>subplot(2,1,1),stem(k,abs(Xk));%显示|X(k)|

>>title('|X(k)|');

>>subplot(2,1,2),stem(k,angle(Xk));%显示arg|X(k)|

>>title('arg|X(k)|');

运行结果如图12-4所示。

图12-4增长有限长序列的长度得到|X(k)|和arg[X(k)]

五、实验过程

2.已知有限长序列x(n)=[7,6,5,4,3,2],求x(n)的DFT和IDFT。

要求:

①画出序列傅里叶变换对应的|X(k)|和arg[X(k)]的图形。

  ②画出原信号与傅里叶逆变换IDFT[X(k)]的图形进行比较。

解MATLAB程序如下:

>>xn=[7,6,5,4,3,2,];%建立信号序列

>>N=length(xn);

>>n=0:

(N-1);k=0:

(N-1);

>>Xk=xn*exp(-j*2*pi/N).^(n'*k);%离散傅里叶变换

>>x=(Xk*exp(j*2*pi/N).^(n'*k))/N;%离散傅里叶逆变换

>>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));%显示|X(k)|

>>title('|X(k)|');

>>subplot(2,2,4),stem(k,angle(Xk));%显示arg|X(k)|

>>title('arg|X(k)|');

运行结果如图12-5所示。

图12-5

3.已知周期序列的主值x(n)=[7,6,5,4,3,2],求x(n)周期重复次数为3次时的DFS和IDFS。

要求:

①画出原信号序列的主值和周期序列的图形。

②画出序列傅里叶变换对应的

的图形。

解MATLAB程序如下:

>>xn=[7,6,5,4,3,2,1];

>>N=length(xn);

>>n=0:

3*N-1;k=0:

3*N-1;

>>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)');

>>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)|');

运行结果如图12-6所示。

图12-6

4.求x(n)=[7,6,5,4,3,2],0≤n≤5的DTFT,将(-2p,2p)区间分成500份。

要求:

2出原信号。

②画出由离散时间傅里叶变换求得的幅度谱X(ejw)和相位谱arg[X(ejw)]的图形。

③求有限长序列x(n)=[7,6,5,4,3,2],N=100时的DFT,并与DTFT的结果进行比较。

解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');

>>ylabel('x(n)');

>>subplot(3,1,2),plot(w,abs(X),'k');%显示序列的幅度谱

>>axis([-2*pi,2*pi,1.1*min(abs(X)),1.1*max(abs(X))]);

>>ylabel('幅度谱');

>>subplot(3,1,3),plot(w,angle(X),'k');%显示序列的相位谱

>>axis([-2*pi,2*pi,1.1*min(angle(X)),1.1*max(angle(X))]);

>>ylabel('相位谱');

运行结果如图12-7所示。

图12-7

③MATLAB程序如下:

>>N=100;

>>xn=[7,6,5,4,3,2,zeros(1,N-6)];%建立信号序列

>>n=0:

(N-1);k=0:

(N-1);

>>Xk=xn*exp(-j*2*pi/N).^(n'*k);%离散傅里叶变换

>>x=(Xk*exp(j*2*pi/N).^(n'*k))/N;%离散傅里叶逆变换

>>subplot(2,1,1),stem(k,abs(Xk));%显示|X(k)|

>>title('|X(k)|');

>>subplot(2,1,2),stem(k,angle(Xk));%显示arg|X(k)|

>>title('arg|X(k)|');

运行结果如图12-8所示。

图12-8

六、实验感想

通过此次实验中练习使用matlab语言进行离散傅里叶级数变换和逆变换的方法,更为熟悉的掌握了matlab的功能,在实验过程中也遇到很多小问题,并通过仔细检查和查阅相关书籍解决此类问题,让我深刻认识到,细节的重要性。

在使用help过程中,深切体会到良好的英语基础和充实的课堂知识的重要性。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1