班级:学号:姓名
实验二FFT算法的MATLAB实现
(一)实验目的:
(1)掌握用matlab进行FFT在数字信号处理中的高效率应用。
(2)学习用FFT对连续信号和时域离散信号进行谱分析。
(二)实验内容及运行结果:
题1:若x(n)=cos(nπ/6)是一个N=12的有限序列,利用MATLAB计算它的DFT 并进行IDFT变换同时将原图与IDFT变换后的图形进行对比。
当求解IFFT变换中,采样点数少于12时,会产生什么问题。
程序代码:
N=12;
n=0:11;
Xn=cos(n*pi/6);
k=0:11;
nk=n'*k;
WN=exp(-j*2*pi/N)
WNnk=WN.^nk
XK=Xn*WNnk;
figure(1)
stem(Xn)
figure(2)
stem(abs(XK))
运行结果:
IFFT变换中,当采样点数少于12时图像如下图显示:
分析:由图像可以看出,当采样点数小于12时,x(n)的频谱不变,周期为6,而XK 的频谱图发生改变。
题2:对以下序列进行谱分析
132()()103()8470x n R n n n x n n
n =+≤≤⎧⎪
=-≤≤⎨⎪⎩
其他n
选择FFT 的变换区间N 为8和16点两种情况进行频谱分析,分别打印其幅频特
性曲线并进行对比、分析和讨论。
㈠ 程序代码:
x=ones(1,3);nx=0:2; x1k8=fft(x,8);
F=(0:length(x1k8)-1)'*2/length(x1k8); %进行对应的频率转换 stem(f,abs(x1k8));%8点FFT title('8点FFTx_1(n)'); xlabel('w/pi'); ylabel('幅度');
N=8时:
x=ones(1,3);nx=0:2;
x1k16=fft(x,16);
f=(0:length(x1k16)-1)'*2/length(x1k16); %进行对应的频率转换stem(f,abs(x1k16));%16点FFT
title('16点FFTx_1(n)');
xlabel('w/pi');
ylabel('幅度');
N=16时:
分析:对x1进行分析,两图像相似,N越大图像分辨率越高。
㈡程序代码:
①n1=0:3;
x1=n1+1;
n2=4:7;
x2=8-n2;
x=[x1 x2];
X2k8=fft(x,8);
f=(0:length(X2k8)-1)'*2/length(X2k8); %进行对应的频率转换figure(1)
stem(f,abs(X2k8));%8点FFT
title('8点FFTx_2(n)');
xlabel('w/pi');
ylabel('幅度');
N=8时:
②n1=0:3;
x1=n1+1;
n2=4:7;
x2=8-n2;
x=[x1 x2];
X2k8=fft(x,16);
f=(0:length(X2k8)-1)'*2/length(X2k8); %进行对应的频率转换figure(1)
stem(f,abs(X2k8));%8点FFT
title('8点FFTx_2(n)');
xlabel('w/pi');
ylabel('幅度');
N=16时:
分析:对x2进行分析,N=16比N=8的图像更清晰,分辨率越高。
题3:对以下周期序列进行谱分析:
3()cos
4
x n n π
=
选择FFT 的变换区间N 为8和16点两种情况进行频谱分析,分别打印其幅频特性曲线并进行对比、分析和讨论。
程序代码:
① xn=cos(pi*n/4);
X1k8=fft(x,8);
f=(0:length(X1k8)-1)'*2/length(X1k8); %进行对应的频率转换 stem(f,abs(X1k8));%8点FFT title('8点FFTx_1(n)'); xlabel('w/pi'); ylabel('幅度');
N=8时:
② xn=cos(pi*n/4); X1k16=fft(x,16);
f=(0:length(X1k16)-1)'*2/length(X1k16); %进行对应的频率转换 stem(f,abs(X1k16));%16点FFT title('16点FFTx_1(n)'); xlabel('w/pi'); ylabel('幅度');
N=16时:
分析::对x3进行分析,图像比较相似,N=16比N=8更清晰,分辨率越高。
题4:对模拟周期信号进行谱分析
5()cos 8cos16cos 20x t t t t πππ=++
选择采样频率Fs=64HZ ,对变换区间8,32,64N =三种情况进行谱分析,分别打印其幅频特性曲线并进行对比、分析和讨论。
提示:cos(8***)xnT pi n T =;T=1/fs;
X6K16=fftshift(X6K16); %将零频率移到频谱的中心
㈠当N=8程序代码: fs=64
T=1/fs;
xnT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); X1k8=fft(xnT,8);
f=(0:length(X1k8)-1)'*2/length(X1k8); %进行对应的频率转换 stem(f,abs(X1k8));%8点FFT
title('8点FFTx_1(n)');
xlabel('w/pi');
ylabel('幅度');
㈡当N=32程序代码:
fs=64
T=1/fs;
xnT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T);
X1k32=fft(xnT,32);
f=(0:length(X1k32)-1)'*2/length(X1k32); %进行对应的频率转换stem(f,abs(X1k32));%32点FFT
title('32点FFTx_1(n)');
xlabel('w/pi');
ylabel('幅度');
㈢当N=64程序代码:
fs=64
T=1/fs;
xnT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T);
X1k64=fft(xnT,64);
f=(0:length(X1k64)-1)'*2/length(X1k64); %进行对应的频率转换stem(f,abs(X1k64));%64点FFT
title('64点FFTx_1(n)');
xlabel('w/pi');
ylabel('幅度');
分析:随着N的增大,图像越清晰。