matlab实验经典
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二 DFS和DFT
一、实验目的
(1)加深对离散周期序列傅立叶级数(DFS)和离散傅里叶变换(DFT)基本概念的理解。
(2)掌握用Matlab语言求解周期序列傅里叶级数和离散傅里叶变换的变换和逆变换的方法。
(3)观察离散周期序列的重复周期数对频谱特性的影响,理解离散序列周期卷积及其线性卷积的区别
(4)了解有限长序列傅立叶变换(DFT)与周期序列傅里叶级数(DFS)、离散时间傅里叶变换(DTFT)的联系。
(5)了解使用FFT 计算有限长序列和无限长序列信号频谱的方法
二、实验原理
2.1 周期序列的傅里叶级数变换和逆变换
例:已知一个周期性矩形序列的脉冲宽度占周期的1/4,一个周期的采样点数为16点,显示3个周期的信号序列波形。要求:
(1)用傅里叶级数求信号的幅度频谱和相位频谱
(2)求傅里叶级数逆变换的图形,与原信号图形进行比较
Matlab程序如下:
N = 16;
xn = [ones(1,N/4),zeros(1,3*N/4)];
xn = [xn xn xn];
n = 0:3*N-1;
k = 0:3*N-1;
Xk = xn*exp(-j*2*pi/N).^(n'*k);
x = (Xk*exp(j*2*pi/N).^(n'*k))/(3*3*N);
subplot(2,2,1),stem(n,xn);
title('x(n)');axis([-1,3*N,1.1*min(xn),1.1*max(xn)]);
subplot(2,2,2),stem(n,abs(x));
title('IDFS|X(k)|');axis([-1,3*N,1.1*min(xn),1.1*max(xn)]);
subplot(2,2,3),stem(k,abs(Xk));
title('|X(k)|');axis([-1,3*N,1.1*min(abs(Xk)),1.1*max(abs(Xk))]);
subplot(2,2,4),stem(k,angle(Xk));
title('arg|X(k)|');axis([-1,3*N,1.1*min(angle(Xk)),1.1*max(angle(Xk))]);
2.2 离散傅里叶级数变换和逆变换的通用子程序
由上面例子可知,周期序列进行傅里叶级数变换和逆变换,是依据变换公式进行程序编写的,无论信号如何变化,求解的公式总是一样的。因此,可以将其编写成通用的子程序。
(1)离散傅立叶级数变换通用子程序dfs.m
function Xk = dfs(xn,N)
n = 0:N-1;
k = 0:N-1;
WN = exp(-j*2*pi/N);
nk = n'*k;
Xk = xn*WN.^nk;
(2)离散傅立叶级数逆变换通用子程序idfs.m
function xn = idfs(Xk,N)
n = 0:N-1;
k = 0:N-1;
Wn = exp(j*2*pi/N);
nk = n'*k;
xn = (Xk*Wn.^nk)/N;
2.3 利用上述两个子程序,重复2.1要求内容。
由于需要调用子程序,其中通用子程序仅适用于对主值区间进行傅里叶级数变换和逆变换,周期次数无法传递给通用子程序,因此程序执行的结果仅显示出一个周期的情况。
Matlab程序如下:
N = 16;
xn = [ones(1,N/4),zeros(1,3*N/4)];
n = 0:N-1;
Xk = dfs(xn,N);
xn1 = idfs(Xk,N);
figure,subplot(2,2,1),stem(n,xn);
axis([0,N-1,0,1.1*max(xn)]);
title('x(n)');
subplot(2,2,2),stem(n,abs(xn1));
axis([0,N-1,0,1.1*max(abs(xn1))]);
title('idfs|X(k)|');
subplot(2,2,3),stem(n,abs(Xk));
title('|X(k)|');axis([0,N-1,1.1*min(abs(Xk)),1.1*max(abs(Xk))]);
subplot(2,2,4),stem(n,angle(Xk));
title('arg|X(k)|');axis([0,N-1,1.1*min(angle(Xk)),1.1*max(angle(Xk))]);
2.4 周期重复次数对序列频谱的影响
理论上讲,周期序列不满足绝对可积条件,因此不能用傅里叶级数变换来表示。要对周期序列进行分析,可以先取K个周期进行处理,然后再让K无限增大,研究其极限情况。由这一分析思路,可以观察信号序列由非周期到周期变化时,频谱由连续谱逐渐向离散谱过渡的过程。
下面举例说明信号采用不同的重复周期次数对序列频谱的影响。
例:已知一个矩形序列的脉冲宽度占整个周期的1/2,一个周期的采样点数为10点,由傅里叶技术变换求信号的重复周期数分别为1、4、7、10时的幅度频谱。
Matlab程序如下:
xn = [ones(1,5),zeros(1,5)]; %建立一个周期的时域信号
Nx = length(xn);
Nw = 1000;
dw = 2*pi/Nw; %把2*pi分为1000份,频率分辨率为dw
k = floor((-Nw/2+0.5):(Nw/2+0.5)); %建立关于0轴对称的频率向量
figure,
for r = 0:3
K = 3*r+1;