FFT分支计算方法及装置 【技术领域】
本发明涉及数字信号处理领域,特别涉及FFT(Fast Fourier Transform,快速傅立叶变换)分支计算方法及装置。
背景技术
在数字信号处理的发展中,许多算法如相关、滤波、谱估计、卷积等都阿以化为离散傅立叶变换(DFT)来实现,因此DFT是处理数字信号,如:图形、语音及图像等领域的重要变换工具。但直接计算DFT的计算量与变换区间长度N的平方成正比,把N点DFT分解为几个较短DFT,可使乘法次数大大减少,则有了快速傅立叶算法。快速傅立叶变换(FFT)是DFT的快速算法,它的提出,大大减少了计算量,从根本上确立了傅立叶变换的重要地位,成为数字信号处理中的核心技术之一,广泛应用于雷达、观测、跟踪、高速图像处理、保密无线通信和数字通信等领域。
FFT算法,就是不断地把长序列的DFT分解成几个短序列的DFT,并利用旋转因子的周期性和对称性来减少DFT的运算次数。FFT算法可分为两大类:一类是针对处理数据点数N等于2的整数次幂的算法,如基2算法、基4算法、实因子算法和分裂算法等;另一类是N不等于2的整数次幂算法。基于对FFT在硬件实现时的综合考虑,现有FFT算法的设计方案基本上都是针对于第一类算法。IFFT和FFT的硬件设备一样,仅在算法上将旋转因子取共轭即可。
FFT实现单元中存储器是必不可少的单元,蝶形运算数据的输入输出和中间结果的存储都要经过存储器,因此它们的频繁读写操作对整个FFT处理速度影响较大,所以FFT的运算速度和占用的存储单元是设计中重点考虑的方面。FFT实现的设计方案一般有顺序处理、级联处理、并行处理和阵列处理。顺序处理每次运算仅用一个蝶形单元,处理方式简单,但运算速度较慢,所以现有技术普遍采用并行处理、级联处理或阵列处理,但所占用的硬件资源较多。通常,采用“乒乓操作”来提高计算速度如图1所示,首先将数据从存储器1中读出经蝶形运算单元处理后,将处理后数据存入存储器2,完成一级蝶形运算,然后将存入存储器2的数据读出经蝶形运算单元处理后,将处理后数据存回存储器1,完成另一级蝶形运算,如此往复,直到处理完所有级蝶形运算,把乒乓操作模块当作是一个整体,站在这个模块的两端看数据,输入数据流和输出数据流是连续不断的,没有停顿,因此非常适合对数据口进行流水线式处理。对于基二的FFT运算,通常,采用两块双口存储器来实现乒乓操作,如图2所示,数据从端口B读出双口存储器的同时,经过蝶形运算单元计算后的数据写入预定地址,数据写入由控制模块统一控制,两块双口存储器可在保证进入蝶形运算单元的数据可同时到达,但是,两块双口存储器导致占用了更多硬件资源,且控制方法复杂,影响了FFT运算整体速度。
【发明内容】
为解决现有FFT分支计算使用两块双口存储器,占用资源较多且运算控制方法复杂使FFT运算整体速度不高的问题,本发明提出了一种FFT分支计算方法及装置,本发明采用一块双口存储器,并对其读出数据和写入数据进行精确控制,完成了对蝶形单元运算结果数据的原位存储,即运算前数据的存储位置和运算结束对应结果数据的存储位置相同。
一种FFT分支计算方法,其特征在于,包括以下步骤:
S101:将分块后数据串行写入双口存储器;
S102:从双口存储器串行读出数据并进行延时处理,使得需进行蝶形运算的数据同时到达;
所述延时处理使串行读出的数据能够并行并同时到达蝶形运算单元;
所述读出数据方法为:
S102A:计算或获取支路点数m=N/K;
S102B:根据支路点数选择地址宽度w,地址宽度w为log2m位;
S102C:当当前级数j小于等于地址宽度w时,不进行支路交叉读数,方法为:首先确定数据首地址,读数;然后首地址累加1,并根据级数进行地址交换,再读数,依次循环,直至读完当前级数所有支路点数数据;
所述地址交换为地址宽度w的最低位与其前面Y位进行交换,所述Y等于j-1;
S102D:当当前级数j大于地址宽度w时,进行支路选择和顺序读数,并同时送入同一蝶形运算单元;
所述支路选择方法为:第一个未被占用支路与第一个未被占用支路+2j-w-1的支路;
所述顺序读数为从首地址开始每次累加1的地址中读数;
以上步骤中,在读数之后将读数地址依次缓存于寄存器中;
其中,N为计算点数,M为级数,K为支路数,j为当前级数,1≤j≤M;
S103:进行蝶形运算;
S104:对蝶形运算结果做延时处理,并向双口储存器串行写入数据,实现原位存储,完成一级分支运算;
所述延时处理使蝶形运算得出的并行数据能按其读出顺序串行地输出;
所述写入数据的地址为读数之后依次缓存于寄存器中的地址;
所述写入数据的方法还可以为:
S104A:计算支路点数m=N/K;
S104B:根据支路点数选择地址宽度w,地址宽度w为log2m位;
S104C:当当前级数j小于等于log2m时,不进行支路交叉写数,方法为:首先确定数据首地址,写数;然后首地址累加1,并根据级数进行地址交换,再写数,依次循环,直至写完当前级数所有支路点数数据;
所述地址交换为地址宽度w的最低位与其前面Y位进行交换,所述Y等于j-1
S104D:当当前级数j大于w时,进行支路交叉写,方法为:将蝶形运算单元的数按组,同时写入两两对应的支路存储器;
所述两两对应的存储器为读数时的存储器;
所述写入两两对应的支路存储器的顺序为从首地址开始每次累加1;
其中,N为计算点数,M为级数,K为支路数,j为当前级数,1≤j≤M。
一种FFT分支计算装置,包括蝶形运算单元13,其特征在于,还包括一块双口存储器11、二块选择控制模块12和14;
所述选择控制模块12和14还包括延时触发模块和地址选择模块;
所述双口存储器11与选择控制模块12和14相连,实现原位存储和流水读数;
所述选择控制模块12从双口存储器11读取数据,串并变换后,发送给蝶形运算单元13,使得进行每次蝶形运算的数据同时到达蝶形运算单元;
所述读取数据的方法如S 102所述;
所述选择控制模块14接收蝶形运算单元13数据,并串变换后向双口存储器11写入数据,实现数据原位存储;
所述写入数据的方法如S104所述;
一种FFT运算方法,其特征在于,包括以下步骤:
S201:对变换前数据进行整序分块,即对数据进行倒序排列并根据分支数对数据平均分块;
S202:在接口时钟控制下,开始对各分块数据写入对应分支,并做分支计算,
在写入完毕后,使能时钟选择模块,使其输出时钟为功能时钟,使与时钟选择模块相连的各分支计算模块在功能时钟信号控制下开始分支运算;
S203:各分支对写入的数据按上述分支计算方法进行逐级分支计算;
第一级蝶形运算完毕后,然后才开始下一级蝶形运算,即各分支存储器中的数据一次全部读出后并重新写入完毕,再开始下一次读出操作。如此循环,直至各级蝶形运算完毕,以中断信号结束运算;
S204:计算完成,在接口时钟控制下,拼接各块存储器有效数据地址后输出;
使能时钟选择模块,使其输出时钟为接口时钟,各支路模块在接口时钟信号控制下;
一种FFT运算装置,其特征在于,包括数据整序模块21、时钟选择模块23、多个分支计算模块10和拼接数据模块22;
所述数据整序模块21对FFT变换前数据进行整序分块,即对数据进行到序排列并根据分支数对数据平均进行分块;
所述时钟选择模块23可选择功能时钟和接口时钟,功能时钟用于锁定写入装置,启动和完成FFT运算,接口时钟用于,并向FFT运算装置内写入数据和从FFT运算装置读出数据;
所述分支计算模块10包括一块双口存储器和二块选择控制模块,用于计算一个分支内存储的数据,可以调用与其对应分支模块中地数据;
所述拼接数据模块22用于将分支计算模块10计算的结果数据按存储的有效地址进行拼接,然后串行输出。
本发明采用一块双口存储器,并对其读出数据和写入数据进行精确控制,完成了对蝶形单元运算结果数据的原位存储,即运算前数据的存储位置和运算结束对应结果数据的存储位置相同,本发明极大节省了硬件资源的占用情况,减少整个FFT处理装置面积,且能够保持FFT运算速度不受影响。
【附图说明】
图1是乒乓操作原理框图;
图2是现有两块双口存储器FFT支路运算模块;
图3是本发明FFT分支计算流程图;
图4是本发明FFT分支计算装置;
图5是本发明FFT运算流程图;
图6是本发明FFT运算装置;
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明一种FFT分支计算方法及装置作进一步详细说明。
本发明的FFT运算级数和分支数计算如下:
运算级数为M=log2N;
分支数为K=N×M×6/T;
其中,N为计算点数,T为总要求时间,由时钟个数计算得到,时钟个数由对系统运算速度进行评估获得。
本实施例以TD-LTE(TD-SCDMA Long TermEvolution)系统为例,TD-LTE系统规定的计算点数范围在128(27)点到4096(212)点之间,由基二类FFT/IFFT完成,最大吞吐量为:在1ms内应完成14个2048点或是6个4096点FFT/IFFT运算。
假如设置时钟周期都为5ns,以最大吞吐量在1ms内应完成6个4096点基二FFT/IFFT运算为例,为提升运算速度,评估后采用8个支路,每个支路12级蝶形运算。
FFT运算步骤(如图5)包括:
S1:将需计算的数据点做倒序处理并按支路数平分,在接口时钟控制下由端口A分别写入支路模块,本实施例4096个数据,8个支路,每个支路写入512点;
S2:在功能时钟控制下,各支路开始分支计算,计算方法为(如图3);
S2-1:将分块后数据串行写入双口存储器;
S2-2:从双口存储器串行读出数据并进行延时处理,使得需进行蝶形运算的数据同时到达;
所述延时处理使串行读出的数据能够并行并同时到蝶形运算单元;
所述读出数据方法为:
S2-2A:计算支路点数m=N/K
S2-2B:根据支路点数选择地址宽度w,地址宽度w为log2m位;
S2-2C:当当前级数j小于等于log2m时,不进行支路交叉读数,方法为:首先确定数据首地址,读数;然后首地址累加1,并根据级数进行地址交换,再读数,依次循环,直至读完当前级数所有支路点数数据;
所述地址交换为地址宽度w的最低位与其前面Y位进行交换,所述Y等于j-1
S2-2D:当当前级数j大于地址宽度w时,进行支路选择和顺序读数,并同时送入同一蝶形运算单元;
所述支路选择方法为:第一个未被占用支路与第一个未被占用支路+2j-w-1的支路;
所述顺序读数为从首地址开始每次累加1的地址中读数。
以上步骤中,在读数之后将读数地址依次缓存于寄存器中。
其中,N为计算点数,M为级数,K为支路数,j为当前级数,1≤j≤M;
S2-3:进行蝶形运算;
S2-4:对蝶形运算结果做延时处理,并向双口储存器串行写入数据,实现原位存储,完成一级分支运算
所述延时处理使蝶形运算得出的并行数据能按其读出顺序串行地输出;
所述写入数据的地址为读数之后依次缓存于寄存器中的地址。
作为另一优选实施方式,所述写入数据的方法还可以为:
S2-4A:计算支路点数m=N/K
S2-4B:根据支路点数选择地址宽度w,地址宽度w为log2m 位;
S2-4C:当当前级数j小于等于log2m时,不进行支路交叉写数,方法为:首先确定数据首地址,写数;然后首地址累加1,并根据级数进行地址交换,再写数,依次循环,直至写完当前级数所有支路点数数据;
所述地址交换为地址宽度w的最低位与其前面Y位进行交换,所述Y等于j-1
S2-4D:当当前级数j大于w时,进行支路交叉写,方法为:将蝶形运算单元的数按组,同时写入两两对应的支路存储器;
所述两两对应的存储器为读数时的存储器;
所述写入两两对应的支路存储器的顺序为从首地址开始每次累加1;
其中,N为计算点数,M为级数,K为支路数,j为当前级数,1≤j≤M。
S3:所有级数运算结束后,产生中断信号;
S4:使能时钟选择模块,使各分支输入时钟为接口时钟,并在该时钟信号控制下,将支路模块中的结果数据按存储的有效地址进行拼接,然后串行输出,完成FFT变换。
一种FFT运算装置,如图6所示,包括数据整序模块21、时钟选择模块23、多个分支计算模块10和拼接数据模块22;
所述数据整序模块21对FFT变换前数据进行整序分块,即对数据进行倒序排列并根据分支数对数据平均进行分块;
所述时钟选择模块23可选择功能时钟和接口时钟,功能时钟用于锁定写入装置,启动和完成FFT运算,接口时钟用于,并向FFT运算装置内写入数据和从FFT运算装置读出数据;
所述分支计算模块10(如图4所示)用于计算一个分支内存储的数据,可以调用与其对应分支模块中的数据,包括蝶形运算单元13,一块双口存储器11、二块选择控制模块12和14
所述选择控制模块12和14还可包括延时触发模块和地址选择模块。
所述双口存储器11与选择控制模块12和14相连,实现原位存储和流水读数
所述选择控制模块12从双口存储器11读取数据,串并变换后,发送给蝶形运算单元13,使得进行每次蝶形运算的数据同时到达蝶形运算单元;
所述读取数据的方式如S2-2所述;
所述选择控制模块14接收蝶形运算单元13数据,并串变换后向双口存储器11写入数据,实现数据原位存储;
所述写入数据的方式如S2-4所述;
所述拼接数据模块22用于将分支计算模块10计算的结果数据按存储的有效地址进行拼接,然后串行输出。
IFFT运算与FFT运算所采用的硬件设备相同,只是在运算启动运算时,对控制寄存器配置,在运算时对旋转因子取共轭即可。
当设置时钟周期都为5ns时,以8条独立并行支路完成6个4096点FFT的情况为:硬件运行时间为(4096/8)*12*6=36864≈40000个时钟周期;数据导入和导出存储器时间为4096*2*6=49152≈50000个时钟周期(即总的处理时间约为0.45ms)。仅为要求时间的一半左右就可完成相应运算,且硬件资源占用情况为:双口存储器共8块,1块只读存储器,8个蝶形单元。所以本发明大大减少了整个FFT/IFFT运算周期和硬件实现装置的面积。
本领域技术人员显然清楚并且理解,本发明方法所举的以上实施例仅用于说明本发明,而并不用于限制本发明。虽然通过实施例有效描述了本发明,本领域技术人员知道,本发明存在许多变化而不脱离本发明的精神,在不背离本发明的精神及其实质的情况下,本领域技术人员当可根据本发明方法做出各种相应的改变或变形,但这些相应的改变或变形均属于本发明的权利要求保护范围。