资源描述:
《哈工大数字信号处理实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验一:用FFT作谱分析实验目的:(1)进一步加深DFT算法原理和基本性质的理解(因为FFT只是DFT的一种快速算法,所以FFT的运算结果必然满足DFT的基本性质)。(2)熟悉FFT算法原理和FFT子程序的应用。(3)学习用FFT对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。实验原理:DFT的运算量:一次完整的DFT运算总共需要次复数乘法和复数加法运算,因而直接计算DFT时,乘法次数和加法次数都和成正比,当N很大时,运算量很客观的。例如,当N=8时,DFT运算需64位复数乘法,当N=1024时,DFT运算需1048576次
2、复数乘法。而N的取值可能会很大,因而寻找运算量的途径是很必要的。FFT算法原理:大多数减少离散傅里叶变换运算次数的方法都是基于的对称性和周期性。(1)对称性(2)周期性由此可得这样:1.利用第三个方程的这些特性,DFT运算中有些项可以合并;2.利用的对称性和周期性,可以将长序列的DFT分解为短序列的DFT。前面已经说过,DFT的运算量是与成正比的,所以N越小对计算越有利,因而小点数序列的DFT比大点数序列的DFT运算量要小。快速傅里叶变换算法正是基于这样的基本思路而发展起来的,她的算法基本上可分成两大类,即按时间抽取法和按频率抽取法。我们最常用的是的情况,该情况下的变换成为基2
3、快速傅里叶变换。完成一次完整的FFT计算总共需要次复数乘法运算和次复数加法运算。很明显,N越大,FFT的优点就越突出。实验步骤(1)复习DFT的定义、性质和用DFT作谱分析的有关内容。(2)复习FFT算法原理与编程思想,并对照DIT-FFT运算流图和程序框图,读懂本实验提供的FFT子程序。(3)编制信号产生子程序,产生以下典型信号供谱分析用:(4)编写主程序。(5)按实验内容要求,上机实验,并写出实验报告。实验程序与结果:(1)对x1(n)进行FFT变换(N=8和N=16)clearall;N=4;%读入长度x=[1,1,1,1];%调用信号产生子程序产生实验信号n=0:N-1
4、;subplot(3,1,1);stem(n,abs(x));%调用绘图子程序(函数)绘制时间序列波形图title('原时间序列');N=8;%读入长度y1=fft(x,N);%调用FFT子程序(函数)计算信号的DFTn=0:N-1;subplot(3,1,2);stem(n,fftshift(abs(y1)));holdon;plot(n,fftshift(abs(y1)),'r--');%调用绘图子程序(函数)绘制
5、X(k)
6、曲线title('N=8');N=16;%读入长度y2=fft(x,N);%调用FFT子程序(函数)计算信号的DFTn=0:N-1;subplot(3
7、,1,3);stem(n,fftshift(abs(y2)));holdon;plot(n,fftshift(abs(y2)),'r--');%调用绘图子程序(函数)绘制
8、X(k)
9、曲线title('N=16');结果图形实验误差分析:理论FFT频谱为一个抽样信号,由图形看出,随着采样率的提高,得到的FFT频谱分辨率就越高,当N趋于无限时频谱包络接近理论的抽样函数。(2)对x2(n)进行FFT变换(N=8和N=16)clearall;x=[1,2,3,4,4,3,2,1];%调用信号产生子程序产生实验信号N=8;%读入长度n=0:N-1;subplot(3,1,1);stem(
10、n,abs(x));%调用绘图子程序(函数)绘制时间序列波形图title('原时间序列');N=8;%读入长度y1=fft(x,N);%调用FFT子程序(函数)计算信号的DFTn=0:N-1;subplot(3,1,2);stem(n,fftshift(abs(y1)));holdon;plot(n,fftshift(abs(y1)),'r--');%调用绘图子程序(函数)绘制
11、X(k)
12、曲线title('N=8');N=16;%读入长度y2=fft(x,N);%调用FFT子程序(函数)计算信号的DFTn=0:N-1;subplot(3,1,3);stem(n,fftshift
13、(abs(y2)));holdon;plot(n,fftshift(abs(y2)),'r--');%调用绘图子程序(函数)绘制
14、X(k)
15、曲线title('N=16');结果图形实验误差分析:理论FFT频谱为一个抽样函数平方的信号,由图形看出,随着采样率的提高,得到的FFT频谱分辨率就越高,当N趋于无限时频谱包络接近理论的抽样函数。(3)对x3(n)进行FFT变换(N=8和N=16)clearall;x=[4,3,2,1,1,2,3,4];%调用信号产生子程序产生实验信号N=8;%读入长度