前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MATLAB实现离散傅里叶变换DFT

MATLAB实现离散傅里叶变换DFT

作者头像
timerring
发布2022-08-03 18:35:05
7410
发布2022-08-03 18:35:05
举报
文章被收录于专栏:TechBlogTechBlog

一、实验目的 1.通过实验加深对DFT 的理解。 2.理解如何用DFT计算离散信号频谱。

二、实验原理及方法         我们知道,在信号的时域表示形式和频域表示形式之间,一个域的周期性对应于另一个域的离散性,一个域的非周期性对应于另一个域的连续性。所以,周期的离散时间信号的频谱是离散频率的周期函数。         当信号在时域和频域中都是抽样的离散函数时,按照傅里叶变换的概念,他们在两个域中也必然是周期的。但是,用计算机去完成这样无限长序列的运算,显然是不可能的。同时由于这些序列的周期性,他们的信息均包含在一个周期之中,因此也没有必要作无限长序列的运算。这样,就有必要从时域和频域都缩减到一个限定的范围内来进行。这个范围,就是时间函数的一个周期Tp 和频谱函数的一个周期Ωp 。把离散信号在时域和频域的函数中各取一周期,并定义他们是离散傅里叶变换对,如以 DFT 表示离散傅里叶正变换,IDFT 表示离散傅里叶反变换,则有X (k ) = DFT[x(n)],x(n) = IDFT[ X (k )]         由此可见,离散傅里叶变换已经不是通常意义的傅里叶变换了。这种变换的特点,是信号在 频域和时域中都只取有限个离散数据,只有当这些数据按一定的周期分别构成周期性的离散时间函数和周期性得离散频率函数时,他们才成为通常意义的傅里叶变换对。         说明了离散傅里叶变换的意义后,现在可以来进一步研究如何计算离散傅里叶变换,既由 x(n) 计算 X (k ) 。有了周期的离散信号 ~x (n) 的频谱函数 ~X(k),按定义,只要取 ~      的一个周期 X (k ) ,它就是 ~x (n) 一个周期 x(n) 的离散傅里叶变换。

 三、实验内容及步骤 用 DFT 分析各种离散信号的幅频特性。

参考流程图 1:

 参考流程图3:

4.设 x(n) 为长度 N=5 的矩形序列,求离散傅立叶变换 X (k )

(1)  绘出有限长序列 x(n) ;

(2)  由 x(n) 形成的周期序列 ~x (n) ;

(3)  对应于 ~x (n) 的傅立叶级数x(e ʲ▷ ) ;~X (k )和 x(n) 的傅立叶变换的幅度特性

(4)x(n) 的 DFTX (k ) 。

若将长度改成 N=10 的矩形序列,绘出有限长序列 x(n) ;周期序列 ~x (n) ;DFT 的幅值。 程序流程图:

 四、思考题 1. 用连续傅里叶变换分析(被抽样的)连续信号,将其结果与抽样信号的离散傅里叶 变换结果相比较,你能发现什么问题?如何解释? 2. 计算抽样序列的连续傅里叶变换,将其结果与抽样序列的离散傅里叶变换结果相比 较,你又能发现什么问题? 五、实验报告要求 1. 简述实验原理及目的。 2.有能力者自行编制信号频谱的相频特性程序,分析信号的相频特性。 3. 写出实验程序绘制图形,总结DFT 的物理意义. 4. 简要回答思考题。

代码语言:javascript
复制
8.1:
f=32;
dt=1/f;
N=32;
n=0:N-1;k=n;
n=n*dt;
x=0.15*sin(2*pi*n)+sin(2*pi*2*n)-0.1*sin(2*pi*3*n);
y=x*exp(-j*2*pi/N).^(n'*k);
subplot(3,1,1);stem(n,x,'filled');ylabel('x');
subplot(3,1,2);stem(k,abs(y),'filled');ylabel('mag X(k)');
subplot(3,1,3);stem(k,angle(y),'filled');ylabel('ang X(k)');
8.2:
N=16;
n=0:N-1;k=n;
x=sin(pi*n/8)+sin(pi*n/4);
y=x*exp(-j*2*pi/N).^(n'*k);
subplot(3,1,1);stem(n,x,'filled');ylabel('x');
subplot(3,1,2);stem(k,abs(y),'filled');ylabel('mag X(k)');
subplot(3,1,3);stem(k,angle(y),'filled');ylabel('ang X(k)');
8.3:
for N=8:8:16
n=0:N-1;k=n;
x=[n<=3];
y=x*exp(-j*2*pi/N).^(n'*k);
figure;
subplot(3,1,1);stem(n,x,'filled');ylabel('x(n)');
subplot(3,1,2);stem(k,abs(y),'filled');ylabel('mag X(k)');
subplot(3,1,3);stem(k,angle(y),'filled');ylabel('ang X(k)');
end
8.4:
for N=5:5:10
n=0:N-1;k=n;
x=[n>=0];
n1=0:6*N-1;k1=n1;
x1=x(mod(n1,N)+1);
y=x*exp(-j*2*pi/N).^(n'*k);
y1=x1*exp(-j*2*pi/N).^(n1'*k1);
w=linspace(-2*pi,2*pi,500);
y2=x*exp(-j*n'*w);
figure;
subplot(4,2,1);stem(n,x,'.');ylabel('x');
subplot(4,2,2);stem(n1,x1,'.');ylabel('x~(n)');
subplot(4,2,3);stem(k,abs(y),'.');ylabel('mag X(k)');
subplot(4,2,4);stem(k,angle(y),'.');ylabel('ang X(k)');
subplot(4,2,5);stem(k1,abs(y1),'.');ylabel('mag X~(k)');
subplot(4,2,6);stem(k1,angle(y1),'.');ylabel('ang X~(k)');
subplot(4,1,4);plot(w/pi,abs(y2));xlabel('X pi');ylabel('X(w)');
end
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档