一种实现快速傅立叶变换、反变换的硬件装置及方法 【技术领域】
本发明涉及无线移动通信及信号处理系统领域,尤其涉及一种应用于TD-SCDMA基带处理系统的实现快速傅立叶变换(Fast FourierTransform,简称FFT)及其反变换(Inverse Fast Fourier Transform,IFFT)的硬件装置及方法。
背景技术
无线移动通信及信号处理系统中,经常需要对处理信号进行时域、频域间的数据形式的转化与切换,以方便做下一步的数据处理和完成算法流程。FFT主要用于数据从时域向频域的转换,其反变换IFFT则用于实现数据从频域向时域的切换和转化。
在TD-SCDMA移动通信基带处理系统中,普遍采用了联合检测的基带处理算法,其中含有对信号传输通道的信道估计处理与计算过程。其算法流程描述及数据处理过程较为复杂,其中不可避免的用到了数据形式从时域向频域(FFT)、从频域向时域(IFFT)的切换和转化运算,如图1所示,在信道估计运算处理中,完成串行干扰消除、且在与上层配置下来的基本midamble码频域数据点除后,需要将频域数据转化为时域数据,才能进行基于能量大小的有效径判决操作,这就需要进行IFFT运算;对低于噪声径的径系数置零后、干扰系数重构前,又需要将时域的数据转化为频域格式,才能和上层配置下来的基本midamble码FFT变换结果进行点乘运算,这时就需要进行FFT变换。
在移动通信基带处理系统中,特别是用户侧的移动终端处理系统中,对FFT的硬件实现要求颇为苛刻,有几个方面:一是面积资源问题,不可能将用户终端系统做的很庞大;二是时钟资源的耗费问题,实时处理系统对时钟资源的利用提出很高的要求;三是成本问题,多点FFT的运算过程分级、中间结果的合理存储与利用、运算本身的复数乘法、复数加减法等等,其设计过程均直接涉及到硬件资源的相应耗费。综上,移动通信终端基带处理系统,对FFT/IFFT的硬件实现的面积资源及时钟资源的利用及提出了较高的要求。
FFT/IFFT的硬件实现电路,需要考虑以下几点设计要素:
(1)FFT/IFFT功能模块的输入及输出数据流排列顺序
由FFT/IFFT数学运算具体过程可知,可以选择不同的拓补结构(蝶形中的两两数据交叉配对)完成多点FFT/IFFT的运算,理论上讲,输入数据是自然顺序或者倒序、对输出结果要求是自然顺序或者倒序均可以做到。但是,对非FFT/IFFT运算来说,很少用到位反序的数据流输入或输出,而自然顺序的数据排列相对常见。
(2)蝶形运算中使用的旋转因子
在蝶形运算X(K)=X1(K)±WNkX2(K)中,称WNk为旋转因子。根据多点FFT/IFFT运算的具体输入数据点数(假设为2的n次幂),以及设计中的定点化精度,来决定运算中所需要的旋转因子数值取值。在目前的实际设计中,旋转因子的取数和生成一般采用以下途径:实时生成当前所需旋转因子本身或者其倍数数值,通过与某一个基值相乘得到想要的旋转因子数据。这种方法适合对实时性要求不是很强的场合。
(3)蝶形运算单元
由于蝶形运算X(K)=X1(K)±WNkX2(K)需要完成复数乘法、复数加减法的运算,硬件设计中相对应的也需要用复数乘法器(多个实数乘法器组成)等器件完成运算。由于采用不同数量的乘法器资源及加法器资源对成本及面积上的影响较大,所以要考虑到蝶形运算单元的实现策略。
(4)中间结果的存储与调用
根据多点FFT/IFFT运算的具体输入数据点数(假设为2的n次幂),整个FFT/IFFT运算分为n级来完成,即有n级的中间结果需要缓存及被接下来的一级运算有序地调用。考虑每一级采用的不同拓补结构的设计,以及硬件存储结构的可实现性,合理安排逐级中间结果的缓存与取数调用,对快速高效完成FFT/IFFT运算很关键。
(5)每级中间计算结果数据的溢出判断和溢出处理
由于硬件设计中定点化的存在,必须考虑每级FFT/IFFT运算的蝶形运算精度控制及补偿问题,这就是运算中地溢出判断和溢出处理。这个和定点化方案中的数据链整体精度控制有关。
以上就是FFT/IFFT的硬件电路实现需要考虑的五个重要要素。但是作为终端无线移动通信系统处理系统,不仅仅是要实现FFT/IFFT数学运算,还要考虑无线终端设备的特殊性,如成本、便携、高速数据处理的实时性及其与其他模块的交互协作、整体设计等。
中国专利CN200710103178.9_01_23,描述了一种FFT/IFFT成对处理系统及装置,但是其所述第一傅立叶变换处理模块及第二傅立叶变换模块,均只能接收一种顺序的数据流、输出另一种顺序的数据流,比如:接收自然序数据流,输出位反序数据流;或者接收位反序数据流,输出自然序数据流。该专利的不足在于:只有在类似FFT/IFFT的特定运算中,才可能对数据有位反序的排列要求,亦即位反序的数据流,对其他运算来说,作为输入或者强制的输出格式均不方便,所以该专利装置的通用性不强。
中国专利CN02152484_01_11,描述了基4和混合基(4+2)FFT处理器地址映射方法和系统,其使用了4个数据存储体和3个旋转因子存储体。该专利的不足在于:存储单元块数较多,且使用了过多存储单元对中间操作数的存储,虽然可能做到了FFT本身数学运算的较大并行度,但并不适合在终端基带系统中应用。
【发明内容】
本发明所要解决的技术问题是克服现有的有关FFT(或IFFT)硬件设计中硬件资源及时钟资源均耗费巨大问题和缺陷,提供一种设计思路清晰、实现简单且满足实时系统对硬件资源及时间双重苛刻要求的实现FFT/IFFT的硬件装置,以及相应的实现方法。
为解决上述技术问题,本发明是通过以下技术方案实现的:
一种实现快速傅立叶变换的硬件装置,该装置包括:依次相连的逆序读取单元、处理结果存储单元、运算单元;所述处理结果存储单元,包括第一RAM存储单元和第二RAM存储单元;
所述逆序读取单元,用于产生逆序读取过程的读地址,按此读地址逆序读取自然顺序的输入数据并自上而下地写入处理结果存储单元中,且每次仅读取两个输入数据并将所读取的两数据分别写入第一RAM存储单元和第二RAM存储单元中;
所述第一RAM存储单元和第二RAM存储单元,均用于存储所述逆序读取单元所读取的输入数据、运算单元所执行的各级蝶形运算的运算结果;还用于提供对外接口,用以输出运算结果;
所述运算单元,用于按照所述输入数据的点数N进行n级迭代的蝶形运算,在每级的每次蝶形运算过程中,从所述处理结果存储单元读取两个数据作为当前蝶形运算的待处理数据;并将每级的运算结果分别写入第一RAM存储单元和第二RAM存储单元中,以作为下一级蝶形运算的待处理数据;所述N等于2的n次幂。
其中,所述运算单元包括:依次相连的溢出处理单元、第一交换单元、蝶形运算单元、第二交换单元、溢出判断单元;还包括与第二交换单元相连的整体补偿单元、与蝶形运算单元相连的运算信息预存rom单元、与第一交换单元相连的第一控制单元、与第二交换单元相连的第二控制单元;且所述溢出处理单元、溢出判断单元、整体补偿单元均分别与所述处理结果存储单元相连;
所述溢出处理单元,用于在进行第2至n级蝶形运算时,根据相应的溢出标志位对当前蝶形运算的待处理数据进行溢出处理操作;
所述第一控制单元,用于预存各级运算中所使用的第一交换标识信息,据此控制第一交换单元对当前的待处理数据进行交换或者还原操作;
所述第一交换单元,用于对当前两个待处理数据进行交换或还原操作后分别作为X1(K)和X2(K)送至蝶形运算单元,所述K表示本级运算中当前蝶形运算的次数;
所述运算信息预存rom单元,用于预存各级蝶形运算中所使用的旋转因子WNk;还用于存储各级的运算结果在处理结果存储单元中对应的存储位置;
所述蝶形运算单元,用于获取对应的旋转因子WNk,按照X(K)=X1(K)±WNkX2(K)进行蝶形运算,并输出运算结果X1(K)+WNkX2(K)和X1(K)-WNkX2(K);
所述第二控制单元,用于预存各级运算中所使用的第二交换标识信息和运算结果的具体存储地址信息,控制第二交换单元对当前的运算结果进行交换或者还原操作,并告知第二交换单元当前运算结果在处理结果存储单元中预设的具体存储地址;
所述第二交换单元,用于在第1至n-1级蝶形运算过程中,对所述蝶形运算单元当前的两个运算结果进行交换或者还原操作,之后将其送至溢出判断单元或者整体补偿单元;
所述溢出判断单元,用于在第1至n-1级蝶形运算过程中,判断蝶形运算单元当前的两个运算结果是否溢出,根据判断结果设置相应的溢出标志位并存储,之后将运算结果分别写入第一RAM存储单元和第二RAM存储单元中预设的具体存储地址;
所述整体补偿单元,用于在第n级蝶形运算过程中,根据之前各级的溢出处理操作时采用的缩小倍数对蝶形运算单元当前的运算结果进行数据放大补偿,之后将运算结果分别写入第一RAM存储单元和第二RAM存储单元中预设的具体存储地址。
一种实现快速傅立叶变换的方法,该方法包括以下步骤:
A、确定当前进行快速傅立叶变换运算的输入数据的点数N,所述N等于2的n次幂;
B、产生逆序读取过程的读地址,按此读地址逆序读取自然顺序的输入数据并自上而下地写入处理结果存储单元中,且每次仅读取两个输入数据并将读取的两数据分别写入处理结果存储单元的第一RAM存储单元和第二RAM存储单元;
C、按照所述输入数据的点数N进行n级迭代蝶形运算,在每级的每次蝶形运算过程中,从所述第一RAM存储单元和第二RAM存储单元分别读取一个数据作为当前蝶形运算的待处理数据;并将每级的运算结果分别写入第一RAM存储单元和第二RAM存储单元中预设的具体存储地址,以作为下一级蝶形运算的待处理数据。
其中,所述步骤C包括:
C1、从所述第一RAM存储单元和第二RAM存储单元分别读取一个数据作为当前蝶形运算的待处理数据;
C2、对所读取的两个数据进行溢出处理及数据交换操作后分别作为X1(K)和X2(K)送至蝶形运算单元,所述K表示本级运算中当前蝶形运算的次数;
C3、从运算信息预存rom单元中提取预存的本级运算中所使用的旋转因子WNk,按照X(K)=X1(K)±WNkX2(K)进行蝶形运算,并输出运算结果X1(K)+WNkX2(K)和X1(K)-WNkX2(K);
C4、对所述两个运算结果进行数据交换及溢出判断操作,根据判断结果设置相应的溢出标志位;
C4、将所述运算结果分别存储至第一RAM存储单元和第二RAM存储单元中预设的具体存储地址,作为下一级蝶形运算的待处理数据;
C5、重复步骤C1至C4,直至运行到第n级蝶形运算结束后,对本级的运算结果进行数据倍数的整体补偿。
一种实现快速傅立叶反变换的硬件装置,该装置包括:依次相连的逆序读取单元、共轭处理单元、处理结果存储单元、运算单元;所述处理结果存储单元,包括第一RAM存储单元和第二RAM存储单元;
所述逆序读取单元,用于产生逆序读取过程的读地址,按此读地址逆序读取自然顺序的输入数据并将所读取的数据经共轭处理单元处理后自上而下地写入处理结果存储单元中,且每次仅读取两个输入数据并将所读取的两数据经共轭处理单元处理后分别写入第一RAM存储单元和第二RAM存储单元中;
所述共轭处理单元,用于对逆序读取单元所读取的输入数据进行共轭处理操作,还用于对第n级蝶形运算的运算结果进行共轭处理操作后写入第一RAM存储单元和第二RAM存储单元;
所述第一RAM存储单元和第二RAM存储单元,均用于存储所述逆序读取单元所读取的经共轭处理的输入数据、运算单元所执行的各级蝶形运算的运算结果;还用于提供对外接口,用以输出运算结果;
所述运算单元,用于按照所述输入数据的点数N进行n级的蝶形运算,在每级的每次蝶形运算过程中,从所述处理结果存储单元读取两个数据作为当前蝶形运算的待处理数据;并将每级的运算结果分别写入第一RAM存储单元和第二RAM存储单元中,以作为下一级蝶形运算的待处理数据;且在进行第n级蝶形运算时,将本级的运算结果经共轭处理单元处理后再分别写入第一RAM存储单元和第二RAM存储单元中预设的具体存储地址;所述N等于2的n次幂。
其中,所述运算单元包括:依次相连的溢出处理单元、第一交换单元、蝶形运算单元、第二交换单元、溢出判断单元;还包括与第二交换单元相连的整体补偿单元、与蝶形运算单元相连的运算信息预存rom单元、与第一交换单元相连的第一控制单元、与第二交换单元相连的第二控制单元;且所述溢出处理单元、溢出判断单元均分别与所述处理结果存储单元相连,所述整体补偿单元还与共轭处理单元相连;
所述溢出处理单元,用于在进行第2至n级蝶形运算时,根据上一级蝶形运算后设置的相应的溢出标志位对当前蝶形运算的待处理数据进行溢出处理操作;
所述第一控制单元,用于预存各级运算中所使用的第一交换标识信息,据此控制第一交换单元对当前的待处理数据进行交换或者还原操作;
所述第一交换单元,用于对当前两个待处理数据进行交换或还原操作后分别作为X1(K)和X2(K)送至蝶形运算单元,所述K表示本级运算中当前蝶形运算的次数;
所述运算信息预存rom单元,用于预存各级蝶形运算中所使用的旋转因子WNk;还用于存储每级的运算结果在处理结果存储单元中对应的存储位置;
所述蝶形运算单元,用于按照X(K)=X1(K)±WNkX2(K)进行蝶形运算,并输出运算结果X1(K)+WNkX2(K)和X1(K)-WNkX2(K);
所述第二控制单元,用于预存各级运算中所使用的第二交换标识信息和运算结果的具体存储地址信息,控制第二交换单元对当前的运算结果进行交换或者还原操作,并告知第二交换单元当前运算结果在处理结果存储单元中预设的具体存储地址;
所述第二交换单元,用于在第1至n-1级蝶形运算过程中,对所述蝶形运算单元当前的两个运算结果进行交换操作,之后将其送至溢出判断单元或者整体补偿单元;
所述溢出判断单元,用于在第1至n-1级蝶形运算过程中,判断蝶形运算单元当前的两个运算结果是否溢出,根据判断结果设置相应的溢出标志位并存储,之后将运算结果分别写入第一RAM存储单元和第二RAM存储单元中预设的具体存储地址;
所述整体补偿单元,用于在第n级蝶形运算过程中,根据之前各级的溢出处理操作时采用的缩小倍数对蝶形运算单元当前的运算结果进行数据放大补偿,之后将运算结果送至所述共轭处理单元。
一种实现快速傅立叶反变换的方法,该方法包括以下步骤:
a、确定当前进行快速傅立叶反变换运算的输入数据的点数N,所述N等于2的n次幂;
b、产生逆序读取过程的读地址,按此读地址逆序读取自然顺序的输入数据,对所读取的输入数据进行共轭处理后自上而下地写入处理结果存储单元中,且每次仅读取两个输入数据并将其分别写入处理结果存储单元的第一RAM存储单元和第二RAM存储单元;
c、按照所述输入数据的点数N进行n级迭代蝶形运算,在每级的每次蝶形运算过程中,从所述第一RAM存储单元和第二RAM存储单元分别读取一个数据作为当前蝶形运算的待处理数据;并将每级的运算结果分别写入第一RAM存储单元和第二RAM存储单元中,以作为下一级蝶形运算的待处理数据;且在进行第n级蝶形运算时,对本级的运算结果进行共轭处理后再分别写入第一RAM存储单元和第二RAM存储单元。
其中,所述步骤c包括:
c1、从所述第一RAM存储单元和第二RAM存储单元分别读取一个数据作为当前蝶形运算的待处理数据;
c2、对所读取的两个数据进行溢出处理及数据交换操作后分别作为X1(K)和X2(K)送至蝶形运算单元,所述K表示本级运算中当前蝶形运算的次数;
c3、从运算信息预存rom单元中提取预存的本级运算中所使用的旋转因子WNk,按照X(K)=X1(K)±WNkX2(K)进行蝶形运算,并输出运算结果X1(K)+WNkX2(K)和X1(K)-WNkX2(K);
c4、对所述两个运算结果进行数据交换及溢出判断操作,根据判断结果设置相应的溢出标志位;
c4、将所述运算结果分别存储至第一RAM存储单元和第二RAM存储单元中预设的具体存储地址,作为下一级蝶形运算的待处理数据;
c5、重复步骤c1至c4,直至运行至第n级蝶形运算结束时,对本级的运算结果进行数据倍数的整体补偿,并进行共轭处理。
本发明具有以下有益效果:
1)本发明所提供的实现FFT/IFFT的硬件装置对输入数据流没有苛刻的顺序要求(如逆序输入数据的需求,是通过本硬件装置自身的内部功能设计来满足的),输入、输出数据流均为自然顺序,便于读取数据和输出数据;且以ram的形式作为输出数据接口,适合作时钟域的切换。
2)由于本发明通过将计算中的先验信息(包括旋转因子及对中间结运算结果数据的存储写控制信息)通过rom存储起来,不用实时生成该部分信息;而且,由于整个装置的数据计算采用完全流水的设计结构,n级N个数据的缓存和计算过程同时进行,时序整体协调,处理时间大为优化和缩短,因此,本发明非常适合于实时计算的应用场合。
3)本发明采用了对FFT/IFFT中间运算结果优化存储的策略:通过设计rom_wraddr使得n级中间运算结果的存储共用深度为N(与输入数据个数相同)存储单元即可,大大节省了存储单元的开销。
4)本发明可以根据实际系统中硬件资源及时钟资源的宽裕度,来选择使用合适个数的蝶形运算单元同时进行运算;蝶形单元越多,运算的并行度越高,相应的中间结果的存储策略复杂度增加,但整个模块的计算耗费时间越少,因此本发明的硬件装置设计比较灵活。
5)本发明的硬件装置通用性很强,便于实现,具有很强的实用性。
【附图说明】
图1是TD-SCDMA系统信道估计计算处理中FFT/IFFT模块的应用示意图;
图2是本发明FFT/IFFT硬件装置的结构示意图;
图3是本发明的FFT/IFFT变换方法示意图;
图4是并行度为1的FFT/IFFT装置中的时钟资源裕度示意图;
图5是FFT/IFFT硬件装置的详细硬件设计示意图。
【具体实施方式】
下面结合附图及具体实施例对本发明作进一步详细的描述:
请参阅图2,该图所示为本发明FFT/IFFT硬件装置的结构示意图。
假设当前需要处理的是N点(等于2的n次幂)输入数据的FFT/IFFT运算,则:
逆序读取单元:用于产生逆序读取过程的读地址,按此读地址逆序读取自然顺序的输入数据并自上而下地写入处理结果存储单元(ram_data)中,且每次仅读取两个输入数据并将所读取的两数据分别写入第一RAM存储单元(ram_data1)和第二RAM存储单元(ram_data2)中;
处理结果存储单元ram_data:内部的存储空间细分为2个大小一致的ram_data1单元和ram_data2单元,均用于存储逆序读取单元所读取的输入数据、中间运算结果或最终的运算结果;还用于提供对外接口,用以输出最后一级运算的运算结果;
共轭处理单元:对IFFT来说,第一级的输入数据及第n级的输出数据,均需要进行共轭运算,所以在进行IFFT运算时,对第一级的输入数据和第n级的输出数据进行共轭运算,在进行FFT运算时,共轭处理单元不作处理;
交换单元:主要处理逐级运算中,考虑硬件实现中只能同时向一块ram写入一个数据、只能同时从一块ram读出一个数据,所以就存在逐级中间结果缓存策略的问题。框图中的交换单元2用于对计算结果的存储交换,交换网络1用于对下一级蝶形运算输入数据的交换或还原;
控制单元:框图中的交换单元1用于预存各级运算中所使用的第一交换标识信息(Data_modify),据此控制交换单元1对当前的待处理数据进行交换或者还原操作;控制单元2,用于预存各级运算中所使用的第二交换标识信息(Ex_en)和运算结果的具体存储地址信息(Data_wraddr),控制交换单元2对当前的运算结果进行交换或者还原操作,并告知交换单元2当前运算结果在处理结果存储单元中预设的具体存储地址;
蝶形运算单元:就是完成对X(K)=X1(K)±WNkX2(K)的计算,包括复数乘法和复数加减。为了节省面积资源,采用(A+Bj)*(C+Dj)=[(A+B)*C-(C+D)*B]+j[(A+B)*C-(C-D)*A]----3乘5加的复数乘法实现策略;
运算信息预存rom单元:主要用于存储2部分信息,一是将逐级运算中用到的旋转因子存储在rom_w中,使用时候按照存储地址区分W的数据;二是将1~n级的每一级中间运算结果在ram_data存储中的对应位置分布详细信息存储在rom_wrdata中,以指示每一级、每一个数据应该写向ram_data的某一个具体存储单元;
溢出判断和处理单元:溢出判断主要是对每一级蝶形运算后的结果实虚部数值进行判断,可以知道当前该级FFT/IFFT运算溢出了多少倍(以2的m次方为单位,比如溢出2倍、4倍,等等),并用专门寄存器记录下来;在紧接的下一级的计算开始位置,取数完毕、进行蝶形运算之前,进行相反地数据大小缩放,即将当前该级的所有数据均缩小相应倍数(也是2的m次方,比如缩小为1/2、1/4,等等),以保证完整的n级FFT/IFFT运算,数据不会大幅度溢出失真,这就是溢出处理的子过程。当然,由于在每一级都可能有溢出情况,而在紧接的下一级做了数据的缩小操作,所以整个n级运算结束后,要将专门寄存器中保存的各级(1~n级)倍数数值进行累加,进行这n级运算的数据放大补偿,这是溢出处理的完整过程。另外:由于IFFT运算中,除了2次共轭处理外,还有基于1/N这个系数倍数的数据缩放操作,这个也一并考虑到溢出处理操作中,通过右移n位即可实现。
请参阅图3,该图所示为上述FFT/IFFT硬件装置的数据处理过程:
301、逆序读取:确定当前FFT/IFFT多点运算的点数,比如N(2的n次幂大小)点FFT/IFFT。由逆序读取单元产生逆序读取地址,从自然顺序的输入数据流一次两两读取数据,进入之后的共轭处理单元;
302、共轭处理。如果当前进行的是IFFT运算,则对读进来的数据进行共轭运算;否则,数据透明通过;
303、存储待处理数据。由于已经是通过逆序读取进来的数据,符合FFT/IFFT运算的需要,故该部分数据存储按照自上而下的顺序存储即可;
304、溢出处理及数据交换。检查上一级(对第一级来说,没有上一级,自然也没有溢出处理)运算中的溢出标志位(overflow),如果不为0,则需要进行右移操作(即缩小输入数据为原来大小的1/2、1/4等);数据交换,则是根据交换标识(Data_modify)对当前ram_data中读取过来的2个数据做交换操作,即X(K)=X1(K)±WNkX2(K)中的X1有可能来自存储前N/2个结果的存储单元,也可能来自存储后N/2个结果的存储单元,同理对X2也是这样,这个取决于拓补结构的选取和硬件存储的策略。
305、蝶形运算。经过前3步骤的处理后,当前输入数据即为该级蝶形运算的合适数据,根据数学表达式进行相应的复数乘法、加减即可;
306、数据交换及溢出判断。首先判断当前运算级别(class_cnt),如果不是第n级运算,即不是FFT/IFFT运算的最后一级,则需要让当前运算的中间结果经过交换单元2,根据交换标识Ex_en进行交换处理。这个主要是考虑到硬件设计中单口存储单元存储规则-不能同时往一个存储单元写入两个数据、不能同时从一个存储单元中读取两个数据。溢出判断的同时,对指定专门寄存器进行赋值,以指示当前级FFT/IFFT运算数据有无溢出、溢出了多少倍数。
307、在运行到第n级(即最后一级)之前,数据处理在303~306这四个步骤中反复循环;直到运行到最后一级FFT/IFFT,进行数据倍数的整体补偿;并通过判断当前是否进行IFFT运算:是则进行共轭处理,否则将输出数据至ram_data中,作为最终对外接口ram,提供FFT/IFFT运算的结果数据。
以上就是本发明的FFT/IFFT硬件装置对数据处理的详细过程。经过该FFT/IFFT硬件装置的计算处理,可以由自然顺序的数据流输入,得到最终还是自然顺序的数据流输出。
在TD-SCDMA移动通信基带处理系统的下行数据接收与码片级数据解调过程中,首先需要根据接收到天线数据中midamble码部分的偏移,初步对传输信道的信道系数做出估计计算,即基于小区的信道系数估计过程。在信道估计运算里,首先就是对当前接收midamble码的FFT变换,将接收到的时域数据转换为频域形式,以方便后续算法规定的数据处理流程;稍后的数据处理中,又需要将中间阶段结果由频域转化为时域(IFFT),以完成基于噪声功率门限的小区有效径判决过程,这里就需要用到FFT/IFFT的运算处理。另外,由于TD-SCDMA移动通信基带处理系统是基于时隙单位对数据进行处理的,所以作为下行数据处理的一部分,在以上的应用中,FFT/IFFT模块的数据处理时间必须严格控制在一定的范围之内,以保证在下一个时隙天线数据到来之前,完整完成当前时隙的所有数据处理。
基于以上的实际设计要求,下面对FFT/IFFT装置的硬件设计进行实际分析。
第一、确定N点FFT/IFFT计算的N值,并确定蝶形运算单元的并行度
模块处理均基于接收天线数据midamble码部分数据,即N=128,需要做7级FFT/IFFT的运算。TD-SCDMA协议中规定,必须在下一个时隙midamble码到来之前完成当前时隙的小区信道估计过程,如图4所示:天线数据中数据域data1为352chips,中间码midamble的区域为144chips,data2也是352chips,另外还有16chips的保护间隔GP。根据此原则,一个时隙内留给信道估计模块的最多时钟资源总数为:352+16+352=720chips,,如蓝线区域所示。假设采用32倍的时钟频率,则最多共有720x32=23040clks时钟资源来完成所有四个小区的信道估计处理过程。通过分析算法描述可知,共需要做33次FFT/IFFT,而单个蝶形单元带来的硬件设计耗费时钟资源大概是:(128/2)*7=448clks,448x33=14784<<23040,为了节省硬件资源,本发明考虑使用单蝶形单元的硬件设计。
2、逆序读取单元
硬件实现上,就是实现一个对工作时钟上升沿(或下降沿)进行计数的7位计数器MA_Rd_cnt[5:0],并在每次读取midamble数据时把MA_Rd_cnt[5:0]按位倒序作为midamble数据的读地址的bit部分,即:CHE_MAB_RdAddr[6:0]={1’b0(或1’b1),MA_Rd_cnt[[0],MA_Rd_cnt[[1],MA_Rd_cnt[[2],MA_Rd_cnt[[3],MA_Rd_cnt[[4],MA_Rd_cnt[[5]},
这样:第一次读出第0(7’b000_0000)和64(7’b100_0000)个码片数据,第二次读出第32(7’b010_0000)和96(7’b110_0000)个码片数据,第三次读出第16(7’b001_0000)和80(7’b101_0000)个码片数据......,等等,即把数据0-127(7’b000_0000--7’d111_1111)的倒序,如7’b000_0000->7’b000_0000,7’b000_0001->7’b100_0000,即为0->0,1->64,第1次读出的数据;7’b000_0010->7’b010_000,7’b000_0011->7’b110_0000,即为2->32,3->96,第2次读出的数据;7’b000_0100->7’b001_0000,7’b000_0101->7’b101_0000,即为4->16,5->80,第3次读出的数据......,等等,一直到7’b111_1110->7’b011_1111,7’b111_1111->7’b111_1111,即为126->63,127->127,第64次读出的数据,从而完成了全部128个midamble数据的读取过程。
3、旋转因子和对中间结果存储写控制信息
FFT/IFFT中蝶型运算X(K)=X1(K)±WNkX2(K),共完成7级(128点)FFT的运算过程。对128点时域数据的FFT变换蝶形运算分析后,可得出在每一级的蝶形运算中,WNk的值其变化规律如下:
第一级WNk的值分别为-W1280,共64个;--倍数为W1280
第二级WNk的值分别为-W1280、W12832,如此反复,共64个;--倍数为W12832
第三级WNk的值分别为-W1280、W12816、W12832、W12848,如此反复,共64个;--倍数为W12816
第四级WNk的值分别为-W1280、W1288、W12816、W12824、W12832、W12840、W12848、W12856,如此反复,共64个;--倍数为W1288
第五级WNk的值分别为-W1280、W1284、W1288……W12860,如此反复,共64个;--倍数为W1284
第六级WNk的值分别为-W1280,W1282,W1284……W12862,如此反复,共64个;--倍数为W1282
第七级WNk的值分别为-W1280,W1281,W1282……W12863,如此反复,共64个。--倍数为W1281
基于硬件资源的总体考虑,以及相关参与运算信号产生的实时性要求,在硬件设计上,采取把上述共7级蝶型运算用到的旋转因子WNk的值,用运算信息预存rom单元(深度64*7=448)存储起来,然后再在相应的运算周期按顺序读取并参与运算即可。
中间结果存储写控制信息包括3个方面:Data_modify,用于图2框图中交换单元1,告知每一次下一级蝶型运算的输入数据是否需要进行相互调换位置;Ex_en,用于图2框图中交换单元2,告知每一次蝶型运算的输出中间结果数据是否需要进行相互调换位置送至ram_data单元存储;Data_wraddr用于指示逐级运算的中间结果应该写向ram_data的哪一个具体存储单元。
对完整128点码片数据的七级(Class_cnt[2:0]=0--6)、每级64(time_cnt)个蝶形运算过程,可用如下控制状态表来确定Data_modify、Ex_en以及Data_wraddr的取值,如下表1:
表1
上表为第一级FFT/IFFT变换所设计的中间结果存储写控制信息举例,其他级数的FFT变换,其使用到的上述信息按照算法要求的运算过程给出即可,同上表类似。
4、溢出判断及处理单元
首先说明数据溢出的判断。在完成蝶形运算后,Overflow0-3分别对输出的两个复数结果数据的实部、虚部均进行是否溢出的判断,如下:
(1)如当前被判断的数据(实部或者虚部的数值)为正数---即最高位符号位为0时,则对最高位的下一位进行判断:如为1,则表示溢出1位;如为0,则表示没有溢出;
(2)如当前被判断的数据(实部或者虚部的数值)为负数---即最高位符号位为1时,则对最高位的下一位进行判断:如为0,则表示溢出1位;如为1,则表示没有溢出。
然后对Overflow0-3各自输出的2bits的数据进行或运算,即每个蝶形计算输出的2个复数数据,只要有其中的任何一个实部或者虚部发生了溢出,则通过输出本组数据对应的溢出操作控制信号Bit_modify,在下一次对该组数据读出后、操作前,进行相应的移位处理。
数据溢出的补偿处理。在FFT/IFFT运算的第一级,数据初始输入,没有溢出处理,数据透明通过溢出处理单元。然后从第二级到最后一级,在每级数据输入后、蝶型运算前,判断上一级对运算的溢出操作控制信号Bit_modify进行判断,如果为1,说明数据溢出1位,则对该级数据进行右移1bit;否则Bit_modify为0,说明上一级运算没有溢出,输入数据直接进入蝶型运算单元。
以上即为FFT/IFFT内部的四个特定功能单元的设计和实现,其对数据处理的详细硬件设计电路如图5所示:倒序读入的两个数据FFT_data_in1和FFT_data_in2,进入选择单元,根据rom中固化的控制信息data_modify,来判断FFT_data_in1和FFT_data_in2是否需要调换进入蝶型运算单元的数据位置;调整完毕后,进入溢出处理单元,根据上一级溢出操作控制信号Bit_modify,进行数据倍数大小的缩减控制;然后进入蝶型运算单元,与旋转因子配合,进行复数乘法、加减的运算;然后顺据进入溢出判断单元,并对应置位Bit_modify控制位,完成后就把该级计算结果回存到ram_data中,循环进行下一级的FFT/IFFT运算......如此反复经过硬件电路,完整完成第1~7级的FFT/IFFT计算过程。整个模块运算耗费时钟数为485clks,最后总的模块耗用时钟资源19332clks(小于23040clks),满足设计需要;硬件电路规模为12.57k门,最高时钟频率99.372MHz,综合报告如下表2:
表2
本发明提供的技术方案克服了现有技术对硬件装置要求过高且算法及处理复杂等缺陷,基本上只需按照上述思路,就可做出符合较高实时性要求的FFT/IFFT硬件电路,且节省了硬件资源及提高了系统的可靠性。
以上实施例仅用以说明本发明的技术方案而非限制,仅仅参照较佳实施例对本发明进行了详细说明。本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的权利要求范围当中。