一、实验目的
(1)加深对离散傅里叶变换(DFT)基本概念的理解
(2)了解有限长序列傅里叶变换(DFT)与离散时间傅里叶变换(DTFT)的联系
(3)掌握用MATLAB语言进行离散傅里叶变换和逆变换的方法
二、实验原理
1.有限长序列的傅里叶变换(DFT)和逆变换(IDFT)
在实际中常常使用有限长序列。如果有限长序列信号为x(n),则该序列的离散傅里叶变换对可以表示为:
从离散傅里叶变换定义式可以看出,有限长序列在时域上是离散的,在频域上也是离散的。式中
,即仅在单位圆上N个等间距的点上取值,这为使用计算机进行处理带来了方便。
由有限长序列的傅里叶变换和逆变换定义可知,DFT和DFS的公式非常相似,因此在程序编写上也基本一致。
例1:已知x(n)=[0,1,2,3,4,5,6,7],求x(n)的DFT和IDFT。要求:
(1)画出序列傅里叶变换对应的|X(k)|和arg[X(k)]图形。
(2)画出原信号与傅里叶逆变换IDFT[X(k)]图形进行比较。
代码:
xn=0:7;
N=length(xn);
n=0:N-1;
k=0:N-1;
Xk=xn*exp(-1j*2*pi/N).^(n'*k);
x=(Xk*exp(1j*2*pi/N).^(n'*k))/N;
subplot(4,1,1),stem(n,xn);
title('x(n)')
subplot(4,1,2),stem(n,abs(x));
title('IDFT|X(k)|')
subplot(4,1,3),stem(n,abs(Xk));
title('X(k)')
subplot(4,1,4),stem(k,angle(Xk));
title('arg|X(k)|')
输出:
2.有限长序列DFT与离散时间傅里叶变换DTFT的联系
离散时间傅里叶变换(DTFT)是指信号在时域上为离散的,而在频域上则是连续的。
如果离散时间非周期信号为x(n),则它的离散傅里叶变换对(DTFT)表示为:
与有限长序列相比,X(e^(jw))仅在单位圆上取值,X(k)是在单位圆上N个等间距的点上取值。因此,连续谱X(e^(jw))可以由离散谱X(k)经插值后得到。
例2:求x(n)=[0,1,2,3,4,5,6,7],0≤n≤7的DTFT,将(-2pi,2pi)区间分成500份。
(1)画出原信号。
(2)画出由离散时间傅里叶变换求得的幅度谱X(ejw)和相位谱arg[X(e^(jw))]图形。
代码:
xn=0:7;
n=0:length(xn)-1;
w=linspace(-2*pi,2*pi,500);
X=xn*exp(-1j*n'*w);
subplot(3,1,1),stem(n,xn);
ylabel('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))])
ylabel('幅度谱')
subplot(3,1,3),plot(w,angle(X));
axis([-2*pi 2*pi 1.1*min(angle(X)) 1.1*max(angle(X))])
ylabel('相位谱')
输出:
比较例1和例2,两者图像有一定差别。
主要原因在于,该例进行DTFT时,X(e^(jw))在单位圆上取250个点进行分割;
而进行DFT时,X(k)是在单位圆上N=8的等间距点上取值,X(k)的序列长度与X(ejw)相比不够长。
那么仍用x(n)=[0,1,2,3,4,5,6,7],将x(n)的有限长序列后面补足0至N=100,看其DFT:
代码:
xn=0:7;
N=100;
xn=[xn zeros(1,N-8)];
n=0:N-1;
k=0:N-1;
Xk=xn*exp(-1j*2*pi/N).^(n'*k);
x=(Xk*exp(1j*2*pi/N).^(n'*k))/N;
subplot(4,1,1),stem(n,xn);
axis([0 7 0 10])
title('x(n)')
subplot(4,1,2),stem(n,abs(x));
axis([0 7 0 10])
title('IDFT|X(k)|')
subplot(4,1,3),stem(k,abs(Xk));
axis([0 7 0 40])
title('X(k)')
subplot(4,1,4),stem(k,angle(Xk));
axis([0 10 -5 5])
title('arg|X(k)|')
输出:
三、实验任务
1.已知有限长序列x(n)=[7,6,5,4,3,2],求x(n)的DFT和IDFT。要求:
①画出序列傅里叶变换对应的|X(k)|和arg[X(k)]的图形。
②画出原信号与傅里叶逆变换IDFT[X(k)]的图形进行比较。
代码:
xn=[7 6 5 4 3 2];
N=length(xn);
n=0:N-1;
k=0:N-1;
Xk=xn*exp(-1j*2*pi/N).^(n'*k);
x=(Xk*exp(1j*2*pi/N).^(n'*k))/N;
subplot(4,1,1),stem(n,xn);
title('x(n)')
subplot(4,1,2),stem(n,abs(x));
title('IDFT|X(k)|')
subplot(4,1,3),stem(k,abs(Xk));
title('|X(k)|')
subplot(4,1,4),stem(k,angle(Xk));
title('arg|X(k)|')
输出:
2.求x(n)=[7,6,5,4,3,2],0≤n≤5的DTFT,将(-2p,2p)区间分成500份。要求:
①画出原信号。
②画出由离散时间傅里叶变换求得的幅度谱X(ejw)和相位谱arg[X(ejw)]的图形。
③求有限长序列x(n)=[7,6,5,4,3,2],N=100时的DFT,并与DTFT的结果进行比较。
代码:
xn=[7 6 5 4 3 2];
n=0:length(xn)-1;
w=linspace(-2*pi,2*pi,500);
X=xn*exp(-1j*n'*w);
N=100;
xn1=[xn zeros(1,N-length(xn))];
n1=0:N-1;
k=0:N-1;
Xk=xn1*exp(-1j*2*pi/N).^(n1'*k);
subplot(3,2,[1 2]),stem(n,xn);
title('x(n)')
subplot(3,2,3),plot(w,abs(X));
title('DTFT 幅度谱')
subplot(3,2,4),plot(w,angle(X));
title('DTFT 相位谱')
subplot(3,2,5),stem(k,abs(Xk));
title('DFT |X(k)|')
subplot(3,2,6),stem(k,angle(Xk));
title('DFT arg|X(k)|')
输出:
3.求x(n)=[0,1,2,3,4,5,6,7,8,9],0≤n≤9 的DFT,将(0,2pi)区间分成4份。要求:
①画出原信号。
②画出由DFT求得的幅度谱X[k]和相位谱arg X[k], k=0,1,2,3的图形。
③对上述X[k]求IDFT,将其结果与原信号x(n) 进行比较。
代码:
xn=0:9;
N=length(xn);
n=0:N-1;
k=0:4;
Xk=xn*exp(-1j*2*pi/N).^(n'*k);
x=(Xk*exp(1j*2*pi/N).^(k'*n))/N;
subplot(4,1,1),stem(n,xn);
title('x(n)')
subplot(4,1,2),stem(n,abs(x));
title('IDFT|X(k)|')
subplot(4,1,3),stem(k,abs(Xk));
title('X(k)')
subplot(4,1,4),stem(k,angle(Xk));
title('arg|X(k)|')
输出:
4.思考题:
4.1**有限长序列
的离散傅里叶变换(DFT)与周期序列
的傅里叶级数(DFS)有何联系与区别**?
答:时域周期序列可看作是有限长序列x(n)的周期延拓;同理把频域周期序列
也看作是有限长序列X(k)的周期延拓。这样我们只要把DFS的定义式两边取主值区间,就得到了一个关于有限长序列的时频域对应的变换对——DFT。
4.2有限长序列的离散傅里叶变换(DFT)有何
特点?
答:
(1)适用于有限长序列
(2)遵循循环移位定理
(3遵循循环卷积定理
(4) 具有对称性。
3**有限长序列
的离散傅里叶变换(DFT)与 离散时间傅里叶变换(DTFT)** 有何
联系与区别?
答:X(k)是x(n)的离散时间傅立叶变换X(e^(jw))在区间[0,2π]上的N点等间隔采样。
DFT的变换区间长度N不同,对X(e^(jw))在[0,2π]区间上的采样间隔和采样点数也会不同,从而不同的N对应的DFT的变换结果不同。
参考资料:
http://wlsyzx.yzu.edu.cn/kcwz/szxhcl/kechenneirong/jiaoan/jiaoan3.htm