实验4 DFS 、DFT 与FFT
一、实验内容:
1、阅读并输入实验原理中介绍的例题程序,观察输出的数据和图形,结合基本原理理解每一条语句的含义。
2、已知某周期序列的主值序列为x(n)=[0,1,2,3,2,1,0],编程显示2个周期的序列波形。要求:
① 用傅里叶级数求信号的幅度谱和相位谱,并画出图形 ② 求傅里叶级数逆变换的图形,并与原序列进行比较。
程序清单: N=7;
xn=[0,1,2,3,2,1,0]; xn=[xn,xn]; n=0:2*N-1; k=0:2*N-1;
Xk=xn*exp(-1i*2*pi/N).^(n'*k); x=(Xk*exp(1i*2*pi/N).^(n'*k))/N; subplot(2,2,1);stem(n,xn);
title('x(n)');axis([-1,2*N,1.1*min(xn),1.1*max(xn)]); subplot(2,2,2);stem(n,abs(x));
title('IDFS|X(k)|');axis([-1,2*N,1.1*min(x),1.1*max(x)]); subplot(2,2,3),stem(k,abs(Xk));
title('|X(k)|');axis([-1,2*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,2*N,1.1*min(angle(Xk)),1.1*max(angle(Xk))]);
课程名称 数字信号处理 实验成绩 指导教师 王丽霞
实 验 报 告
院系 信息工程学院 班级 09通信一班 学号 090110009 姓名 张莹 日期 2011.12.22
123
x(n)
5
10
IDFS|X
(k)|
5
1015|X (k)|
5
10
-2
-1012arg|X (k)|
3、已知有限长序列x(n)=[1,0.5,0,0.5,1,1,0.5,0],要求: ① 求该序列的DFT 、IDFT 的图形; 程序清单:
xn=[1,0.5,0,0.5,1,1,0.5,0]; N=length(xn); n=0:N-1; k=0:N-1;
Xk=xn*exp(-1i*2*pi/N).^(n'*k); x=(Xk*exp(1i*2*pi/N).^(n'*k))/N; subplot(2,2,1);stem(n,xn);
title('x(n)');axis([-1,N,1.1*min(xn),1.1*max(xn)]); subplot(2,2,2);stem(n,abs(x));
title('IDFT|X(k)|');axis([-1,N,1.1*min(x),1.1*max(x)]); subplot(2,2,3),stem(k,abs(Xk));
title('|X(k)|');axis([-1,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,N,1.1*min(angle(Xk)),1.1*max(angle(Xk))])
0.20.40.60.81
0.20.40.60.81
2
4
6
8
1
234|X
(k)|
2468
-2
-1012arg|X (k)|
② 用FFT 算法求该序列的DFT 、IDFT 的图形; 程序清单:
xn=[1,0.5,0,0.5,1,1,0.5,0]; N=length(xn);
subplot(2,2,1);stem(n,xn); title('x(n)'); k=0:N-1; Xk=fft(xn,N);
subplot(2,1,2);stem(k,abs(Xk)); title('Xk=DFT(xn)'); xn1=ifft(Xk,N);
subplot(2,2,2);stem(n,xn1);
title('x(n)=IDFT(Xk) ')
1234567
X k=DFT(xn)
③ 假定采用频率Fs=20Hz ,序列长度N 分别取8、32和64,用FFT 计算其幅度谱和相位谱。
程序清单:
Ts=0.05;C=[32,64,512]; for r=0:2;
N=C(r+1); n=0:N-1;
xn=[1,0.5,0,0.5,1,1,0.5,0,zeros(1,N-8)]; D=2*pi/(N*Ts);
k=floor(-(N-1)/2:(N-1)/2); X=fftshift(fft(xn,N));
subplot(3,2,2*r+1);plot(k*D,abs(X)); subplot(3,2,2*r+2);stairs(k*D,angle(X)); end
-100-50
50
100
024
6-100-50
50
100
-50
5-100-50
50
100
024
6-100-50
50
100
-50
5
-100
-50
50
100
024
6-100
-50
50
100
-50
5
4、已知一个无限长序列x(n)=0.5n (n ≥0),采样周期Ts=0.2s ,要求序列长度分别取8、32和64,用FFT 求其频谱。 程序清单:
Ts=0.2;C=[8,32,64]; for r=0:2; N=C(r+1); n=0:N-1; xn=0.5.^n;
D=2*pi/(N*Ts);
k=floor(-(N-1)/2:(N-1)/2); X=fftshift(fft(xn,N));
subplot(3,2,2*r+1);plot(k*D,abs(X)); axis([-80,80,0,3]);
subplot(3,2,2*r+2);stairs(k*D,angle(X)); axis([-80,80,-1,1]); end
-50
50
012
3-50
50
-10
1-50
50
012
3-50
50
-10
1
-50
50
12
3-50
50
-1
1
二、思考题:
① 离散傅里叶级数与连续性周期信号的傅里叶级数有何不同?周期序列的频谱有何特点?
答:傅里叶级数仅有N 个独立的谐波分量,展成离散傅立叶级数时,只能取k=0~N-1的N 个独立的谐波分量,而连续性周期信号的傅里叶级数由无穷多个与基波频率成整数倍的谐波分量叠加而成。
周期序列的频谱特点:以N 为周期的周期序列的频谱 X(k)
也是一个以N 为周期的周期序列。
② DFS 、DFT 、FFT 有何联系?
答:DFS 是求周期序列(周期为N)的离散傅里叶级数 , 也是一个以N 为周期的周期序列,
DFT 是求有限长序列的离散傅立叶变换X(k),而X(k)是 的主值序列,也就是说对DFS 的变换结果只取0~N-1的序列值就得到DFT 的变换。FFT 只是DFT 的一种快速高效的算法,它适用序列长度很大时,使用其可以大大缩短运算时间。