一种3072点fft运算的实现方法

文档序号:6374081阅读:303来源:国知局
专利名称:一种3072点fft运算的实现方法
技术领域
本发明涉及ー种FFT运算的实现方法。
背景技术
在宽带卫星通信系统中,为了有效提高系统容量,上行传输体制大多数会采用FDMA或MF-TDMA的体制。在这种情况下,由于上行包含多个载波,星上处理时必须首先完成多路频分信号的分离,然后进ー步完成各路信号的解调、译码等。多路信号分离时采用数字方式实现分路,在灵活性以及处理器的功耗和体积上都具有很大的优势。构成多路信号的信道间隔相等且均匀有序排列,数字分路可以采用多相阵列FFT滤波器组分路法。由于采样率设为30. 72MHz,分路间隔为IOKHz,因此需要利用3072点的DFT (离散 傅立叶变换)完成数字分路。若按照DFT变换的公式直接计算DFT的运算量与变换区间长度N的平方成正比,当N较大时,运算量相当巨大,N点DFT的乘法和加法次数均与N2成正比,这对于要求实时信号处理来说,必将对计算速度提出难以实现的要求。而快速傅立叶变换(FFT)通过各种算法可以使DFT的计算效率提高几个数量级,能够很好的应用于各种信号的实时处理技术。由于FPGA中有FFT的IPCore资源,直接引用能够简化编程,但是FFT的IPCore只能支持2N阶的FFT运算,因此3072点FFT运算必须采用混合基FFT实现。通常利用cooley-tukey算法完成3072点FFT的运算。cooley-tukey算法的原理如下0卩1'变换ズ[た]=£>灯[4 )]=[ズ(_^,た=O,I,·.·,iV —I
=0cooley-tukey算法将变换长度N分解为任意两个因子的乘积,N = N1XN2,将时域输入信号索引η表不成
O < . < N,- I,ハn = An, + Βη modTV \( I )
^ -
聯2]=|:《ザI产,< {=: :; (5)- exp(-プ2;τた / N)根据公式(5)得到该算法的具体实现步骤<1>输入序列根据公式(3)的映射关系,对其进行索引变换; <2>计算N2个变换长度为N1点的DFT ;<3>在第一级变换的输出上乘以相应的旋转因子W ΚΑ ;<4>计算N1个变换长度为N2点的DFT ;〈5>第二级的输出结果根据公式(4)的映射关系,对其进行索引变换。
针对3072点FFT,根据算法原理,首先利用因式分解(N = NI ΧΝ2),其中N = 3072,NI = 1024,Ν2 = 3,然后3072点输入数据(χ(0), χ(1),……,χ(3071))被分为三组,进行第一级的3组1024点FFT变换,输出结果乘以调整因子进行系数调整,最后进行第二级1024组3点FFT变换输出最終結果(Χ(0),X (1),……,Χ(3071))。其过程如图I所示。在具体实现时,按照算法结构可以采用并行结构实现。在并行实现结构中,3072点输入数据首先进行串并转换,然后对并行的3组数据分别进行3个1024点的FFT,运算结果经过系数调整后再依次进行1024次3点DFT运算,即得到了并行输出的3072点FFT运算结果,后面通过并串转换以及块交织(3X1024)调整,完成3072点数据的依次输出。其实现过程如图2所示。表I 1024 点 FFT IPCore 资源
FPGA 型号「4vsx55ffll48-12
FFT 点数1024
输入数据_位宽一14bit
Slices13%
Slice Flip 9%Flops4 input LUTs9%FIF016/RAMB16s1%DSP48s2%表I给出了 1024点FFT的IPcore的资源占用情況,由于占用资源较多,如果采用并行结构实现,需要利用三个1024点的FFT IPcore,使得整个结构的资源占用率较高,因此需要简化结构,減少资源的占用率
发明内容
本发明所要解决的技术问题是提供一种结构简单,资源占用少的3072点FFT运算的实现方法。本发明包括如下技术方案ー种3072点FFT运算的实现方法,包括如下步骤(I)对串行输入的3072点数据x(0),X(I),……,x(3071)进行第一次块交织,第一次块交织输出的数据对应于原始数据的第0,3,……,3069点、第1,4,……,3070点、第2,5,……,3071 点;(2)第一次块交织处理后的数据利用FPGA中的FFT运算IPcore依次进行1024点FFT运算,获得三组1024点FFT运算结果;(3)对三组1024点FFT运算结果分别乘以对应的调整因子得到运算结果X' (O),
V(I),……,V (3071);其中前1024个数据的调整因子的^3]x° = %°。72 = I,后2048个
数据的调整因子分别为EK172,……,K072XilKL……,<7f2;(4)对步骤(3)得到的运算结果进行第二次块交织,第二次块交织输出的数据顺序是 X' (0),x, (1024),X' (2048),......,V (1023),X' (2047),X' (3071);(5)对第二次块交织输出的数据进行串并变换,第二次块交织输出的数据经过串并变换后变成3路并行数据,第一路数据为X' (O),V (I),……(1023),第二路数据为 X' (1024),Xi (1025),……,V (2047),第三路数据为 X' (2048), Xi (2049),……,
V(3071);(6)对串并变换后的数据进行3点DFT运算,依次完成1024次3点DFT运算,并行输出三路数据,其中第一路数据依次对应3072点FFT运算结果的第0,1,……,1023点数据,第二路数据依次对应3072点FFT运算结果的第1024,1025,……,2047点数据,第三路数据依次对应3072点FFT运算结果的第2048,2049,……,3071点数据,(7)对3点DFT运算后的数据进行井串变换,此时数据顺序变为X(O),X(1024),X(2048),X(I),......,X(1023),X(2047),X(3071);(8)对并串变换后的数据进行第三次块交织实现3072点FFT运算结果的顺序输出,输出顺序为X(O) ,X(I), ......,,X(1024),X(1025),......,X(2047),X(2048),......,X(3071)。本发明与现有技术相比具有如下优点为了实现星上多路信号的解调,需要利用FFT运算完成分路算法,本发明通过采用串行结构的cooley-tukey算法,有效的实现了资源复用,减少了 FPGA中IPcore的使用量,大大减少了资源开销。


