数字信号处理实验matlab版离散傅⾥叶级数(DFS)
实验11 离散傅⾥叶级数(DFS)
(完美格式版,本⼈⾃⼰完成,所有语句正确,不排除极个别错误,特别适⽤于⼭⼤,勿⽤冰点等⼯具下载,否则下载之后的word格式会让很多部分格式错误,谢谢)
XXXX学号姓名处XXXX
⼀、实验⽬的
1、加深对离散周期序列傅⾥叶级数(DFS)基本概念的理解。
2、掌握⽤MA TLAB语⾔求解周期序列傅⾥叶级数变换和逆变换的⽅法。
3、观察离散周期序列的重复周期数对频谱特性的影响。
4、了解离散序列的周期卷积及其线性卷积的区别。
⼆、实验内容
1、周期序列的离散傅⾥叶级数。
2、周期序列的傅⾥叶级数变换和逆变换。
3、离散傅⾥叶变换和逆变换的通⽤⼦程序。
4、周期重复次数对序列频谱的影响。
5、周期序列的卷积和。
三、实验环境
MA TLAB7.0
四、实验原理
⽤matlab进⾏程序设计,利⽤matlab绘图⼗分⽅便,它既可以绘制各种图形,包括⼆维图形和三位图形,还可以对图像进⾏装饰和控制。
1、周期序列的离散傅⾥叶级数
(1)连续性周期信号的傅⾥叶级数对应的第k次谐波分量的系数为⽆穷多。⽽周期为N 的周期序列,其离散傅⾥叶级数谐波分量的系数只有N个是独⽴的。
(2)周期序列的频谱也是⼀个以N为周期的周期序列。
2、周期序列的傅⾥叶级数变换和逆变换
例11-1已知⼀个周期性矩形序列的脉冲宽度占整个周期的1/4,⼀个周期的采样点数为16点,显⽰3个周期的信号序列波形。要求:
(1)⽤傅⾥叶级数求信号的幅度频谱和相位频谱。
(2)求傅⾥叶级数逆变换的图形,与原信号图形进⾏⽐较。
解MA TLAB程序如下:
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))/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(x),1.1*max(x)]); 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))]);
运⾏结果如图11-1所⽰。
图11-1
由离散傅⾥叶级数逆变换图形可见,与原信号相⽐,幅度扩⼤了32倍。这是因为周期序列为原主值序列周期的3倍,做逆变换时未做处理。可以将逆变换程序改为 x =Xk*exp(j*2*pi/N).^(n¢*k)/(3*3*N);
3、离散傅⾥叶级数变换和逆变换的通⽤⼦程序
由例11-1可见,周期序列进⾏傅⾥叶级数变换和逆变换,是依据变换公式进⾏程序编写的,⽆论信号序列如何变化,求解的公式总是⼀样的。因此,可以将其编写成通⽤⼦程序。
(1)离散傅⾥叶级数变换通⽤⼦程序dfs.m :
function[Xk]=dfs(xn,N); n=0:N-1; k=0:N-1;
010*******
0.2
0.40.6
0.8
1x(n)
010*********
8
IDFS|X (k)|010*******
4
68
1012|X (k)|010203040-1
012arg|X (k)|
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;
例11-2 利⽤上述两个⼦程序,再做⼀遍例11-1。
解由于需要调⽤⼦程序,其中通⽤⼦程序仅适⽤于对主值区间进⾏傅⾥叶级数变换和逆变换,周期次数⽆法传递给通⽤⼦程
序,因此程序执⾏的结果仅显⽰图11-1中⼀个周期的情况。
N=16;
xn=[ones(1,N/4),zeros(1,3*N/4)]; n=0:N-1;
Xk=dfs(xn,N); %离散傅⾥叶级数变换 xn1=idfs(Xk,N); %离散傅⾥叶级数逆变换 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)|');
subplot(2,2,4),stem(n,angle(Xk)); %显⽰序列的相位谱
title('arg|X(k)|'); 运⾏结果如图11-2所⽰。
05101500.20.40.60.81x(n)
5101500.2
0.4
0.60.81idfs|X (k)|05101501
234|X (k)|051015-2
2
4
arg|X (k)|
4、周期重复次数对序列频谱的影响
理论上讲,周期序列不满⾜绝对可积条件,因此不能⽤傅⾥叶级数变换来表⽰。要对周期序列进⾏分析,可以先取K 个周期进⾏处理,然后再让K ⽆限增⼤,研究其极限情况。由这⼀分析思路,可以观察信号序列由⾮周期到周期变化时,频谱由连续谱逐渐向离散谱过渡的过程。
下⾯举例说明信号采⽤不同的重复周期次数对序列频谱的影响。
例11-3 已知⼀个矩形序列的脉冲宽度占整个周期的1/2,⼀个周期的采样点数为10点,⽤傅⾥叶级数变换求信号的重复周期数分别为1、4、7、10时的幅度频谱。
解 MATLAB 程序如下:
xn=[ones(1,5),zeros(1,5)]; %建⽴⼀个周期的时域信号 Nx=length(xn);
Nw=1000;dw=2*pi/Nw; %把2p 分为Nw 份,频率分辨率为dw k=floor((-Nw/2-0.5):(Nw/2+0.5)); %建⽴关于0轴对称的频率向量for r=0:3 K=3*r+1;
nx=0:(K*Nx-1); %周期延拓后的时间向量 x=xn(mod(nx,Nx)+1); %周期延拓后的时间信号x Xk=x*(exp(-j*dw*nx'*k))/K; %进⾏傅⾥叶级数变换 subplot(4,2,2*r+1),stem(nx,x);
axis([0,K*Nx-1,0,1.1]);ylabel('x(n)'); subplot(4,2,2*r+2),plot(k*dw,abs(Xk)); axis([-4,4,0,1.1*max(abs(Xk))]); ylabel('X(k)'); end
程序运⾏结果如图11-3所⽰。
024
680
0.51x (n )
-4-2024
05X (k )
010203000.5
1x (n )
-4-2024
05X (k )
020406000.5
1x (n )
-4-2024
05X (k )
020*******
0.5
1x (n )
-4
-2024
05X (k )
注意mod 函数的⽤法,由于MA TLAB 中变量的下标由1开始,⽽mod 函数的结果却从零开始,因此语句中加1。
由图11-3可以看出,信号序列的周期数越多,则频谱越是向⼏个频点集中。当信号序列的周期数趋于⽆穷⼤时,频谱转化为离散谱。
5、周期序列的卷积和时域周期序列的卷积和与频域周期序列的积相互对应。
注意:周期序列的卷积和与⾮周期序列的卷积和有所区别。
(1) 和均为变量为m ,周期为N 的周期序列,故它们的乘积也是周期序列。
(2) (2)卷积求和是在⼀个周期内进⾏的,即从m =0到m =N -1。
(3)如果x1(n)和x2(n)的周期长度不同,则卷积和的长度取N =max [N1,N2]。下⾯举例说明。
例11-4 已知两个周期序列分别为=[1,1,1,0,0,0],=[0,1,2,3,0,0],⽤图形表⽰它们的周期卷积和。
解为了讨论问题的⽅便,例题选择两个序列均以N =6为周期,以动态图形演⽰其卷积和的过程。程序如下:
clf; %图形窗清屏 n=0:5; %建⽴时间向量n xn1=[0,1,2,3,0,0]; %建⽴xn1序列主值 xn2=[1,1,1,0,0,0];N=length(xn1); %建⽴xn2序列主值 nx=(-N:3*N-1);
hxn2=xn2(mod(nx,N)+1); %将xn2序列周期延拓
u=[zeros(1,N),xn2,zeros(1,2*N)]; %按xn2周期延拓后的长度重建主值信号
xn12=fliplr(xn1); %将xn1作左右反折
hxn1=xn1(mod(nx,N)+1); %将xn1反折后的序列周期延拓 N1=length(hxn1);
y=zeros(1,4*N); %将y 存储单元初始化 for k=0:N-1 %动态演⽰绘图开始
p=[zeros(1,k+1),hxn1(1:N1-k-1)]; %使 hxn1向右循环移位 y1=u.*p; %使输⼊和翻转移位的脉冲过渡函数逐项相乘
yk=sum(y1); %相加
y([k+1,k+N+1,k+2*N+1,k+3*N+1])=yk; %将结果放⼊数组y subplot(4,1,1);stem(nx,hxn2);
axis([-1,3*N,0,1.1]);ylabel('x2(n)'); subplot(4,1,2);stem(nx,p);
axis([-1,3*N,0,3.3]);ylabel('x1(n)');
subplot(4,1,3);stem(k,yk); %作图表⽰主值区每⼀次卷积的结果 axis([-1,3*N,0,6.6]);hold on %在图形窗上保留每⼀次运⾏的图形结果
ylabel('主值区');
subplot(4,1,4);stem(nx,y);
(m )x ~1
m )(n x ~
2
1x ~2x ~
axis([-1,3*N,0,6.6]); ylabel('卷积结果'); pause(2); %停顿2秒
end
程序运⾏结果如图11-4所⽰。
2
4
6
8
10matlab求傅里叶变换
12
14
16
18
0.51x 2(n )
024681012141618
02x 1(n )
024681012141618
05
主值
024681012141618
5
卷积结果
图11-4
五、实验过程

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。