LTE系统中FFT的实现
在数字信号处理中,离散傅里叶变换(DFT)是常用的变换方法,它在各种数字信号处理系统中扮演着重要的角色。快速傅里叶变换(FFT)[1-2]是离散傅里叶变换的快速算法,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅里叶变换的算法进行改进获得的,两者都是为了将信号变换到频域并进行相应的频谱分析。对于实时性要求很强的信号处理来说,运算速度对整个处理的影响是显而易见的。因为FFT拥有很高的运算能力,使其在无线通信和数字通信、高速图像处理、匹配滤波等领域得到极为广泛的应用。
LTE作为准4G技术,以正交频分复用OFDM和多输入多输出MIMO技术为基础,下行采用正交频分多址(OFDM)技术,上行采用单载波频分多址(SC-FDMA)技术,在20MHz频谱带宽下能够提供下行100Mb/s和上行50Mb/s的峰值速率[3]。
频域分析比时域分析更优越,不仅简单,且易于分析复杂信号[4]。在LTE系统中,FFT算法主要应用于基带信号生成、信号的接收和检测等,将时域信号转移到频域进行处理。
其中,x(n)为复数序列,WNkn和X(K)也为复数,因此每计算一个X(K)值,需要进行N次复数乘法运算和N-1次复数加法运算。而X(K)共有N个点,所以完成整个DFT运算需要进行N2次复数乘法和N(N-1)次复数加法运算,当N很大时,运算量相当可观。然而对于实时性很强的信号处理来说,如满足其要求,运算速度就太高了。利用旋转因子WNkn的对称性、周期性和可约性,可以使DFT运算中的有些项合并,将长序列的DFT分解为几个短序列的DFT,从而大大减少运算次数。FFT算法可以分为时间抽取法和频域抽取法两大类。频域抽取法的运算特点与时间抽取法的基本相同,不同之处是频域抽取法的蝶形运算是先加后乘,时间抽取法的蝶形运算是先乘后加;频域抽取的输入序列是自然顺序,输出序列是倒序,而时间抽取法的输入序列是倒序,输出序列是自然顺序。
假设输入序列x(n)长度为N=2M,M是正整数。如果不满足这个条件,在序列尾部人为地加上若干零值点,使其达到这一要求。将序列x(n)按n的奇偶分解为两个N/2点的子序列:
2 FFT算法的DSP实现
2.1 硬件
TMS320C6000系列DSP是TI公司推向市场的高性能DSP,综合了目前性价比高、功耗低等优点。TMS320C64系列提高了时钟频率,在体系结构上采用了VelociTI甚长指令集VLIW(Very Long InstrucTIon Word)结构[5],芯片内有8个独立功能单元的内核,每个周期可以并行执行8条32bit指令,最大峰值速度为4800MIPS,2组共64个32bit通用寄存器,32bit寻址范围,支持8/16/32/40 bit的数据访问,芯片内集成大容量SRAM,最大可达8Mb。由于出色的运算能力、高效的指令集、大范围的寻址能力,使其特别适用于无线基站、测试仪表等对运算能力和存储量要求高的应用场合。
2.2 FFT算法的DSP实现
FFT算法作为一个子函数模块且输入序列长度不尽相同,所以,方案定义了输入输出变量及其调用格式。调用格式:Turbo_Code(int*,int,int,char*,char*,int*),其中,int分别表示输入序列的长度和FFT的级数;int*分别表示输入序列的首地址和输出序列的首地址;char*分别表示旋转因子的余弦的首地址和旋转因子的正弦的首地址。
FFT算法具体实现流程如下:
(1)时间抽取法的FFT中,每个蝶形的输入、输出数据节点在一条水平线上,所以每个蝶形的输出数据可以立即存入原输入数据所占用的存储单元。这种原位计算可节省大量的内存,并且理论上减少不同寄存器之间存取数据的时间。
使用C语言编写主函数,汇编语言编写FFT算法的实现函数。程序中假设输入数据最大长度为1024,由于DSP C6455可以直接存取处理32bit,所以在内存中定义了长度为8192bit作为存放输出序列的内存空间。为了提高运算精确度,输入数的实部和虚部分别占用一个字,在程序中进行复数相乘操作是采用汇编指令MPYHI。内存定义了长度为2048bit的Tempsequence作为存放倒序序列,并且建立了2张旋转因子查找表,分别为Wr和Wi。
外循环中,在每次内循环之前从输入比特序列中取出32bit放入一个寄存器,作为一个内循环的输入,内循环结束后,取下一个32bit输入比特更新这个寄存器。
推荐阅读