您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第8章--FFT设计
第8章FFT设计第8章FFT设计8.1FFT的原理8.2FFT与蝶形运算8.3使用DSPBuilder设计FFT8.4在DSPBuilder中使用FFTIPCore第8章FFT设计8.1FFT的原理8.1.1快速傅立叶变换FFT对于一个N点有限长序列,其DFT变换可表示为10)()(NnnkNWnxkX其中:k=0,1,…,N-1;NNWπ2je第8章FFT设计假如、都为复数,计算N点序列的DFT共需要次复数乘法和次复数加法,在N较大时,计算量不可想象。可以发现,存在下列对称性和周期性:nkNnkNWW)(knNkNnNWW)(其中是的共轭。nkNW)(nkNWnkNW第8章FFT设计利用上述对称性和周期性,可以大大简化DFT的运算。同时,可以把较多点的DFT分解为多个较少点的DFT运算。由于DFT的运算量与成正比,减少DFT的点数可以大大减少DFT的总运算量。不断地继续分解得到的DFT,可以加快DFT的运算过程,这种DFT的快速计算方法,我们称为FFT。若分解是对输入序列进行处理,称为时间抽取DIT(DecimationInTime);反之,若分解是对输出序列进行处理,则称为频率抽取FIT(DecimationInFrequency)。第8章FFT设计用DIT方法,N点的DFT可以用下式计算:)()(21kXWXkXkN)()()2/(21kXWkXNkXkN其中k=0,1,2,…,(N/2)-1。可用图8-1来描述其运算的信号流图。由于该运算状似蝶形,故被称为蝶形运算。第8章FFT设计X2(k)X1(k)kNW-1X1(k)X2(k)kNW+X1(k)X2(k)kNW-图8-1DIT蝶形运算信号流图第8章FFT设计对于,可以一直分解到2点DFT。这样,离散傅立叶变换的运算量就大大减少了,这种DFT的快速算法就是FFT。图8-2显示了当N=8时DITFFT的信号流图。第8章FFT设计x(0)x(4)x(2)x(6)x(1)x(5)x(3)x(7)-1-1-108W28W08W28W-1-1-1-128W38W18W08Wx(0)x(4)x(2)x(6)x(1)x(5)x(3)x(7)-1-1-1-1图8-2N=8时FFT算法的信号流图第8章FFT设计8.1.2快速傅立叶反变换IFFTDFT是时域到频域的变换,同样也存在频域到时域的变换,即DFT的逆变换IDFT。对于频域上的抽样序列,其IDFT变换可表示为kXNWkXNWkXNnxNknkNNknkNDFT1)(1)(1)(1010其中:;n=0,1,…,N-1。NNWπ2je可以看到IDFT的运算可由DFT运算得到。对应与IDFT,也存在快速算法IFFT,这是由FFT来实现的。第8章FFT设计8.2FFT与蝶形运算仔细观察图8-2可以发现,对于N是2的幂次的FFT运算有大量的形如图8-3的运算,即FFT由蝶形运算构成,实现了蝶形运算,FFT就可以实现了。kNW图8-3蝶形运算第8章FFT设计由于蝶形运算涉及复数运算,较为复杂,DSPBuilder为能实现FFT模型的建构,专门引入了蝶形算子模块Butterfly,如图8-4。ButterflyabwAB图8-4Butterfly模块第8章FFT设计Butterfly模块可以完成复数有符号数的蝶形运算。对于输入信号(复数)a=x+jXb=y+jY蝶形运算系数:蝶形运算:)(j)(yYYvXYVyvxbWaA)(j)(yVYvXYVyvxbWaB第8章FFT设计8.3使用DSPBuilder设计FFT由于FFT的算法过于复杂,在以往的数字信号处理器上实现一个高速信号的FFT变换是不可想象的。数字信号处理器固有的串行(顺序)执行结构,对一个高速(与该处理器的主频相当)的信号序列进行FFT,是很难实现的。然而,在FPGA上实现时,可以采用并行分布式结构,实现一个实时FFT的难度就比较小了。第8章FFT设计8.3.18点DITFFT模型的建立在本节将介绍如何实现一个N=8的时间抽取FFT模型。按照第3章的流程,在Simulink中建立一个新模型。参照图8-2的结构,调用DSPBuilder模块完成DIT8FFT模型的绘制。模型如图8-5所示。第8章FFT设计图8-5DIT8FFT模型第8章FFT设计DIT8FFT模型中各个模块的参数设置如下:X模块:(Altbus)库:AlteraDSPBuilder中BusManipulation库参数“BusType”设为“signedInteger”参数“[numberofbits].[]”设为“8”XR、XR1、XR2、XR3、XR4、XR5、XR6、XR7模块:(Altbus)库:AlteraDSPBuilder中BusManipulation库参数“BusType”设为“signedInteger”参数“[numberofbits].[]”设为“16”第8章FFT设计XI、XI1、XI2、XI3、XI4、XI5、XI6、XI7模块:(Altbus)库:AlteraDSPBuilder中BusManipulation库参数“BusType”设为“signedInteger”参数“[numberofbits].[]”设为“16”ShiftTaps模块:(ShiftTaps)库:AlteraDSPBuilder中Storage库参数“NumberofTaps”设为“8”参数“DistanceBetweenTaps”设为“1”第8章FFT设计选择“UseDeicatedCircuitry”x0、x1、x2、x3、x4、x5、x6、x7模块:(Real=ImagtoComplex)库:AlteraDSPBuilder中ComplexSignals库参数“BusType”设为“SignedInteger”参数“[numberofbits].[]”设为“8”第8章FFT设计Constant、Constant1、Constant2、Constant3、Constant4、Constant5、Constant6、Constant7模块:(Constant)库:AlteraDSPBuilder中BusManipulation库参数“BusType”设为“signedInteger”参数“[numberofbits].[]”设为“8”参数“ConstantValue”设为“0”参数“SamplingPeriod”设为“-1”第8章FFT设计W0、W0_1、W0_2、W0_3模块:(ComplexConstant)库:AlteraDSPBuilder中ComplexSignals库参数“BusType”设为“signedInteger”参数“[numberofbits].[]”设为“8”参数“[].[numberofbits]”设为“0”参数“RealValue”设为“127”参数“ImaginaryValue”设为“0”第8章FFT设计butterfly000、butterfly001、butterfly002、butterfly003模块:(butterfly)库:AlteraDSPBuilder中ComplexSignals库参数“Inputbitwidth(a,b,W)”设为“8”参数“Outputbitwidth(A,B)”设为“16”参数“Outputlsbbit”设为“2”第8章FFT设计W0_6、W2_5、W0_4、W2_7模块:(ComplexConstant)库:AlteraDSPBuilder中ComplexSignals库参数“BusType”设为“signedInteger”参数“[numberofbits].[]”设为“16”参数“[].[numberofbits]”设为“0”对于W0_6、W2_5参数“RealValue”设为“1”参数“ImaginaryValue”设为“0”z对于W0_4、W2_7第8章FFT设计参数“RealValue”设为“0”参数“ImaginaryValue”设为“127”butterfly010、butterfly020、butterfly030、butterfly040模块:(butterfly)库:AlteraDSPBuilder中ComplexSignals库参数“Inputbitwidth(a,b,W)”设为“16”参数“Outputbitwidth(A,B)”设为“16”参数“Outputlsbbit”设为“2”第8章FFT设计W0_6、W2_5、W0_4、W2_7模块:(ComplexConstant)库:AlteraDSPBuilder中ComplexSignals库参数“BusType”设为“signedInteger”参数“[numberofbits].[]”设为“8”参数“[].[numberofbits]”设为“0”对于W0_8参数“RealValue”设为“127”参数“ImaginaryValue”设为“0”对于W2_10第8章FFT设计参数“RealValue”设为“0”参数“ImaginaryValue”设为“127”对于W1_9、W3_11参数“RealValue”设为“90”参数“ImaginaryValue”设为“90”X0、X1、X2、X3、X4、X5、X6、X7模块:(ComplextoReal-Imag)库:AlteraDSPBuilder中ComplexSignals库参数“BusType”设为“SignedInteger”参数“[numberofbits].[]”设为“8”第8章FFT设计在DIT8FFT模型中除了使用Butterfly模块进行蝶形运算外,还使用了有符号数到复数、复数到有符号数的转化,运算量是较大的。在模型中使用了移位寄存器来锁存输入序列,在每一个时钟都完成对当前输入序列前8个值的FFT操作。第8章FFT设计8.3.28点DITFFT模型的实现通过SignalCompiler,把上面的FFT模型转换成VHDL,在Quartus II中进行编译下载。图8-6显示了SynplifyPro的综合结果。第8章FFT设计XI3iSBFXI4iSBFXI5iSBFXI6iSBFXI7iSBFXRiSBFButterFlyZ1Butterfly000_dButterFlyZ1Butterfly001_dButterFlyZ1Butterfly002_dButterFlyZ0Butterfly010_dButterFlyZ0Butterfly020_dButterFlyZ0Butterfly030_dButterFlyZ0Butterfly100_dButterFlyZ0Butterfly200_dButterFlyZ0Butterfly300_dSShiftTapShiftTapsioXR1s[15:0][15:0]oXRs[15:0][15:0]oXI7s[15:0][15:0]oXI6s[15:0][15:0]oXI5s[15:0][15:0]oXI4s[15:0][15:0]oXI3s[15:0][15:0]iInputs[7:0][7:0]sclrpclock[7:0][7:0][7:0][7:0][7:0][7:0][7:0][7:0][7:0]xin[7:0][15:0]yout[15:0][7:0]xin[7:0][15:0]yout[15:0][7:0]xin[7:0][15:0]yout[15:0][7:0]xin[7:0][15:0]yout[15:0][7:0]xin[7:0][15:0]yout[15:0][23:16]xin[7:0][15:0]yout[15:0][23:16]xin[7:0][15:0]yout[15:0]clock1enasclr[7:0]areal[7:0]0*8aimag[7:0][7:0]breal[7:0]0*
本文标题:第8章--FFT设计
链接地址:https://www.777doc.com/doc-4360197 .html