数字信号处理实验.doc:..数字信号处理实验报告(基于MATLAB语言)班级:05211101学号:1120111260姓名:黄咲实验1基2--FFT的原理及具体实现方法。编程实现基2-FFT算法。。二、实验设备与环境计算机、MATL/\B软件环境。三、实验基础理论FFT是DFT的一种快速算法,能使DFT的计算大大简化,运算时间缩短。FFT利用了"尹的三个固有特性,即对称性、周期性和可约性,将长序列的DFT分解为短序列的DFT,合并了DFT运算中的某些项,从而减少了DFT的运算量。FFT算法基本上可以分为两大类,即按时间抽取法和按频率抽取法。在实现FFT算法时,要重点考虑两个问题,注意数据的读取和存储:(1)输入输出的排序;(2)碟形运算的实现。按时间抽取算法中输入反序输出顺序,按频率抽取算法屮输入顺序输出反序;运算过程中的每一级都由N/2个碟形运算构成,每一个碟形运算单元中,两个节点变量运算后得到的结果为下一列相同位置的节点变量,而和其他节点变量无关,可以采用原位运算,节省存储单元。另外,碟形运算屮的复系数严可以存储为能及时查阅的系数表,这样可以节约计算量,但是需要N/2个复数存储器。MATLAB中提供了用于计算FFT的函数fft,可将实验屮所得到的结果与利用MATLAB中fft函数计算的结果相比较,以此验证结果的正确性。H0)♦双4)•H2)•H6)♦图1-1N=8按时间抽取的基-2FFT运算流图Aq()itinX[3|X【7]图1-2N=8按频率抽取的基-2FFT运算流图・*[7]卫2]-.,151四、-FFT算法。给定一个8点序列,采用编写的程序计算其DFT,并与MATLAB中fft函数计算的结果相比较,以验证结果的正确性。实验过程与实验结果:设序列为{0,1,2,3,4,5,6,7}①编程实现序列长度为N二8的按时间抽取的基2-FFT算法%输入数据并计算常塑xn=[0,1,2,3,4,5,6,7];M=nextpow2(1ength(xn)),N=2"M,form二0:N/2T;WN(m+l)=exp(-j*2*pi/N)m;endA=[xn,zeros(1,N~length(xn))];%数据倒序操作J=0;forI=0:N-l;ifT<J;T=A(I+1);A(I+1)=A(J+1);A(J+1)=T;endK=N/2;whileJ>=K;J二J-K;K二K/2;endJ二J+K;end%分级按序依次进行蝶形运算forL=1:M;B=2^(L-1);forR=O:B-1;P=2"(M-L)*R;forK二R:2'L:N-2;T二A(K+l)+A(K+B+1)*WN(P+1);A(K+B+1)=A(K+1)-A(K+B+1)*WN(P+1);A(K+1)=T;endendendXk=A运行结果为:Xk=Columns1through2&0000-+-+-4・0000+-——--—②调用函数fft计算:>>fftxn=fft(xn,N)运行结果为:fftxn=-+-+ -+—・—---:两种计算方法结果一样,结果正确。=8的按频率抽取的基2-FFT算法。给定一个8点序列,采用编写的程序计算其DFT,并与MATLAB中fft函数计算的结果相比较,以验证结果的正确性。实验过程与实验结果:设序列为{7,6,5,4,3,2,1,0}①编程实现序列长度为N二8的按频率抽取的基2-FFT算法xn=[7,6,5,4,3,2,1,0];N=8;M=log2(N);forkl=0:M-lD=2Akl;E=N/2^kl;F=N/2"(kl+1);G=N/2"(kl+1)-1;Wn=exp(-j*2*pi/E);forg=l:DHl=(g-1)*E;H2=(g-1)*E+F;forr=0:G;k=r+l;xn(k+Hl)=xn(k+Hl)+xn(k+H2);xn(k+H2)=[xn(k+Hl)-xn(k+H2)-xn(k+H2)]*Wn^r;endendendnl=fliplr(de
数字信号处理实验 来自淘豆网m.daumloan.com转载请标明出处.