基于LTE系统的FFT/IFFT变换装置
技术领域
本发明涉及数字信号处理领域、通信领域,特别是涉及基于LTE系统的FFT/IFFT变换装置。
背景技术
LTE系统采用了15KHz的子载波带宽,通过设置不同子载波数目,更确切的说是映射为不同资源块(PRB)数目实现1.4MHz到20MHz可变的系统带宽,LTE系统定义的6种不同的系统带宽。这6种传输带宽对应的DFT/IDFT变换点数分别为128、256、512、1024、1536和2048。针对LTE系统要求的这六种变换点数,主流FPGA厂商例如XILINX公司和ALTERA公司均提供了基于各自FFT/IFFTIP核的解决方案,但其共有的缺陷是无法只使用一个IP核满足既能同时实现这六种传输带宽的要求又能进行块浮点FFT/IFFT处理,专利《一种1536点的FFT/IFFT实现方法及装置》(申请号:200910172964.3)提出了一种1536点FFT/IFFT实现方法及装置,无法支持块浮点FFT/IFFT变换,而且需要使用并存储1536个旋转因子,这无疑会耗费更多的存储资源。
发明内容
本发明实施例的目的是提供基于LTE系统的FFT/IFFT变换装置,以支持所有传输带宽的处理以及支持块浮点FFT/IFFT变换。
为实现上述目的,本发明提供了如下方案:
一种基于LTE的FFT/IFFT变换装置,包括输入乒乓缓存单元、512点FFT/IFFT处理单元、输入控制单元、基r运算单元和输出端;
其中,所述输入控制单元用于:
接收配置数据和第一序列p(m),m=0,1,2…N-1,N表示变换点数或序列的长度;所述配置数据至少包括N和变换标志;其中,所述变换标志的第一取值用于表征需要对所述第一序列进行正变换,所述变换标志的第二取值用于表征需要对所述第一序列进行反变换;
在所述N不大于512时,直接将所述第一序列p(m)输入至所述512点FFT/IFFT处理单元;
在所述N大于512时,将所述第一序列p(m)输入至所述输入乒乓缓存单元;
在所述N大于512时,分r次从所述输入乒乓缓存单元中读出p(m)发送至所述512点FFT/IFFT处理单元;r=N/512;其中,第i次从所述输入乒乓缓存单元中读出的数据为:所述p(m)位于r的正整数倍减r-i位置上的512点数据,1≤i≤r;
所述512点FFT/IFFT处理单元用于执行变换长度为2的n次幂的FFT/IFFT变换,1≤n≤9,其中:
在所述N不大于512时,对输入的数据进行相应的FFT/IFFT变换,并将变换结果输出至所述输出端;或者,
在所述N大于512并且所述变换标志为第一取值时,对所述输入控制单元分r次输入的数据进行r次FFT变换,得到r组变换结果;或者,
在所述N大于512并且所述变换标志为第二取值时,对所述输入控制单元分r次输入的数据进行r次IFFT变换,得到r组变换结果;
其中,第i组变换结果中的512点数据为,所述p(m)位于r的正整数倍减r-i位置上的512点数据经FFT或IFFT变换后的变换结果;
所述基r运算单元用于:
在所述N大于512并且所述变换标志为第一取值时,对所述r组变换结果进行基r运算得到第二序列Y(m),并将所述第二序列Y(m)输出至所述输出端,所述第二序列Y(m)为对所述第一序列p(m)进行正变换后的序列;或者,
在所述N大于512并且所述变换标志为第二取值时,对所述r组变换结果进行基r运算得到第三序列yy(m),并将yy(m)乘以1/r得到第四序列y(m),将所述y(m)输出至所述输出端,所述第四序列y(m)为对所述第一序列p(m)进行反变换后的序列;
所述512点FFT/IFFT处理单元采用块浮点方式运算,所述基r运算单元采用块浮点方式进行基r运算和乘以1/r的运算;所述块浮点方式以块浮点因子和尾数表示一个数据,所述第i组变换结果中的512点数据的块浮点因子相同。
一种基于LTE的FFT/IFFT变换装置,包括输入乒乓缓存单元、512点FFT/IFFT处理单元、输入控制单元、基r运算单元和输出端;
其中,所述输入控制单元用于:
接收配置数据和第一序列p(m),m=0,1,2…N-1,N表示变换点数或序列的长度;所述配置数据至少包括N和变换标志;其中,所述变换标志的第一取值用于表征需要对所述第一序列进行正变换,所述变换标志的第二取值用于表征需要对所述第一序列进行反变换;
在所述N不大于512时,直接将所述第一序列p(m)输入至所述512点FFT/IFFT处理单元;
在所述N大于512时,将所述第一序列p(m)输入至所述第一共轭处理单元,由第一共轭处理单元对所述p(m)进行共轭处理,得到经共轭处理后的第一序列p*(m),并将p*(m)输出至所述输入乒乓缓存单元;
在所述N大于512时,分r次从所述输入乒乓缓存单元中读出所述p*(m)发送至所述512点FFT/IFFT处理单元;r=N/512;其中,第i次从所述输入乒乓缓存单元中读出的数据为:所述p*(m)位于r的正整数倍减r-i位置上的512点数据,1≤i≤r;
所述512点FFT/IFFT处理单元用于执行变换长度为2的n次幂的FFT/IFFT变换,1≤n≤9,其中:
在所述N不大于512时,对输入的数据进行相应的FFT/IFFT变换,并将变换结果输出至所述输出端;或者,
在所述N大于512并且所述变换标志为第一取值时,对所述输入控制单元分r次输入的p*(m)进行r次IFFT变换,得到r组变换结果,并发送到所述基r运算单元;或者,
在所述N大于512并且所述变换标志为第二取值时,对所述输入控制单元分r次输入的p*(m)进行r次FFT变换,得到r组变换结果,并发送到所述基r运算单元;
其中,第i组变换结果中的512点数据为,所述p*(m)位于r的正整数倍减r-i位置上的512点数据经FFT或IFFT变换后的变换结果;
所述基r运算单元用于:
在N大于512并且变换标志为第一取值时,对输入的r组变换结果进行基r运算,得到的运算结果再乘以512后构成第二序列Y(m),并将第二序列Y(m)输出至第二共轭处理单元,由第二共轭处理单元对第二序列Y(m)进行共轭处理,得到经共轭处理后的第二序列Y*(m),并输出至输出端;或者,
在N大于512并且上述变换标志为第二取值时,对输入的r组变换结果进行基r运算,得到的运算结果构成第三序列yy(m),将第三序列yy(m)乘以1/N后得到第四序列y(m),并将y(m)输出至所述第二共轭处理单元进行共轭处理,得到经共轭处理后的第四序列y*(m),并输出至所述输出端;
所述512点FFT/IFFT处理单元采用块浮点方式运算,所述基r运算单元采用块浮点方式进行基r运算、乘以512和乘以1/N的运算;所述块浮点方式以块浮点因子和尾数表示一个数据,所述第i组变换结果中的512点数据的块浮点因子相同。在本发明实施例中,把LTE系统定义的六种变换点数分成两类:较小的变换点数(128、256、512,也即N不大于512)全部为2的整数次幂,直接进行相应的FFT/IFFT变换。较大的变换点数(1024、1536、2048,也即N大于512)全部基于512点FFT或IFFT进行实现,结构简单,需要的乘法器和加法器资源少。本发明实施例可同时支持六种传输带宽又能支持块浮点FFT/IFFT变换,与现有技术相比,减少了资源的占用。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1-4为本发明实施例提供的基于LTE系统的FFT/IFFT变换装置示例性结构图。
具体实施方式
本发明所基于的技术原理如下:
令待进行离散傅里叶变换(DFT)的序列x(n)的长度N=512*r,序列索引n=r*n1+n0,其中,n1=0,1,2,…511,n0=0,1,2,…r-1;令变换后的序列X(k)的长度N=r*512,索引k=512*k1+k0,其中k1=0,1,2,…r-1,k0=0,1,2,...511,令N分别等于1024、1536和2048代入DFT关系式展开得到1024、1536、2048点的DFT关系式分别为下列公式(1)-(3)所示:
其中k1=0,1;k0=0,1,2,...511
其中k1=0,1,2;k0=0,1,2,...511
其中k1=0,1,2,3;k0=0,1,2,...511
上述公式(1)-(3)中,[]内表示一个512点的DFT变换。
统观公式(1)-(3),均包含512点的DFT。并且,1024点和2048点的DFT计算均需要512个旋转因子2048点的DFT计算还需要512个旋转因子1536点的DFT计算需要512个旋转因子也即,对于较大的变换点数(1024/1536/2048),其正变换可通过512点的FFT处理+基r处理实现。
至于反离散傅里叶变换(IDFT),可将N点DFT的结果X(k)表示为X(k)=Rk+j*Ik,k=0,1,2,…N-1,其中Rk为X(k)的实部,Ik为X(k)的虚部;记X(k)的共轭为X*(k),X*(k)=Rk-j*Ik,k=0,1,2,...N-1,将X(k)代入IDFT关系式得到公式(4):
对上述X*(k)进行DFT,并将变换结果乘以得到公式(5):
比较公式(4)和公式(5),两个式子的左边相等,右边互为共轭关系,因此可以得到:对于输入长度为N的序列X(k),k=0,1,2,...N-1欲求IDFT,可以先将X(k)取共轭得到X*(k),再将X*(k)进行N点的DFT,最后将变换结果乘以1N后再取共轭得到时域信号x(n)。
也即,IDFT可通过DFT实现。
同样令待进行IDFT的序列X(k)的长度N=512*r;序列索引k=r*k1+k0,其中,k1=0,1,2,...511,k0=0,1,2,...r-1;令变换后序列索引n=512*n1+n0,其中n1=0,1,2,...r-1,n0=0,1,2,...511,代入公式(5)则1024、1536、2048点IDFT的关系式可转化为下列公式(6)-(8):
其中,n1=0,1;n0=0,1,2...511
其中,n1=0,1,2;n0=0,1,2...511
其中,n1=0,1,2,3;n0=0,1,2...511
上述公式(6)-(8)中,[]内表示一个512点的DFT。也即,对于较大的变换点数(1024/1536/2048),其反变换也可通过512点的FFT处理+基r处理实现。
而如将待进行DFT的序列x(n)表示为x(n)=Rn+j*In,n=0,1,2,...N-1,其中Rn为x(n)的实部,In为x(n)的虚部;记x(n)的共轭为x*(n)=Rn-j*In,n=0,1,2...N-1,将x(n)代入DFT关系式得到公式(9):
对x(n)的共轭x*(n)进行N点IDFT,并将变换的结果乘以N得到公式(10):
比较公式(9)和公式(10),两个式子的左边相等、右边互为共轭关系,因此可以得到:对于输入长度为N的序列x(n),n=0,1,2...N-1欲求DFT,可以先将x(n)取共轭得到x*(n),再将x*(n)进行N点IDFT,最后将变换结果乘以N后再取共轭得到X(k)。
也即,DFT也可通过IDFT实现。
令N=512*r,将索引n=r*n1+n0,其中,n1=0,1,2,…,511,n0=0,1,2,...r-1,变换后序列索引k=512*k1+k0,其中k1=0,1,2,…,r-1,k0=0,1,2,...511,将上述x*(n)代入公式(10),令N分别等于1024、1536和2048并展开得到其分别对应的DFT可转化为如下公式(11)-(13):
其中k1=0,1;k0=0,1,2,...511
其中k1=0,1,2;k0=0,1,2,...511
其中k1=0,1,2,3;k0=0,1,2,...511。公式(11)-(13)表明,对于较大的变换点数(1024/1536/2048),其正变换可通过512点的IFFT处理+基r处理实现。
令待进行IDFT的序列X(k)的长度N=512*r;序列索引k=r*k1+k0,其中,k1=0,1,2,...511,k0=0,1,2,...r-1;令变换后序列索引n=512*n1+n0,其中n1=0,1,2,...r-1,n0=0,1,2,...511,将X(k)代入IDFT式并分别令N为1024、1536和2048得到其分别对应的IDFT如下式(14)-(16):
其中,n1=0,1;n0=0,1,2...511
其中,n1=0,1,2;n0=0,1,2...511
其中,n1=0,1,2,3;n0=0,1,2...511
上述公式(14)-(16)中,[]内表示一个512点的IDFT变换。公式(14)-(16)表明,对于较大的变换点数(1024/1536/2048),其反变换可通过512点的IFFT处理+基r处理实现。
本发明的思路是:对于较小的变换点数(128、256、512)直接进行相应的FFT/IFFT变换;
对于较大的变换点数(1024/1536/2048)至少有两种方式:
方式一(原理一),对于正变换,直接通过512点的FFT处理+基r处理实现(公式(1)-(3)),对于反变换,通过512点的IFFT处理+基r处理实现(公式(14)-(16));
方式二(原理二),对于正变换,对输入和输出分别取共轭,中间计算过程通过512点的IFFT处理+基r处理实现(公式(11)-(13));对于反变换,对输入和输出分别取共轭,中间计算过程通过512点的FFT处理+基r处理实现(公式(6)-(8))。
基于上述原理一,请参见图1,本发明实施例提供的FFT/IFFT变换装置可包括如下器件:
输入乒乓缓存单元1、512点FFT/IFFT处理单元2、输入控制单元3、基r运算单元4和输出端5。
而基于上述原理二,请参见图2,由于要对输入和输出分别取共轭,因此,其与图1中的器件相比,还多出了第一共轭处理单元201和第二共轭处理单元202。
其中:
图1中的输入控制单元3可至少包括一个输入端和二个输出端(第一输出端至第二输出端)。
图1中的输入控制单元3用于执行如下操作:
1),(由输入端)接收配置数据和第一序列;
可将待变换序列称为第一序列,表示为p(m),m=0,1,2…N-1。
p(m)可为原理介绍中的x(n)或X(k)。
上述配置数据可包括变换点数N和变换标志。
其中,变换点数用于表征第一序列的长度。例如N=128、256、512、1024、1536、2048。
变换标志可为第一取值或第二取值,其中,第一取值用于表征需要对第一序列进行正变换(FFT变换),第二取值用于表征需要对第一序列进行反变换(IFFT变换);更具体的,可用0表示正变换,1表示反变换,反之亦然。
2),若N不大于512,直接将p(m)输入至512点FFT/IFFT处理单元2。
也即,对于128、256、512点的p(m)进行FFT/IFFT,直接通过输入控制单元3的第一输出端将第一序列p(m)输入到512点FFT/IFFT处理单元2。
3),在N大于512时,将上述p(m)输入至输入乒乓缓存单元1。
举例来讲,N=2048,可通过输入控制单元3的第二输出端将上述p(m)输入至输入乒乓缓存单元1。
而对于图2中的输入控制单元3,与图1不同的是,在N大于512时,则将上述p(m)输入至第一共轭处理单元201,由第一共轭处理单元201对p(m)进行共轭处理,得到经共轭处理后的第一序列p*(m),并输出至输入乒乓缓存单元1。
4),在上述N大于512时,分r次从上述输入乒乓缓存单元1中读出p(m)发送至512点FFT/IFFT处理单元2。
对于图2中的输入控制单元3而言,其分r次从上述输入乒乓缓存单元1中读出的是p*(m),并将其发送至512点FFT/IFFT处理单元2。
其中,r=N/512,输入控制单元3第i次从上述输入乒乓缓存单元1中读出的数据为:p(m)或p*(m)中位于r的正整数倍减r-i位置上的512点数据,1≤i≤r。
举例来讲,N=2048时,输入控制单元3需要从输入乒乓缓存单元1读4次,这4次读操作分别为:读取p(m)或p*(m)中位于4的正整数倍减3位置上的512点,读取p(m)或p*(m)中位于4的正整数倍减2位置上的512点,读取p(m)或p*(m)中位于4的正整数倍减1位置上的512点,读取p(m)中位于4的正整数倍位置上的512点。其他点数的变换可以此类推,不再赘述。
输入乒乓缓存单元1:用于缓存输入的数据(图1是p(m),图2是p*(m)),该输入的序列由输入控制单元3提供,p(m)或p*(m)的点数大于512点(1024、1536和2048)。
512点FFT/IFFT处理单元2用于执行变换长度为2的n次幂的块浮点FFT/IFFT变换,1≤n≤9,块浮点方式以块浮点因子和尾数表示数据,N点FFT/IFFT变换后得到的N个变换结果共用一个块浮点因子,当N不大于512时,该块浮点因子即为本文后续介绍的blk_exp3,当N大于512时,该块浮点因子即为本文后续介绍中的blk_expn,1≤n≤r,其中:
1),若N不大于512,对输入的数据进行相应的FFT/IFFT变换,并将变换结果输出至输出端5;
举例来讲,N=128点,变换标志指示进行正变换,则512点FFT/IFFT处理单元2对第一序列p(m)进行128点的FFT变换。而若变换标志指示进行反变换,则512点FFT/IFFT处理单元2对第一序列p(m)进行128点的IFFT变换。
2),若N大于512并且变换标志为第一取值时,对输入控制单元3分r次输入的p(m)进行r次FFT变换,得到r组变换结果(每组包括512个变换结果或者说每组包括512点数据),并将r组变换结果发送到基r运算单元4。
或者,在N大于512并且变换标志为第二取值时,对输入控制单元3分r次输入的p(m)进行r次IFFT变换,得到r组变换结果,r=N512。
其中,第i组变换结果中的512点数据为,p(m)位于r的正整数倍减r-i位置上的512点数据经FFT或IFFT变换后的变换结果。
对于图2中的512点FFT/IFFT处理单元2而言,则是:
若N大于512并且变换标志为第一取值时,对输入控制单元3分r次输入的p*(m)进行r次IFFT变换,得到r组变换结果,并发送到基r运算单元4。
或者,在N大于512并且变换标志为第二取值时,对输入控制单元3分r次输入的p*(m)据进行r次FFT变换,得到r组变换结果,并发送到基r运算单元4。
可通过配置512点FFT/IFFT处理单元2,使其在N≤512时,根据变换标志对输入的数据进行相应的FFT/IFFT变换,并将变换结果输出至输出端5;而在N>512,将变换结果发送到基r运算单元4。当然,这需要输入控制单元3与512点FFT/IFFT处理单元2共享配置数据。
图1中的基r运算单元4用于:
1),在N大于512并且上述变换标志为第一取值时,对输入的r组变换结果进行基r运算,得到的运算结果构成第二序列Y(m),并将第二序列Y(m)输出至上述输出端5。
第二序列Y(m)即为对第一序列p(m)(也即前述的x(n))进行正变换得到的序列X(k)。
2),在N大于512并且上述变换标志为第二取值时,对输入的数据进行基r运算,得到的运算结果构成第三序列yy(m),将第三序列yy(m)乘以1/r后得到第四序列y(m),并将y(m)输出至上述输出端5。
第四序列y(m)为对第一序列p(m)(也即前述的X(k))进行反变换得到的序列x(n)。
对于图2中的基r运算单元4而言,则是:
在N大于512并且上述变换标志为第一取值时,对输入的r组变换结果进行基r运算,得到的运算结果再乘以512后构成第二序列Y(m),并将第二序列Y(m)输出至上述第二共轭处理单元202,由第二共轭处理单元202对第二序列Y(m)进行共轭处理,得到经共轭处理后的第二序列Y*(m),并输出至输出端5。
经共轭处理后的第二序列Y*(m)即为前述的x(n)进行正变换得到的序列X(k)。
在N大于512并且上述变换标志为第二取值时,对输入的数据进行基r运算,得到的运算结果构成第三序列yy(m),将第三序列yy(m)乘以1/N后得到第四序列y(m),并将y(m)输出至上述第二共轭处理单元202进行共轭处理,得到经共轭处理后的第四序列y*(m),并输出至上述输出端5。
经共轭处理后的第四序列y*(m)即为前述的X(k)进行反变换得到的序列x(n)。
与512点FFT/IFFT处理单元2相类似,基r运算单元亦采用块浮点方式进行基r运算、乘以1/r、乘以1/N和乘以512的运算。
在本发明其他实施例中,请参见图3或图4,上述基r运算单元4可包括写控制单元、第三共轭处理单元、第四共轭处理单元、第一至第四乒乓缓存单元、旋转因子第一存储单元、旋转因子第二存储单元、旋转因子第三存储单元、读控制单元、第一旋转因子读控制单元、第一多路选择器(MUX1)、旋转因子相乘单元、块浮点处理单元、第一至第三复数相乘单元、第一至第三复数相加单元、第二多路选择器(MUX2)。
图1或图2中的输出端5具体可为图3或图4中的第三多路选择器MUX3。
其中,图3对应上述原理一,图4对应上述原理二,但图3和图4中的基r运算单元所包含的元器件相同,各元器件间的连接关系也相同。下面将一起介绍。
其中,
写控制单元:用于在N大于512时,对上述512点FFT/IFFT处理单元的输出结果进行写控制:将上述r组变换结果中的第i组变换结果输出到第一至第四乒乓缓存单元中的第i乒乓缓存单元。
也即,将p(m)或p*(m)位于r的正整数倍减(r-i)位置上的512点经FFT/IFFT变换的变换结果输出到第i乒乓缓存单元。
例如,N=1024时,将p(m)或p*(m)中位于2的正整数倍减1位置上的512点进行FFT/IFFT变换后的变换结果存入第一乒乓缓存单元,将p(m)或p*(m)位于2的正整数倍位置上的512点进行FFT/IFFT变换后的变换结果存入第二乒乓缓存单元,其它变换点数以此类推,不再赘述。
可通过配置写控制单元来实现将p(m)或p*(m)中位于r的正整数倍减(r-i)位置上的512点经FFT/IFFT变换后的变换结果输出到第i乒乓缓存单元。在具体实现时,输入控制单元可与写控制单元共享配置数据。
第一至第四乒乓缓存单元:用于存储写控制单元输出的数据,这四个乒乓缓存单元完全相同,每个乒乓缓存单元深度为1024即可。
旋转因子第一存储单元:用于存储(1024点和2048点FFT/IFFT计算时需要的512个第一旋转因子(第一组第一旋转因子)
旋转因子第二存储单元:用于存储1536点FFT/IFFT计算时需要的512个第一旋转因子(第二组第一旋转因子)
旋转因子第三存储单元:用于存储2048点FFT/IFFT计算时需要的另外512个第一旋转因子(第三组第一旋转因子)
旋转因子第一至第三存储单元可统称旋转因子存储单元。
读控制单元用于:分r次同时向第一至第r乒乓缓存单元的相同地址空间发出读指令以读取出上述r组变换结果,将读取的r组变换结果发送到上述块浮点处理单元,以及控制第一旋转因子读控制单元每次读取第一旋转因子的时刻(读控制单元每次发出读指令时,就控制第一旋转因子读控制单元也同步读取对应的旋转因子存储单元)。
需要说明的是,每一次读取都读取出前述的r组变换结果,读r次。在第j次读取中被读出的r组变换结果,用于计算Y(m)或y(m)或Y*(m)或y*(m)的第512(j-1)+1~512j位置上的数据,1≤j≤r。
例如,当N=2048时,读控制单元同时向第一至第四乒乓缓存单元的相同地址空间发出有效的读指令,对四个乒乓缓存单元同时读四次,每次连续读出512个数据,其中:第一次从第一至第四乒乓缓存单元同时读出的512×4个数据(四组变换结果),用于计算Y(m)或y(m)或Y*(m)或y*(m)的前512个数据;第二次从第一至第四乒乓缓存单元同时读出的512×4个数据(四组变换结果),用于计算Y(m)或y(m)或Y*(m)或y*(m)的第一中间512个数据;第三次从第一至第四乒乓缓存单元同时读出的512×4个数据(四组变换结果),用于计算Y(m)或y(m)或Y*(m)或y*(m)的第二中间的512个数据;第四次从第一至第四乒乓缓存单元同时读出的512×4个数据(四组变换结果),用于计算Y(m)或y(m)或Y*(m)或y*(m)的后512个数据。
图3中的第一旋转因子读控制单元:用于控制旋转因子第一存储单元、旋转因子第二存储单元、旋转因子第三存储单元中数据的读取,并在(N>512)变换标志为第一取值时将读取出的第一旋转因子输出到旋转因子相乘单元,在(N>512)上述变换标志为第二取值时,将读取出的第一旋转因子输出到上述第三共轭处理单元。
图4中的第一旋转因子读控制单元:用于控制旋转因子第一存储单元、旋转因子第二存储单元、旋转因子第三存储单元中数据的读取,并在(N>512)变换标志为第二取值时将读取出的第一旋转因子输出到旋转因子相乘单元,在(N>512)上述变换标志为第一取值时,将读取出的第一旋转因子输出到上述第三共轭处理单元。
其中:
N=1024时,第一旋转因子读控制单元从旋转因子第一存储单元中读出旋转因子
N=1536时,第一旋转因子读控制单元从旋转因子第二存储单元中读出旋转因子
N=2048时,第一旋转因子读控制单元同时从旋转因子第一存储单元中读出旋转因子从旋转因子第三存储单元中读出旋转因子
需要说明的是,读控制单元和第一旋转因子读控制单元分别需要对相应的乒乓缓存单元和相应旋转因子存储单元同步的读取r次。
第三共轭处理单元用于,对输入的数据进行共轭处理得到经共轭处理后的第一旋转因子,并输出至旋转因子相乘单元;例如,对进行共轭处理得到
第一多路选择器MUX1用于,从多个第二旋转因子中选择一个第二旋转因子;第二旋转因子包括和
此外,图3的MUX1在N大于512并且上述变换标志为第一取值时,将选择出的第二旋转因子输出到上述旋转因子相乘单元;在N大于512并且上述变换标志为第二取值时,将选择出的第二旋转因子输出到上述第四共轭处理单元。
图4中的MUX1则相反,在N大于512并且上述变换标志为第二取值时,将选择出的第二旋转因子输出到上述旋转因子相乘单元;在N大于512并且上述变换标志为第一取值时,将选择出的第二旋转因子输出到上述第四共轭处理单元。
图3或图4中的第二旋转因子参数1为第一组第二旋转因子,包括和用于1024和2048点FFT/IFFT的计算。
第二旋转因子参数2为第二组第二旋转因子,包括和用于1536点FFT/IFFT的计算。
第二旋转因子参数3为第三组第二旋转因子,包括 用于2048点FFT/IFFT计算。
实际实现过程中会根据旋转因子的特性进行简化;
例如:
更具体的,当N=1024时,计算Y(m)或y(m)或Y*(m)或y*(m)的前512个数据时选择后512个数据时选择
当N=1536时,计算Y(m)或y(m)或Y*(m)或y*(m)的前512个数据时选择中间512个数据时选择后512个数据时选择
当N=2048时,计算Y(m)或y(m)或Y*(m)或y*(m)的前512个变换结果时选择和第一中间512个变换结果时选择和第二中间512个变换结果时选择和最后512个变换结果时选择和
上述第四共轭处理单元:用于对输入的数据进行共轭处理得到经共轭处理后的第二旋转因子,并输出至上述旋转因子相乘单元;
旋转因子相乘单元:将上述第一旋转因子和第二旋转因子进行复数相乘运算得到第一计算结果G和第二计算结果H,或者,将经共轭处理后的第一旋转因子和经共轭处理后的第二旋转因子进行复数相乘运算得到第一计算结果G和第二计算结果H,并将第一计算结果G和第二计算结果H分别输出到上述第一复数相乘单元和第二复数相乘单元。
更具体的,对于图3中的旋转因子相乘单元而言,若N=1024并且变换标志为第一取值,令H=0,在计算Y(m)或y(m)中的第512(j-1)+1~512j位置上的数据时若N=1024并且变换标志为第二取值,H=0,在计算Y(m)或y(m)中的第512(j-1)+1~512j位置上的数据时图4中的旋转因子相乘单元则与之恰恰相反。
对于图3中的旋转因子相乘单元而言,若N=1536并且变换标志为第一取值,在计算Y(m)或y(m)中第512(j-1)~512j位置上的数据时若N=1536并且变换标志为第二取值,在计算Y(m)或y(m)中第512(j-1)~512j位置上的数据时图4中的旋转因子相乘单元则与之恰恰相反。
对于图3中的旋转因子相乘单元而言,若N=2048并且变换标志为第一取值,在计算Y(m)或y(m)中第512(j-1)+1~512j位置上的数据时,若N=2048并且变换标志为第二取值,在计算Y(m)或y(m)中第512(j-1)+1~512j位置上的数据时, 图4中的旋转因子相乘单元则与之恰恰相反。
块浮点处理单元:用于对输入的上述r组变换结果进行块浮点处理,并将处理结果发送到第一复数相乘单元和第一、二复数相加单元。
一般块浮点处理的得到的处理结果实际上就是尾数,块浮点因子就是指数。
在N=1024时,上述块浮点处理单元的第一输出端输出的第一组处理结果,第四输出端输出第二组处理结果,第二输出端和第三输出端输出0;在N=1536时,上述块浮点处理单元的第二输出端输出0,第一输出端、第三输出端和第四输出端分别输出第一至第三组处理结果;在N=2048时,上述块浮点处理单元的第一至第四输出端分别输出第一至第四组处理结果。
为了保证1024、1536和2048点FFT/IFFT处理架构都相同,在N=1024时,块浮点处理单元的第一输出端A输出的是第一组处理结果(也即,读控制单元从第一乒乓缓存单元中读出的数据经块浮点处理后的结果),第四输出端D输出的是第二组处理结果第二组处理结果(也即,读控制单元从第二乒乓缓存单元中读出的数据经块浮点处理后的结果);块浮点处理单元的第二输出端B和第三输出端C输出的是0;
N=1536时,块浮点处理单元第二输出端B输出0,第一输出端A、第三输出端C和第四输出端D分别输出的是第一至第三组处理结果,也即,分别输出的是读控制单元从第一至第三乒乓缓存单元中读出的数据经块浮点处理后的结果;
N=2048时,块浮点处理单元第一至第四输出端分别输出第一至第四组处理结果,也即,分别输出的是读控制单元从第一至第四乒乓缓存单元中读出的数据发送到块浮点处理单元进行处理后的结果。
块浮点处理单元可与输入控制单元共享配置数据。
块浮点处理的具体方式如下:
以r组变换结果对应的r个块浮点因子中的任一块浮点因子(例如绝对值最大或最小的块浮点因子)为基准,将其他块浮点因子blk_exp1,blk_exp2...blk_expr所对应的变换结果(尾数)S1,S2...Sr进行相应的左移或右移,从而使得各组变换结果(尾数)R1,R2...Rr有相同的块浮点因子blk_exp1。
举例来讲,作为基准的块浮点因子为10,A组变换结果对应的块浮点因子为9,则将A组变换结果中的512点数据向右移一位,另有B组变换结果对应的块浮点因子为12,则将B组变换结果中的512点数据向左移2位。
同时,为了保证基r运算过程中数据不溢出,块浮点处理单元需要根据变换点数的不同对上述R1,R2...Rr进行缩放并同时对块浮点因子blk_exp1进行调整得到调整后的块浮点因子blk_exp2。
同时,为了保证基r运算过程中数据不溢出,块浮点处理单元需要根据变换点数的不同对上述R1,R2...Rr进行缩放并同时对块浮点因子blk_exp1进行调整得到调整后的块浮点因子blk_exp2。(新的基准块浮点因子)。
具体的,缩放可通过右移来实现,例如,N=2048时,对4组变换结果R1,R2,R3,R4中的每一数据右移X位(X可以等于4、3或其他正数),同时,令blk_exp1与X求和,得到调整后的基准块浮点因子blk_exp2。再例如,N=1536时,对3组变换结果中的每一数据右移Y位(Y可以等于3、2或其他正数),同时,令blk_exp1与Y求和,得到调整后的基准块浮点因子blk_exp2。以此类推,变换点数越大,右移的位数就越大。
在进行1024、1536和2048点IFFT变换(原理一)时,为防止直接乘以11024、11536和1/2048对计算精度产生影响,可有两种处理方式:
处理方式一:
对于11024,令块浮点因子blk_exp2与10做差,得到最终块浮点因子blk_exp3。
举例来讲,假定块浮点因子blk_exp2是11,对于11024,令11-10=1。则最终的块浮点因子blk_exp3为1。
对于11536,令块浮点因子blk_exp2与9做差,得到最终块浮点因子blk_exp3。后续还需要令尾数乘以13,这是因为(11536)=(13)*2-9,为了实现乘以11536,后续还需要乘以13。后续将介绍,在第二多路选择器MUX2处,会实现乘以13。
对1/2048,令块浮点因子blk_exp2与11做差,得到最终块浮点因子blk_exp3。
处理方式二:
对于11024,令块浮点因子blk_exp2与9做差,得到最终块浮点因子blk_exp3。后续还需要令变换结果乘以1/2。
对于11536,令块浮点因子blk_exp2与9做差,得到最终块浮点因子blk_exp3。后续还需要令变换结果乘以1/3。
对1/2048,令块浮点因子blk_exp2与9做差,得到最终块浮点因子blk_exp3。后续还需要令变换结果乘以1/4。
同理,在进行1024、1536和2048点FFT变换(原理二)时,对于乘以512,可令块浮点因子blk_exp2与9求和,得到最终块浮点因子blk_exp3。需要说明的是,旋转因子相乘单元、第一至第三复数相乘单元、第一至第三复数相加单元都是以块浮点方式进行运算。输出端5的输出结果也是最终块浮点因子(例如blk_exp3)和尾数,因此,实际的变换结果为输出端5的输出结果乘以2blk_exp3。
第一复数相乘单元:用于将旋转因子相乘单元输出的第一计算结果G分别与块浮点处理单元的第二输出端和第四输出端输出的处理结果进行复数相乘,得到第一复数相乘结果E=G*B和第二复数相乘结果F=G*D,并将第一复数相乘结果E=G*B发送到第一复数相加单元,将第二复数相乘结果F=G*D发送到第二复数相加单元。
第一复数相加单元:用于将块浮点处理单元的第一输出端输出的处理结果与第一复数相乘单元输出的第一复数相乘结果进行复数相加,得到第一复数相加结果,并将第一复数相加结果发送到第三复数相加单元。
第二复数相加单元:用于将块浮点处理单元的第三输出端输出的处理结果与第一复数相乘单元输出的第二复数相乘结果F进行复数相加,得到第二复数相加结果,并将第二复数相加结果发送到第二复数相乘单元。
第二复数相乘单元:用于将第二复数相加单元输出的第二复数相加结果与旋转因子相乘单元输出的第二计算结果H进行复数相乘,得到第三复数相乘结果,并将第三复数相乘结果发送到第三复数相加单元。
第三复数相加单元:用于对第一复数相加单元输出的第一复数相加结果和第二复数相乘单元的第三复数相乘结果进行复数相加,得到第三复数相加结果,并将第三复数相加结果发送到第三复数相乘单元。
图3中的第二多路选择器MUX2用于,在N=1536,并且变换标志为第二取值时,将1/3发送到第三复数相乘单元;在N=1024,并且变换标志为第二取值时,将1/2发送到第三复数相乘单元;在N=2048并且变换标志为第二取值时,将1/4发送到第三复数相乘单元;在N=1024、1536或2048并且变换标志为第一取值时,将1发送到上述第三复数相乘单元;
图4中的第二多路选择器MUX2用于,在N=1536,并且变换标志为第二取值时,将1/3发送到第三复数相乘单元;在N=1024、2048,并且变换标志为第二取值时,将1发送到第三复数相乘单元;在N=1024、1536或2048并且变换标志为第一取值时,将1发送到上述第三复数相乘单元。或者,
在N=1536,并且变换标志为第二取值时,将1/3发送到第三复数相乘单元;在N=1024,并且变换标志为第二取值时,将1/2发送到第三复数相乘单元;在N=2048并且变换标志为第二取值时,将1/4发送到第三复数相乘单元;在N=1024、1536或2048并且变换标志为第一取值时,将1发送到上述第三复数相乘单元。
可通过SEL信号,控制MUX2的输出。
第三复数相乘单元:用于将上述第二多路选择器的输出数据和上述第三复数相加单元输出的第三复数相加结果进行复数相乘,得到第四复数相乘结果,将上述第四复数相乘结果发送到上述第三多路选择器MUX3。
图3中的第三多路选择器MUX3:用于对输出的结果进行选择,当N=128、256或512时,将512点FFT/IFFT处理单元的输出结果进行输出;当N=1024、1536或2048时,将第三复数相乘单元的第四复数相乘结果进行输出。
图4中的MUX3用于:当N=128、256或512时,将512点FFT/IFFT处理单元的输出结果进行输出;当N=1024、1536或2048时,将第二共轭处理单元的输出结果进行输出。
可见,在本发明上述所有实施例中,LTE系统定义的六种变换点数被分成两类:
较小的变换点数(128、256、512,也即N不大于512)全部为2的整数次幂,直接进行相应的FFT/IFFT变换。因为2的整数次幂的DFT/IDFT实现技术已非常成熟,可以直接调用FPGA厂家提供的IP或者套用成熟的实现架构进行实现;
较大的变换点数(1024、1536、2048,也即N大于512)全部基于512点FFT或IFFT进行实现,结构简单,需要的乘法器和加法器资源少。
此外,1024点和1536点变换时各自只需存储并使用512个第一旋转因子,2048点变换时共需要使用1024个第一旋转因子,其中有512个第一旋转因子可以和1024点的第一旋转因子共用,只需要再存储另外512个第一旋转因子,执行这三种变换点数总共只需要存储1536个旋转因子,节省了存储资源的使用。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。