MATLAB实现离散傅里叶变换DFT

一、实验目的
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. 简要回答思考题。

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

Matlab中,DFT离散傅里叶变换)可以通过使用fft函数来计算。使用fft函数可以得到离散序列的频谱,即DFT的结果。通过绘制离散频谱的幅度和相位曲线,可以观察到离散序列在频域的特性。 下面给出使用Matlab计算10点DFT变换的示例代码: x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; % 输入十个点的离散序列 X = fft(x); % 使用fft函数计算DFT变换 % 绘制离散频谱的幅度曲线 subplot(2, 1, 1); stem(0:9, abs(X), 'filled'); xlabel('k'); ylabel('|X(k)|'); title('10点DFT变换的离散频谱幅度曲线'); % 绘制离散频谱的相位曲线 subplot(2, 1, 2); stem(0:9, angle(X), 'filled'); xlabel('k'); ylabel('Arg[X(k)]'); title('10点DFT变换的离散频谱相位曲线'); 这段代码首先定义了一个包含十个点的离散序列x,然后使用fft函数计算其DFT变换得到X。接着使用stem函数分别绘制了离散频谱的幅度曲线和相位曲线。 通过观察离散频谱的幅度曲线,我们可以了解到不同频率分量在离散序列中的能量大小。而相位曲线则展示了不同频率分量的相对相位关系。这些信息对于分析信号在频域上的特性非常有用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [matlab数字信号处理实验——验证DFT变换的物理意义 超详细代码解析](https://blog.csdn.net/weixin_63051243/article/details/130967624)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

timerring

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值