图I为基于cooley-tukey算法的3072点FFT运算的原理示意图;图2为现有的3072点FFT运算的实现方法示意图;图3为本发明的3072点FFT运算的实现方法示意图;图4为块交织(3X 1024)过程示意图;图5为3点DFT实现结构图。
具体实施例方式下面就结合附图对本发明做进ー步介绍。本发明利用FPGA中FFT的IPCore在实现3072点FFT的同时需要尽可能的降低星上的资源利用率。考虑到FFT的IPcore在Pipelined模式下支持连续输入,因此可以将第一级3组1024点FFT的输入数据调整顺序,依次进行1024点FFT运算,这样利用ー个IPcore就可以完成3组FFT运算。图3给出了这种串行的实现结构。在串行实现结构中,3072点输入数据利用块交织完成数据索引顺序的调整,经过调整后的数据依次进行1024点FFT运算,然后经过系数调整以及解交织,恢复数据顺序。最后同样经过3点的DFT运算以及块交织完成最終3072点FFT运算结果的顺序输出。串行的实现结构减少了 IPcore的使用数量,大大降低了资源利用率。最終形成如图3所示的串行处理过程,具体包括如下步骤(I)首先当3072点数据(x(0),x(l),……,x(3071))串行输入时,对数据进行块交 织(3X1024),以实现数据索引顺序的变化,交织输出数据对应于原始数据的第0,3,……,3069点、第1,4,……,3070点、第2,5,……,3071点,等价于将并行结构中分成的3组数据依次输出。图4给出了块交织的实现原理,在进行块交织时,都按照“列进行出”的原则进行交织,主要通过控制FPGA内部存储资源RAM的读写地址来实现,数据写入时写地址从0,1,2……3071顺序变化,当写满3072个数据吋,开始读数,读数据时读地址按照0,3,6……3069,1,4, 7……3070,2,5,8……3071的规律变化,此时输出数据就完成了“3X 1024”的块交织,图中给出了相应的读写地址变化规律。(2)交织输出数据依次送入1024点FFT IPcore,进行1024点FFT运算。(3) IPcore输出数据依次经过系数调整模块对三组FFT运算结果乘以对应的旋转因子,此时需要设置ー个计数器,其中前1024个数据不需要调整(调整因子KT3h0 = Ku = I),后面2048个数据则需要利用ROM中预存的2048个调整因子H……,巧ぼ,……,ぢぷ3x2)依次进行复数乘法完成系数调整,各个调整因子的计算公式如下旳=exp(づ2;rた/7V),其中N = 3072,k = 0,I.……,3072。调整后顺序输出第一级FFT运算的3072点运算结果X' (0),X' (I),……,V (3071)。接着数据需要进行相应的块交织(1024X3),输出X' (0),X' (1024),ぐ(2048),……,V (1023),
V(2047),X' (3071)。在进行块交织时,同样按照“列进行出”的原则进行交织。(4)经过串并变换,数据变成3路并行数据,第一路数据为X' (0),X' (I),......,
V(1023),第二路数据为X' (1024), (1025),……,V (204了),第三路数据为
V(2048), X; (2049),……(3071),3路数据并行送入3点DFT运算模块中,依次完成1024次3点DFT运算。第一次3点DFT运算的输入为X' (0),X' (1024),X' (2048),输出为 X(O),X (1024),X (2048);第二次 3 点 DFT 运算的输入为 X' (1),X/ (1025),(2049),输出为X(I),X(1025),X(2049);依次类推,第1024次3点DFT运算的输入为X' (1023),
V(2047),X' (3071),输出为 X(1023),X(2047),X(3071)。3点DFT运算可以根据DFT计算公式进行化简,采用流水线结构实现。例如对于输入3点数据x(n) (n = 0,1, 2),X(k) (k = 0,1, 2)表示3点DFT计算结果,具体计算公式如下2X[k] = DFT[x(n)] = [ x{n)W^,た=0,1’ 2
M=O将上式展开,得到X(O) = X (0) +X (I) +X (2);X(I) = X(0)+X(l)e_J2り3+X (2) eJ2り3= X (0) - (x (I) +X (2)) /2+0. 866 j (x (2) -x (I)) X ⑵=X(0)+Wl)eJ2"3+X(2)e-J2"3= X (0) - (x (I) +X (2)) /2-0. 866 j (x (2) -x (I))进ー步化简分别得到实部和虚部计算公式XEe (0) = xEe(0)+xEe(l)+xEe(2);XEe ⑴=xEe (0) - (xEe(l) +xEe ⑵)/2-0. 866 (xIm ⑵ _xIm (I));XEe ⑵=xEe (0) - (xEe(l) +xEe ⑵)/2+0. 866 (xIm ⑵ _xIm (I));Xlm (0) = Xlni(O)+Xlni ⑴+Xlni (2); Xlm(I) = xIm (0) - (xIm(l) +xIm ⑵)/2+0. 866 (xEe ⑵-xKe (I));Xlm (2) = xIm (0) - (xIm(l) +xIm (2)) /2-0. 866 (xEe (2) -xEe (I));其中数据除以2的运算可以使用移位来实现,而数据乘以0. 866的运算可以看作数据与固定因子的乘法,将0. 866转换成ニ进制数,然后使用两个固定因子的实数乘法器分别进行实部和虚部的运算,大大降低了资源占用率。图5给出了这种3点DFT的流水线实现结构。(5)经过3点DFT运算后,即完成了 3072点FFT的运算,此时并行输出三路数据,其中第一路数据依次对应3072点FFT运算结果的第0,1,……,1023点数据,第二路数据依次对应3072点FFT运算结果的第1024,1025,……,2047点数据,第三路数据依次对应3072点FFT运算结果的第2048,2049,……,3071点数据,需要进ー步调整输出顺序,于是再经过并串变换,此时数据顺序变为X(O),X(1024), X(2048),X(I),……,X(1023),X(2047), X(3071),最后经过块交织(3X1024)实现3072点FFT 运算结果的顺序输出(X(O),X(I),......,,X(1024),X(1025),......,X(2047),X(2048),......,X(3071))。上述各个步骤都是利用FPGA实现。表2给出了输入数据是14bit的复数时并行和串行两种实现结构的3072点FFT资源占用情况对比。可以看出,串行结构只増加了少量的RAM资源,却大大減少了其它的资
源占用量。表2资源占用情况对比实现结构并行结构串行结构
FPGA 型号4vsx55ffll48-124vsx55ff1148-12
FFT 点数30723072
输7^欠据位 ^ — 14bi「14bTT
Slices43%16%--;----
Slice Flip30%11%
Flops 4 input LUTs29%11%
FIFOl6/RAMB16s11%14%
DSP48s8%3%本发明未详细说明部分属本领域技术人员公知常识。
权利要求
1. ー种3072点FFT运算的实现方法,包括如下步骤(1)对串行输入的3072点数据X(O),X(I),……,χ(3071)进行第一次块交织,第一次块交织输出的数据对应于原始数据的第0,3,……,3069点、第1,4,……,3070点、第2,.5,……,3071点;(2)第一次块交织处理后的数据利用FPGA中的FFT运算IPcore依次进行1024点FFT运算,获得三组1024点FFT运算结果;(3)对三组1024点FFT运算结果分别乘以对应的调整因子得到运算结果X'(O),V(I),……,V (3071);其中前1024个数据的调整因子的
全文摘要
本发明公开了一种3072点FFT运算的实现方法,3072点输入数据利用块交织完成数据索引顺序的调整,经过调整后的数据依次进行1024点FFT运算,然后经过系数调整以及解交织,恢复数据顺序。最后同样经过3点的DFT运算以及块交织完成最终3072点FFT运算结果的顺序输出。本发明采用串行的实现结构,减少了FPGA中IPcore的使用数量,大大降低了资源利用率。
文档编号G06F17/14GK102831099SQ20121026446
公开日2012年12月19日 申请日期2012年7月27日 优先权日2012年7月27日
发明者许鹏飞, 樊宁波, 胡向晖 申请人:西安空间无线电技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1