资源描述
实验二 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;
nx = 0:(K*Nx-1); %周期延拓后的时间向量
x = xn(mod(nx,Nx)+1); %周期延拓后的时间信号x
Xk = x*(exp(-i*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));
title(['K = ',num2str(K)])
axis([-4,4,0,1.1*max(abs(Xk))]);ylabel('X(k)');
end
附:Matlab子函数解释:
1、mod
功能:模数求余
调用格式:mod(x,m); %x整除m取正余数
2、floor
功能:向负无穷舍入为整数
调用格式:floor(x); %将x向负无穷舍入为整数
注意mod函数的用法,有与Matlab中变量的下标由1开始,而mod函数的结果却从0开始,因此语句中加1.
由上例的图中可以看出,信号序列的周期数越多,而频谱越是向几个频点集中。当信号序列的周期趋于无穷大时,频谱转化为离散谱。
2.5 有限长序列的傅里叶变换(DFT)与逆变换(IDFT)
从离散傅里叶变换定义式可以看出,有限长序列在时域上市离散的,在频域上也是离散的。变换式中,,即仅在单位圆上N个等间距的点上取值,这为使用计算机进行处理带来了方便。
由有限长序列的傅里叶变换和逆变换定义可知,DFT和DFS的公式非常相似,因此在程序编写上也基本一致。
例:已知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;
figure,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));
title('|X(k)|');
subplot(2,2,4),stem(k,angle(Xk));
title('arg|X(k)|');
axis([0,N,1.1*min(angle(Xk)),1.1*max(angle(Xk))])
从得到的结果可见,与周期序列不同的是,有限长序列本身是仅有N点的离散序列,相当于周期序列的主值部分。因此,其频谱也对应序列的主值部分,是含N点的离散序列。
2.6 有限长序列DFT与周期序列DFS的联系
将周期序列的傅里叶级数变换对与有限长序列离散傅里叶级数变换对进行比较,可以看出两者的区别仅仅是将周期序列换成了有限长序列换成了有限长序列x(n),同时,由于式中WNnk的周期性,因而有限长序列的离散傅里叶变换实际上隐含着周期性。
例:一周期序列的主值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);
Xk = xn1*exp(-j*2*pi/N).^(n'*k);
figure,subplot(2,2,1),stem(xn);
title('原主值信号(n)');
subplot(2,2,2),stem(n,xn1);
title('周期序列信号');axis([0,4*N,min(xn1),1.1*max(xn1)])
subplot(2,2,3),stem(k,abs(Xk));
title('|X(k)|');axis([0,4*N,1.1*min(abs(Xk)),1.1*max(abs(Xk))])
subplot(2,2,4),stem(k,angle(Xk));
title('arg|X(k)|');axis([0,4*N,1.1*min(angle(Xk)),1.1*max(angle(Xk))])
由这个周期序列的实验我们可以看出,与2.5中例子相比,有限长序列x(n) 可以看成是周期序列的一个周期;反之,周期序列可以看成是有限长序列以N为周期的周期延拓。频域上的情况也是相同的。从这个意义上说,周期序列只有有限个序列值才有意义。
2.7 有限长序列DFT与离散时间傅立叶变换DTFT的联系
离散时间傅里叶变换(DTFT)是指信号在时域上是离散的、非周期的,而在频域上则是连续的、周期性的。
与有限长序列相比,序列的频谱仅在单位圆上取值,是在单位圆上N个等间距的点上取值。因此,连续谱可以由离散谱经插值后得到。
为了进一步理解DFT与DTFT的联系,现举例说明DTFT的使用方法和结果。
例:求x(n)=[0,1,2,3,4,5,6,7],0≤n≤7的DTFT,将区间分成500份。要求:(
(1)画出原信号;
(2)画出由DTFT求出的幅度谱和相位谱的图形。
Matlab程序如下:
xn = [0 1 2 3 4 5 6 7];
N = length(xn);
n = 0:N-1;
w = linspace(-2*pi,2*pi,500);
X = xn*exp(-j*n'*w);
figure,subplot(3,1,1),stem(n,xn)
title('x(n)');
subplot(3,1,2),plot(w,abs(X));
axis([-2*pi,2*pi,1.1*min(abs(X)),1.1*max(abs(X))]);
title('幅度谱');
subplot(3,1,3),plot(w,angle(X));
axis([-2*pi,2*pi,1.1*min(angle(X)),1.1*max(angle(X))]);
title('相位谱');
由DTFT的结果和DFT的结果相比可以看出,两者有一定的差别。主要原因是这个例子在进行DTFT时,在单位圆上取250个点进行分割;而进行DFT时,是在单位圆上N=8的等间距点上取值,的序列长度与相比不够长。将x(n) 的有限长序列后面补足至N=100,求其DFT,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));
title('|X(k)|');
subplot(2,1,2),stem(k,angle(Xk));
title('arg|X(k)|');
axis([0,N,1.1*min(angle(Xk)),1.1*max(angle(Xk))])
此时,由补零后的序列进行DFT求出的和的图形接近由DTFT求出的幅度谱和相位谱的图形。注意:图2-7对应的为区间。
三、实验任务
1、阅读并输入实验原理中介绍的例题程序,观察输出的图形曲线,理解每一条语句的含义。
2、已知一个信号序列的主值为x(n)=[0,1,2,3,2,1,0],显示两个周期的信号序列波形,要求:
(1) 用DFS求信号的幅度频谱和相位频谱,用图形表示;
(2)求IDFS的图形,并与原信号进行比较。
3、已知有限长序列x(n)=[7,6,5,4,3,2],求x(n)的DFT和IDFT,要求:
(1) 画出DFT对应的和的图形。
(2)画出原信号与傅里叶逆变换IDFT[X(k)]图形进行比较
4、一周期序列的主值x(n)=[7,6,5,4,3,2],求x(n)周期周期重复次数为3次时的DFS。要求:
(1)画出原主值和信号周期序列信号;
(2)画出序列傅里叶变换对应的和的图形。
5、求x(n)=[ 7,6,5,4,3,2],0≤n≤5的DTFT,将区间分成500份。要求:(
(1)画出原信号;
(2)画出由DTFT求出的幅度谱和相位谱的图形。
(3)求这个有限长序列补零到N=100时的DFT,并与DTFT结果进行比较。
6、先用MATLAB产生出下列三个数字信号:
(长度为4的矩形窗)
然后逐个用DFT进行谱分析,分别取DFT的长度N=16,32,画出信号的幅谱图,分析实验结果。
7、先用MATLAB产生出如下模拟信号:
设采样频率Hz,然后用DFT进行谱分析,分别取DFT的长度N=16,32,64,画出信号的幅谱图,横轴打印模拟频率。讨论DFT长度与频率分辨率的关系,要在频谱图上分离出上述3个频率,DFT长度至少取多大?
四、实验报告
1、列写调试通过的使用程序,打印实验程序产生的曲线图形。
2、回答思考题:
(1)离散周期序列的频谱有何特点?离散序列的周期重复次数对信号的幅度频谱有何影响?
(2)DFT与DTFT、DFS分别有和联系和区别?DFT有何特点?
展开阅读全文