1、西 安 郵 電 學 院数字信号处理课内实验报 告 书系部名称 : 计算机系学生姓名 : 常成娟专业名称 : 电子信息科学与技术班 级 : 0603学号 : 04062095时间 : 2008-11-23实验二:用 FFT 作谱分析一、 实验目的:(1) 进一步加深 DFT 算法原理和基本性质的理解(因为 FFT 只是 DFT 的一种快速算法,所以 FFT 的运算结果必然满足 DFT 的基本性质) 。(2) 熟悉 FFT 算法原理和 FFT 子程序的应用。(3) 学习用 FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用 FFT。二、 实验步骤
2、:(1) 复习 DFT 的定义、性质和用 DFT 作谱分析的有关内容。(2) 复习 FFT 算法原理与编程思想,并对照 DITFFT 运算流图和程序框图,读懂本实验提供的 FFT 子程序。(3) 编制信号产生子程序,产生以下典型信号供谱分析用:=R4(n)1xn2,03847,n其 它3,0xnn其 它=cos(pi/4*n)4=sin(pi/8*n)5xn=cos(pi*8*t)+ sin(pi*16*t)+cos(20*pi*t)6t应当注意,如果给出的是连续信号 xa(t),则首先要根据其最高频率确定采样速率 fs 以及由频率选择采样点数 N,然后对其进行软件采样(即计算 x(n)=xa
3、(nT),0=n=N-1),产生对应序列 x(n)。对信号 x6(t),频率分辨率的选择要以能分辨开其中的三个频率对应的谱线为准则。对周期序列,最好截取周期的整数倍进行分析,否则有可能产生较大的分析误差。请实验者根据 DFT 的隐含周期性思考这个问题。(4) 编写主程序。下图给出了主程序框图,供参考。本实验提供 FFT 子程序和通用绘图子程序。调用 FFT 子程序(函数)计算信号的 DTF调用绘图子程序(函数)绘制X(k)曲线调用绘图子程序(函数)绘制时间序列波形图结束三、上机实验内容(1) 对 2 中所给出的信号逐个进行谱分析。下面给出针对各信号的 FFT 变换区间 N 以及对连续信号 的采
4、样频率 fs。6xt, , , , ,:N=8,161xn23xn45n:fs=64(hz), N=16,32,646t实验结果:1 =R4(n)xn原程序:n=0:7;x=1 1 1 1 0 0 0 0f1=fft(x,8)f2=fft(x,16)subplot(2,2,1)stem(n,x);axis(0 8 0 2)xlabel(n)ylabel(x1(n)title(x1 的波形)subplot(2,2,4)k=0:15stem(k,abs(f2);axis(0 16 0 5)xlabel(k)ylabel(|x1(k)|)title(x1(n)的 8 点 fft)subplot(2,
5、2,3)k=0:7stem(k,abs(f1);axis(0 10 0 5)xlabel(k)ylabel(|x1(k)|)title(x1(n)的 8 点 fft)得到的波形图如下:开始读入长度 N调用信号产生子程序产生试验信号2 1,03847,nx其 它原程序:n=0:7;x=1 2 3 4 4 3 2 1f1=fft(x,8)f2=fft(x,16)subplot(2,2,1)stem(n,x);axis(0 8 0 4)xlabel(n)ylabel(x2(n)title(x2的波形)subplot(2,2,4)k=0:15stem(k,abs(f2);axis(0 16 0 20)
6、xlabel(k)ylabel(|x2(k)|)title(x2(n)的8点fft)subplot(2,2,3)k=0:7stem(k,abs(f1);axis(0 10 0 20)xlabel(k)ylabel(|x2(k)|)title(x2(n)的8点fft)波形图:3 4,037,nx其 它原程序:n=0:7; x=4 3 2 1 1 2 3 4f1=fft(x,8)f2=fft(x,16)subplot(2,2,1)stem(n,x);axis(0 8 0 4)xlabel(n)ylabel(x3(n)title(x3 的波形)subplot(2,2,4)k=0:15stem(k,a
7、bs(f2);axis(0 16 0 20)xlabel(k)ylabel(|x3(k)|)title(x3(n)的 8 点 fft)subplot(2,2,3)k=0:7stem(k,abs(f1);axis(0 8 0 20)xlabel(k)ylabel(|x3(k)|)title(x3(n)的 8 点 fft)4 =cos(pi/4*n)xn原程序:n=0:7;x=cos(0.25*pi*n)f1=fft(x,8)subplot(2,2,1)stem(n,x);axis(0 8 -4 4)xlabel(n)ylabel(x4(n)title(x4 的波形)n=0:15x=cos(0.2
8、5*pi*n)f2=fft(x,16)subplot(2,2,2)stem(n,x);axis(0 16 -4 4)xlabel(n)ylabel(x4(n)title(x4 的波形)subplot(2,2,4)k=0:15stem(k,abs(f2);axis(0 16 0 20)xlabel(k)ylabel(|x4(k)|)title(x4(n)的 16 点 fft)subplot(2,2,3)k=0:7stem(k,abs(f1);axis(0 8 0 20)xlabel(k)ylabel(|x4(k)|)title(x4(n)的 8 点 fft)波形图:5 =sin(pi/8*n)x
9、n原程序:n=0:7;x=sin(pi*n)/8)f1=fft(x,8)subplot(2,2,1)stem(n,x);axis(0 8 -4 4)xlabel(n)ylabel(x5(n)title(x5 的波形)n=0:15x=sin(0.125*pi*n)f2=fft(x,16)subplot(2,2,2)stem(n,x);axis(0 16 -4 4)xlabel(n)ylabel(x5(n)title(x5 的波形)subplot(2,2,4)k=0:15stem(k,abs(f2);axis(0 16 0 20)xlabel(k)ylabel(|x5(k)|)title(x5(n
10、)的 16 点 fft)subplot(2,2,3)k=0:7stem(k,abs(f1);axis(0 8 0 20)xlabel(k)ylabel(|x5(k)|)title(x5(n)的 8 点 fft)波形图:6 =cos(pi*8*t)+ sin(pi*16*t)+cos(20*pi*t)xt原程序:Ts=1/64;n=0:15;Xa=cos(8*n*Ts*pi)+cos(16*n*Ts*pi)+cos(20*n*Ts*pi);f1=fft(Xa,16);subplot(3,2,1);stem(n,Xa);axis(0 15 -2 3);xlabel(n);ylabel(X6(n);
11、title(X6(n) N=16);%显示x6(n)N=16k=0:15subplot(3,2,2);stem(k,abs(f1);axis(0 16 0 15);xlabel(k);ylabel(|X6(k)|);title(X6(n) N=16 的16点FFT);%显示X6(n)的16点FFTn=0:31;Xb=cos(8*n*Ts*pi)+cos(16*n*Ts*pi)+cos(20*n*Ts*pi);f2=fft(Xb,32);subplot(3,2,3);stem(n,Xb);axis(0 32 -2 3);xlabel(n);ylabel(X6(n);title(X6(n) N=3
12、2);%显示x6(n)N=32subplot(3,2,4);stem(abs(f2);axis(0 32 0 20);xlabel(k);ylabel(|X6(k)|);title(X6(n) N=32 的32点FFT);%显示X6(n)的32点FFTn=0:63;Xc=cos(8*n*Ts*pi)+cos(16*n*Ts*pi)+cos(20*n*Ts*pi);f3=fft(Xc,64);subplot(3,2,5);stem(n,Xc);axis(0 64 -2 3);xlabel(n);ylabel(X6(n);title(X6(n) N=64);%显示x6(n)N=64subplot(
13、3,2,6);stem(abs(f3);axis(0 64 0 40);xlabel(k);ylabel(|X6(k)|);title(X6(n) N=64 的64点FFT);%显示X6(n)的64点FFT波形图:(2)令 ,用 FFT 计算 8 点和 16 点离散傅立叶变换,45()()xnxn,并根据 DFT 的对称性,由 求出 和kDFT()xk44()()DFTxn并与(1)中所得结果比较。提示(取 N=16 时,55()()xx, )44nN5()nxNn实验结果:n=0:7;x=cos(0.25*pi*n)+sin(0.125*pi*n)f1=fft(x,8)subplot(2,2
14、,1)stem(n,x);axis(0 8 -4 4)xlabel(n)ylabel(x7(n)title(x7的波形)n=0:15x=cos(0.25*pi*n)+sin(0.125*pi*n)f2=fft(x,16)subplot(2,2,2)stem(n,x);axis(0 16 -4 4)xlabel(n)ylabel(x7(n)title(x7的波形)subplot(2,2,4)k=0:15stem(k,abs(f2);axis(0 16 0 20)xlabel(k)ylabel(|x7(k)|)title(x7(n)的16点fft)subplot(2,2,3)k=0:7stem(k
15、,abs(f1);axis(0 8 0 20)xlabel(k)ylabel(|x7(k)|)title(x7(n)的8点fft)波形图:n=0:15;x=cos(0.25*pi*n)+sin(0.125*pi*n)f1=fft(x,16)Re=(f1+conj(f1)/2Im=(f1-conj(f1)/2subplot(2,2,1)stem(n,abs(Re);axis(0 16 0 20)xlabel(k)ylabel(|Re(x7(k)|)title(恢复后的 x4(k)subplot(2,2,2)stem(abs(Im);axis(0 16 0 20)xlabel(k)ylabel(|
16、Im(x7(k)|)title(恢复后的 x5(k)(3)令 ,重复(2)45()()xnjxnn=0:15;x=cos(0.25*pi*n)+j*sin(0.125*pi*n)f1=fft(x,16)subplot(2,2,2)stem(n,abs(f1);axis(0 16 0 10)xlabel(k)ylabel(|x8(k)|)title(x8(n)的 16 点 fft)subplot(2,2,1)k=0:7f2=fft(x,8)stem(k,abs(f2);axis(0 8 0 10)xlabel(k)ylabel(|x8(k)|)title(x8(n)的 8 点 fft)n=0:1
17、5;x=cos(0.25*pi*n)+j*sin(0.125*pi*n)f=fft(x,16)k(1)=conj(f(1)m=2:16k(m)=conj(f(16-m+2)fe=(f+k)/2fo=(f-k)/2xr=ifft(fe,16)xo=ifft(fo,16)/jsubplot(2,2,1)stem(n,xr);axis(0 16 -1 1)xlabel(n)ylabel(|x4(n)|)title(x4(n)的波形)subplot(2,2,2)stem(n,abs(fe);axis(0 16 0 10)xlabel(k)ylabel(|x8e(k)|)title(x4(n)的 16
18、点 fft)subplot(2,2,3)stem(n,xo);axis(0 16 -1 1)xlabel(n)ylabel(|x5(n)|)title(x5(n)的波形)subplot(2,2,4)stem(n,abs(fo);axis(0 16 0 10)xlabel(k)ylabel(|x8o(k)|)title(x5(n)的 16 点 fft)三、 实验心得体会通过本次实验,我进一步加深了对 DFT 的算法原理和基本性质的理解, FFT 只是 DFT 的一种快速算法,所以 FFT 的运算结果必然满足 DFT 的基本性质。进一步熟悉了 FFT 算法原理和 FFT 子程序的应用,学会了用 FFT 对连续信号和时域离散信号进行谱分析的方法,了解了可能出现的分析误差及其原因,以便在实际中正确应用 FFT。本次实验运用到了以前所学的数字信号处理知识,使我对 DFT 的定义、性质和用 DFT 作谱分析有了更深的理解。本次实验还运用了 FFT 的算法原理与编程思想。根据主程序给出的 DIT-FFT 运算流图和程序框图编写了 MATLAB 程序。总之,通过本次实验,使我熟悉了 MATLAB 的上机环境,也使我的实践动手能力有了更进一步的提高。