CN114297570A - 一种用于通信系统的fft实现装置及其实现方法 - Google Patents
一种用于通信系统的fft实现装置及其实现方法 Download PDFInfo
- Publication number
- CN114297570A CN114297570A CN202111666217.2A CN202111666217A CN114297570A CN 114297570 A CN114297570 A CN 114297570A CN 202111666217 A CN202111666217 A CN 202111666217A CN 114297570 A CN114297570 A CN 114297570A
- Authority
- CN
- China
- Prior art keywords
- fft
- sub
- unit
- storage unit
- data storage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000004891 communication Methods 0.000 title claims abstract description 58
- 238000000034 method Methods 0.000 title claims abstract description 54
- 238000013500 data storage Methods 0.000 claims description 222
- 238000003860 storage Methods 0.000 claims description 92
- 238000004364 calculation method Methods 0.000 claims description 44
- 238000013461 design Methods 0.000 description 6
- 238000010295 mobile communication Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 230000000694 effects Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000004321 preservation Methods 0.000 description 3
- 230000008707 rearrangement Effects 0.000 description 3
- 238000000354 decomposition reaction Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000012432 intermediate storage Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
Landscapes
- Complex Calculations (AREA)
Abstract
本发明公开了一种用于通信系统的FFT实现装置及其实现方法,包括控制器、数据存储器、FFT运算器、乘法器和旋转因子存储器,其中FFT运算器包括对应设定子FFT点数集合的若干子FFT计算单元,每个子FFT计算单元用于实现设定子FFT点数集合中任一子FFT点数的子FFT运算,每个子FFT计算单元的子FFT点数的乘积等于所述通信系统要求的FFT点数。当多模通信系统中不同模式要求点数不是2的幂次方时,本发明所述FFT实现装置可以无冗余实现,不用先实现点数为2的幂次方的FFT运算,系统性能无损失;同时子FFT的迭代次数减少,延时更低。
Description
技术领域
本发明属于通信技术领域,具体涉及一种用于通信系统的FFT实现装置及其实现方法。
背景技术
在移动通信技术领域中,长期演进第四代移动通信系统(4G LTE)和第五代移动通信系统(5G NR)物理层均采用正交频分复用(OFDM)技术作为其核心技术,在下行通信中,4G LTE和5G NR均采用正交频分多址(OFDMA)技术;在上行通信中,4G LTE采用单载频频分多址(SC-FDMA)技术,5G NR既支持4G LTE的SC-FDMA技术,又支持OFDMA技术(即与下行通信相同)。上述OFDMA技术和SC-FDMA技术中的调制和解调均通过离散傅里叶变换 (DFT)和离散傅里叶逆变换(IDFT)来实现。DFT和IDFT用硬件实现时,运算量大,电路复杂,因此一般采用快速傅里叶变换(FFT)和快速傅里叶逆变换(IFFT)来替代实现。IFFT 运算可以通过FFT运算来实现,因此关注FFT的实现即可。
在一个多模通信系统中不同的通信模式(例如4G LTE、5G NR等)下需要支持不同点数的FFT运算,比如按照4G LTE协议要求需要支持34种点数的FFT运算,最大点数为1200;按照5G NR协议要求需要支持4096点FFT运算。因此4G LTE和5G NR的多模移动通信系统中需要同时支持上述35种点数的FFT运算,这35种点数分别为12、24、36、48、60、72、96、108、120、144、180、192、216、240、288、300、324、360、384、432、480、540、576、600、 648、720、768、864、900、960、972、1080、1152、1200和4096,其中前34个点数为4G LTE 需要支持的,最后一个点数4096为5G NR需要支持的。多模通信系统在实现FFT运算时可以用不同的FFT实现装置分别实现各个通信模式下需要支持点数的FFT运算,但面积和功耗会增加,显然不是最优选择。最优选择应该是各个通信模式下需要支持点数的FFT运算共用一套FFT实现装置来实现,即该FFT实现装置可以同时满足各个通信模式下需要支持点数的FFT运算要求。比如多模移动通信系统中4G LTE要求点数的FFT运算和5G NR要求点数的FFT运算可以共用一个FFT实现装置,该FFT实现装置同时支持4G LTE的34种点数的FFT运算和5G NR的1种点数的FFT运算。
一般4G LTE下的FFT运算有如下实现方式:
通过基2或基4的FFT运算来迭代实现,用这种方法还可以实现5G NR的FFT运算,对于N 点FFT运算来说,所述的基2FFT是把待运算的N点序列每次一分为二,直到最后分解为2点DFT运算;基4FFT是把待运算的N点序列每次一分为四,直到最后分解为4点DFT运算。使用基2或基4的FFT运算实现4G LTE和5G NR下的FFT运算时分别有如下缺点,包括:
(1)实现4G LTE下的FFT运算时,因为4G LTE的34种FFT点数均不是2的幂次方,不能通过基2或基4的FFT运算来“精准”实现(“精准”指的是不需要补充冗余的0,即可以正确的计算),再比如要实现12点FFT运算,用基2FFT来实现,需先实现16点FFT运算,然后对输入的12点的数据在尾部补充4个0计算16点FFT运算,输出时删除添加的0。显然这种方法会带来性能的损失。
(2)实现5G NR下的FFT运算时,因为5G NR支持的点数4096为2的12幂次方,因此用基 2或基4的FFT运算来迭代可以实现5G NR的4096点FFT运算,但是用基2FFT需要迭代12次,用基4FFT需要迭代6次,迭代次数多,处理延时增加,无法低延时地实现4096点FFT运算。
因此现有技术中,使用同一个FFT实现装置实现4G LTE和5G NR要求点数的FFT运算时,存在有冗余且延时较大的问题。多模移动通信系统存在这个问题,其他的多模通信系统也存在这样的问题。
发明内容
发明目的:针对现有技术中存在的问题,本发明公开了一种用于通信系统的FFT实现装置及其实现方法,解决了多模通信系统中使用同一个FFT实现装置实现不同模式要求点数的 FFT运算时存在有冗余且延时较大的问题。
技术方案:为实现上述发明目的,本发明采用如下技术方案:
一种用于通信系统的FFT实现装置,包括控制器、数据存储器、FFT运算器、乘法器和旋转因子存储器,其中:
FFT运算器包括对应设定子FFT点数集合的若干子FFT计算单元,所有子FFT计算单元的输入连接数据存储器,其中一个子FFT计算单元的输出连接数据存储器,其余的子FFT计算单元的输出连接乘法器,每个子FFT计算单元用于实现设定子FFT点数集合中任一子FFT 点数的子FFT运算,所有子FFT计算单元的子FFT点数的乘积等于所述通信系统要求的FFT 点数;
旋转因子存储器用于存储旋转因子;
乘法器连接旋转因子存储器,用于实现与其连接的每个子FFT计算单元的输出和旋转因子存储器中旋转因子的复数乘法运算;
数据存储器连接乘法器,用于存储与其连接的子FFT计算单元和乘法器的输出;
控制器分别连接数据存储器、FFT运算器、乘法器和旋转因子存储器,用于配置数据存储器、FFT运算器和旋转因子存储器,以及控制数据存储器、FFT运算器、乘法器和旋转因子存储器。
进一步的,FFT运算器包括第一子FFT计算单元、第二子FFT计算单元、第三子FFT计算单元和第四子FFT计算单元;
旋转因子存储器包括第一旋转因子存储单元、第二旋转因子存储单元和第三旋转因子存储单元;
乘法器包括第一复数乘法单元、第二复数乘法单元和第三复数乘法单元,其中:第一复数乘法单元连接第一子FFT计算单元和第一旋转因子存储单元,第二复数乘法单元连接第二子FFT计算单元和第二旋转因子存储单元,第三复数乘法单元连接第三子FFT计算单元和第三旋转因子存储单元;
数据存储器包括第一数据存储单元、第二数据存储单元、第三数据存储单元、第四数据存储单元、第五数据存储单元、第六数据存储单元和第七数据存储单元,其中:第二数据存储单元连接第一数据存储单元和第一子FFT计算单元,第三数据存储单元连接第一复数乘法单元和第二子FFT计算单元,第四数据存储单元连接第二复数乘法单元和第五数据存储单元,第五数据存储单元连接第四数据存储单元和第三子FFT计算单元,第六数据存储单元连接第三复数乘法单元和第四子FFT计算单元,第七数据存储单元连接第四子FFT计算单元。
进一步的,第一子FFT计算单元的子FFT点数与第二子FFT计算单元的子FFT点数的乘积小于或等于第一阈值,第三子FFT计算单元的子FFT点数与第四子FFT计算单元的子FFT点数的乘积小于或等于第二阈值,第一阈值和第二阈值的乘积等于所述通信系统要求的最大FFT点数。
进一步的,第一旋转因子存储单元的深度至少为第一阈值;
第二旋转因子存储单元的深度至少为第一阈值和第二阈值的乘积;
第三旋转因子存储单元的深度至少第二阈值。
进一步的,第一数据存储单元、第四数据存储单元和第七数据存储单元的深度均至少为第一阈值和第二阈值的乘积的2倍;
第二数据存储单元、第三数据存储单元的深度至少为第一阈值的2倍;
第五数据存储单元和第六数据存储单元的深度至少为第二阈值的2倍。
进一步的,旋转因子存储器采用RAM实现。
进一步的,控制器中存储查找表,查找表中包括若干条目,每个条目包括所述通信系统要求的FFT点数以及实现所述FFT点数时的每个子FFT计算单元对应的子FFT点数。
进一步的,所述设定子FFT点数集合为{1,2,3,4,5,6,8,9}。
一种用于通信系统的FFT实现方法,包括如下步骤:
控制器根据所述通信系统要求的FFT点数以及实现所述FFT点数时的每个子FFT计算单元的子FFT点数,初始化数据存储器、FFT运算器和旋转因子存储器;
第一个子FFT计算单元从数据存储器中读取待运算数据,对待运算数据进行对应子FFT 点数的子FFT运算后得到结果,将所述结果输入乘法器,将旋转因子存储器中的旋转因子输入乘法器,在乘法器中将所述结果与旋转因子进行复数乘法运算后得到第一次子FFT迭代结果,将所述第一次子FFT迭代结果存入数据存储器中;
下一个子FFT计算单元从数据存储器中读取当前子FFT迭代结果,对当前子FFT迭代结果进行对应子FFT点数的子FFT运算后得到下一个结果,将所述下一个结果输入乘法器,将旋转因子存储器中的旋转因子输入乘法器,在乘法器中将所述下一个结果与旋转因子进行复数乘法运算后得到下一次子FFT迭代结果,将所述下一次子FFT迭代结果存入数据存储器中;重复上述过程,直到最后一个子FFT计算单元从数据存储器中读取上一次子FFT迭代结果,对上一次子FFT迭代结果进行对应子FFT点数的子FFT运算后得到最后一次子FFT迭代结果,将所述最后一次子FFT迭代结果存入数据存储器中;
从数据存储器中读取最后一次子FFT迭代结果,作为对应所述要求的FFT点数的FFT 运算结果。
进一步的,控制器中存储有查找表,控制器从查找表中索引得到所述通信系统要求的FFT 点数以及实现所述FFT点数时的每个子FFT计算单元的子FFT点数。
有益效果:与现有技术相比较,本发明具有如下有益效果:
本发明所述的FFT实现装置中,FFT运算器包括对应设定子FFT点数集合的若干子FFT 计算单元,每个子FFT计算单元用于实现设定子FFT点数集合中任一子FFT点数的子FFT运算,每个子FFT计算单元的子FFT点数的乘积等于所述通信系统要求的FFT点数;
本发明所述的FFT实现装置中将FFT点数分解为若干子FFT点数,且子FFT点数可从设定子FFT点数集合中任意选取进行组合,相比于现有技术,不存在冗余且延时低:当多模通信系统中不同模式要求点数不是2的幂次方时,本发明所述的FFT实现装置可以直接无冗余实现,而不用先实现点数为2的幂次方的FFT运算,系统性能无损失;同时子FFT的迭代次数减少,延时更低。
附图说明
图1为本发明实施例中的一种FFT实现装置的结构图;
图2为本发明实施例中的一种FFT实现装置的具体结构图;
图3为本发明实施例中的一种FFT实现方法的流程图。
具体实施方式
下面结合附图对本发明作更进一步的说明。
实施例1:
本实施例公开了一种用于通信系统的FFT实现装置,包括控制器1、数据存储器2、FFT 运算器3、乘法器4和旋转因子存储器5,其中:
FFT运算器3包括对应设定子FFT点数集合的若干子FFT计算单元,所有子FFT计算单元的输入连接数据存储器2,其中一个子FFT计算单元的输出连接数据存储器2,其余的子FFT计算单元的输出连接乘法器4,每个子FFT计算单元用于实现设定子FFT点数集合中任一子FFT点数的子FFT运算,所有子FFT计算单元的子FFT点数的乘积等于所述通信系统要求的FFT点数;
旋转因子存储器5用于存储旋转因子;
乘法器4连接旋转因子存储器5,用于实现与其连接的每个子FFT计算单元的输出和旋转因子存储器5中旋转因子的复数乘法运算;
数据存储器2连接乘法器4,用于存储与其连接的子FFT计算单元和乘法器4的输出;
控制器1分别连接数据存储器2、FFT运算器3、乘法器4和旋转因子存储器5,用于配置数据存储器2、FFT运算器3和旋转因子存储器5,以及控制数据存储器2、FFT运算器3、乘法器4和旋转因子存储器5。
本发明所述的FFT实现装置中将FFT点数分解为若干子FFT点数,且子FFT点数可从设定子FFT点数集合中任意选取进行组合,相比于现有技术,不存在冗余且延时低:当多模通信系统中不同模式要求点数不是2的幂次方时,本实施例所述的FFT实现装置可以直接无冗余实现,而不用先实现点数为2的幂次方的FFT运算,系统性能无损失;同时子FFT的迭代次数减少,延时更低。
进一步的,FFT运算器3包括第一子FFT计算单元31、第二子FFT计算单元32、第三子FFT计算单元33和第四子FFT计算单元34;
旋转因子存储器5包括第一旋转因子存储单元51、第二旋转因子存储单元52和第三旋转因子存储单元53;
乘法器4包括第一复数乘法单元41、第二复数乘法单元42和第三复数乘法单元43,其中:第一复数乘法单元41连接第一子FFT计算单元31和第一旋转因子存储单元51,第二复数乘法单元42连接第二子FFT计算单元32和第二旋转因子存储单元52,第三复数乘法单元43连接第三子FFT计算单元33和第三旋转因子存储单元53;
数据存储器2包括第一数据存储单元21、第二数据存储单元22、第三数据存储单元23、第四数据存储单元24、第五数据存储单元25、第六数据存储单元26和第七数据存储单元27,其中:第二数据存储单元22连接第一数据存储单元21和第一子FFT计算单元31,第三数据存储单元23连接第一复数乘法单元41和第二子FFT计算单元32,第四数据存储单元24连接第二复数乘法单元42和第五数据存储单元25,第五数据存储单元25连接第四数据存储单元24和第三子FFT计算单元33,第六数据存储单元26连接第三复数乘法单元43和第四子FFT计算单元34,第七数据存储单元27连接第四子FFT计算单元34。
进一步的,第一子FFT计算单元31的子FFT点数与第二子FFT计算单元32的子FFT点数的乘积小于或等于第一阈值,第三子FFT计算单元33的子FFT点数与第四子FFT计算单元34的子FFT点数的乘积小于或等于第二阈值,第一阈值和第二阈值的乘积等于所述通信系统要求的最大FFT点数。
进一步的,第一旋转因子存储单元51的深度至少为第一阈值;
第二旋转因子存储单元52的深度至少为第一阈值和第二阈值的乘积;
第三旋转因子存储单元53的深度至少第二阈值。
进一步的,第一数据存储单元21、第四数据存储单元24和第七数据存储单元27的深度均至少为第一阈值和第二阈值的乘积的2倍;
第二数据存储单元22、第三数据存储单元23的深度至少为第一阈值的2倍;
第五数据存储单元25和第六数据存储单元26的深度至少为第二阈值的2倍。
进一步的,旋转因子存储器5采用RAM实现。
本实施例中,旋转因子存储器5采用RAM实现可以避免ROM出错带来的不可恢复的致命问题,使得FFT实现装置更具稳健性。
进一步的,控制器1中存储查找表,查找表中包括若干条目,每个条目包括所述通信系统要求的FFT点数以及实现所述FFT点数时的每个子FFT计算单元对应的子FFT点数。
本实施例中,从查找表中直接搜索所述通信系统要求的FFT点数以及实现所述FFT点数时的每个子FFT计算单元对应的子FFT点数,不需要逻辑计算,减少设计复杂度,增加配置灵活性。
进一步的,所述设定子FFT点数集合为{1,2,3,4,5,6,8,9}。
实施例2:
本实施例公开了一种通信系统中的FFT实现装置,可用于实现4G LTE和5G NR下不同点数的FFT运算,支持实现的计算点数满足如下条件:
N=N1*N2*N3*N4 (1-1)
其中,N为支持实现的FFT点数,N1、N2、N3和N4分别为计算N点FFT时的子FFT点数,由于4G LTE和5G NR中FFT点数最大为4096,N1、N2、N3和N4同时满足如下条件:
1)N1、N2、N3、N4的取值范围即设定子FFT点数集合为{1,2,3,4,5,6,8,9}
2)N1≥N2,N1≥N3
3)N1*N2≤64,N3*N4≤64
当子FFT点数为1时表示直通,即不需要进行子FFT运算;当子FFT点数取其余值时,分别表示做2点、3点、4点、5点、6点、8点或9点的子FFT运算,如N1=8,表示对应的子FFT做8点子FFT运算。
基于上述N点FFT的运算原理,本实施例公开的一种通信系统中的FFT实现装置,包括:控制器1、数据存储器2、FFT运算器3、乘法器4和旋转因子存储器5,其中控制器1 分别与数据存储器2、FFT运算器3、乘法器4和旋转因子存储器5连接,数据存储器2的输出端连接FFT运算器3的输入端,FFT运算器3的输出端连接乘法器4的输入端和数据存储器2的输入端,旋转因子存储器5的输出端连接乘法器4的输入端,乘法器4的输出端连接数据存储器2的输入端。
FFT运算器3包括4个子FFT计算单元,分别为第一子FFT计算单元31、第二子FFT 计算单元32、第三子FFT计算单元33和第四子FFT计算单元34,第一子FFT计算单元31、第二子FFT计算单元32、第三子FFT计算单元33和第四子FFT计算单元34均为相同单元,均可用于实现1点、2点、3点、4点、5点、6点、8点和9点的子FFT运算,1点子FFT 即不进行子FFT运算。通过FFT运算器3可以将N点FFT运算灵活分解为最多4次并行执行的子FFT运算,通过上述子FFT运算,可以在同一个FFT实现装置实现4G LTE和5G NR 要求的4096以内点数的FFT运算,不存在冗余且迭代次数减少,处理延时降低,可以低延时地实现FFT运算。第一子FFT计算单元31、第二子FFT计算单元32、第三子FFT计算单元33和第四子FFT计算单元34的具体计算点数由控制器1进行配置,如下:
控制器1配置第一子FFT计算单元31的计算点数为N1,第一子FFT计算单元31做N1点子FFT运算;
控制器1配置第二子FFT计算单元32的计算点数为N2,第二子FFT计算单元32做N2点子FFT运算;
控制器1配置第三子FFT计算单元33的计算点数为N3,第三子FFT计算单元33做N3点子FFT运算;
控制器1配置第四子FFT计算单元34的计算点数为N4,第四子FFT计算单元34做N4点子FFT运算。
旋转因子存储器5中有3张旋转因子表,分别使用3个旋转因子存储单元来存储,分别为第一旋转因子存储单元51、第二旋转因子存储单元52和第三旋转因子存储单元53,其中:
第一旋转因子存储单元51存储N1*N2个旋转因子,因为N1*N2的最大值为64,所以第一旋转因子存储单元51的深度至少为64,每个旋转因子值为其中s1的范围为0~N1-1,w1的范围为0~N2-1,N1*N2≤64;
第二旋转因子存储单元52存储N个旋转因子,因为N的最大值为4096,所以第二旋转因子存储单元52深度至少为4096,每个旋转因子值为其中s2的范围为 0~N1*N2-1,w2的范围为0~N3*N4-1,N1*N2≤64,N3*N4≤64;
第三旋转因子存储单元53存储N3*N4个旋转因子,因为N3*N4的最大值为64,所以第三旋转因子存储单元53深度至少为64,每个旋转因子值为其中s3的范围为0~N3-1,w3的范围为0~N4-1,N3*N4≤64。
三个旋转因子存储单元可以使用RAM来实现,本实施例所述的FFT实现装置外接的CPU (Central Processing Unit,中央处理器)利用控制器1提供的CPU接口配置旋转因子存储器 5中存储的三张旋转因子表。现有技术的旋转因子存储单元都是使用ROM来实现,在芯片实现时ROM中的数据固定不变,而ROM在芯片实现时有出错的概率。旋转因子存储单元中的旋转因子表为FFT实现装置的核心模块,一旦出错,整个FFT实现装置就会错误,且由于ROM数据固定不可改写,导致该错误不可恢复。鉴于现有技术在旋转因子表存在的问题,本实施例将旋转因子存储器5设计为用RAM来实现,外接CPU可以通过控制器1自由地读写配置三张旋转因子表中的数据,节约产生旋转因子的计算逻辑资源,可以避免ROM出错带来的不可恢复的致命问题,使得FFT实现装置更具稳健性。
乘法器4包括3个复数乘法单元,分别为第一复数乘法单元41、第二复数乘法单元42 和第三复数乘法单元43,其中:
第一复数乘法单元41,其输入端分别与第一子FFT计算单元31的输出端和第一旋转因子存储单元51的输出端连接,完成第一子FFT计算单元31输出的N1点子FFT运算的结果与第一旋转因子存储单元51的旋转因子之间的复数乘法运算;
第二复数乘法单元42,其输入端分别与第二子FFT计算单元32的输出端和第二旋转因子存储单元52的输出端连接,完成第二子FFT计算单元32输出的N2点子FFT运算的结果与第二旋转因子存储单元52的旋转因子之间的复数乘法运算;
第三复数乘法单元43,其输入端分别与第三子FFT计算单元33的输出端和第三旋转因子存储单元53的输出端连接,完成第三子FFT计算单元33输出的N3点子FFT运算的结果与第三旋转因子存储单元53的旋转因子之间的复数乘法运算。
乘法器4接收控制器1的乘法使能信号,启动三个复数乘法单元,并行执行,同时完成 N1点子FFT运算的结果、N2点子FFT运算的结果和N3点子FFT运算的结果与旋转因子之间的乘法运算。本实施例只需要三个复数乘法单元,相比于现有技术中使用更多次数的子FFT运算级联,本实施例中复数乘法单元使用更少,处理时延减少。
数据存储器2包括7个数据存储单元,分别为第一数据存储单元21、第二数据存储单元 22、第三数据存储单元23、第四数据存储单元24、第五数据存储单元25、第六数据存储单元26和第七数据存储单元27,其中:
第一数据存储单元21,用于存储等待进行N点FFT运算的待运算数据;
第二数据存储单元22,其输入端与第一数据存储单元21的输出端连接,其输出端与第一子FFT计算单元31的输入端连接,用于存储对第一数据存储单元21中的待运算数据进行重排后的数据,并将重排后的数据输入第一子FFT计算单元31中进行N1点子FFT运算;
第三数据存储单元23,其输入端与第一复数乘法单元41的输出端连接,其输出端与第二子FFT计算单元32的输入端连接,用于存储第一复数乘法单元41的计算结果,并将计算结果输入第二子FFT计算单元32中进行N2点子FFT运算;
第四数据存储单元24,其输入端与第二复数乘法单元42的输出端连接,用于存储第二复数乘法单元42的计算结果;
第五数据存储单元25,其输入端与第四数据存储单元24的输出端连接,其输出端与第三子FFT计算单元33的输入端连接,用于存储对第四数据存储单元24中的数据进行重排后的数据,并将重排后的数据输入第三子FFT计算单元33中进行N3点子FFT运算;
第六数据存储单元26,其输入端与第三复数乘法单元43的输出端连接,其输出端与第四子FFT计算单元34的输入端连接,用于存储第三复数乘法单元43的计算结果,并将计算结果输入第四子FFT计算单元34中进行N4点子FFT运算;
第七数据存储单元27,其输入端与第四子FFT计算单元34的输出端连接,用于存储第四子FFT计算单元34中N4点子FFT运算的结果,并由控制器1保序读出,作为N点FFT 运算的结果。
第一数据存储单元21、第四数据存储单元24和第七数据存储单元27的深度在本实施例中至少为8196,至少为最大FFT点数4096的2倍,用于做乒乓读写操作;第二数据存储单元22、第三数据存储单元23、第五数据存储单元25和第六数据存储单元26的深度在本实施例中至少为128,为N1*N2和N3*N4的最大值64的2倍,用于做乒乓读写操作。通过7个数据存储单元的乒乓读写操作,完成待运算数据的存储和重排、中间计算结果的存储以及最后输出的N点FFT运算的结果的存储。各个数据路径实现无缝衔接,再通过控制器1的逻辑控制实现各个数据存储单元读写无冲突。在本实施例中数据存储器2的总深度最小为最大FFT 点数4096的6.125倍,实现有限的存储资源完成全流水操作。本实施例中的4次子FFT中,仅N2点子FFT运算的结果和N4点子FFT运算的结果分别与旋转因子相乘后的结果的存储需要8196深度的大存储空间,N1点子FFT运算的结果和N3点子FFT运算的结果分别与旋转因子相乘后的结果的存储只需要128深度的小存储空间,这是保证本实施例在实现全流水的操作的情况下存储资源得以控制在适宜的范围内的关键。
控制器1用于接收外部CPU接口的配置信息,配置信息包括FFT计算类型及旋转因子表的初始化数据。在控制器1中存储有深度为64的查找表,支持64个条目,因此最多支持64种FFT计算类型。所述FFT计算类型的取值范围为0到63中任意整数,控制器1通过接收外部CPU接口配置的FFT计算类型,将FFT计算类型作为查找表的索引(地址),在查找表中索引得到N、N1、N2、N3和N4,不需要硬件计算N、N1、N2、N3和N4,减少了设计复杂度。这种配置方式灵活多变,可以一次配全64个查找表条目支持64种FFT计算类型,支持利用八种子FFT运算(1点、2点、3点、4点、5点、6点、8点或9点的FFT运算)混合实现本实施例中4G LTE和5G NR下的各种要求点数的FFT运算。本实施例中,查找表需要支持4G LTE和5G NR的35种点数的FFT运算,可以将查找表的前34个条目配置为4G LTE的FFT计算类型,第35个条目配置为5G NR的FFT计算类型,剩余29个条目可以全配置1,表示不执行FFT运算,使用时不去索引35~63的条目即可。这种配置查找表的方法表示当前FFT实现装置可以支持35种FFT运算,具体查找表如表1所示。
表1查找表
控制器1在查找表中索引得到N、N1、N2、N3和N4后,向数据存储器2、FFT运算器 3和旋转因子存储器5发送FFT点数N以及子FFT点数N1、N2、N3和N4,分别对数据存储器2、FFT运算器3和旋转因子存储器5进行配置。
另外,控制器1向数据存储器2中每个数据存储单元发送读使能、写使能和读地址、写地址,向乘法器4发送乘法使能信号,向旋转因子存储器5发送旋转因子表的初始化数据,向旋转因子存储器5发送读使能和读地址,控制旋转因子存储器5中的旋转因子的读出到乘法器4中。
本实施例中所述的FFT实现装置通过8种子FFT运算(1点、2点、3点、4点、5点、 6点、8点或9点)与控制器1中64个条目的查找表的灵活运用,借助数据存储器2中7个数据存储单元做乒乓读写操作,可以无冗余地实现本实施例约定条件下的要求点数的FFT运算,而不用先实现点数为2的幂次方的FFT运算,再通过补零来完成对应的4G LTE和5G NR 下支持点数的FFT运算。
数据存储器2、FFT运算器3和乘法器4在用芯片实现时可以流水线方式实现,这样整体FFT实现装置为流水线式装置。因此本实施例所述的FFT实现装置在使用数字芯片实现时可以通过改变输入待运算数据的位宽和系统支持的时钟来控制FFT运算速度,用以适配多种通信系统需要的FFT运算速度。
实施例3:
本实施例公开了一种用于通信系统的FFT实现方法,包括如下步骤:
控制器1根据所述通信系统要求的FFT点数以及实现所述FFT点数时的每个子FFT计算单元的子FFT点数初始化数据存储器2、FFT运算器3和旋转因子存储器5;
第一个子FFT计算单元从数据存储器2中读取待运算数据,对待运算数据进行对应子FFT 点数的子FFT运算后得到结果,将所述结果输入乘法器4,将旋转因子存储器5中的旋转因子输入乘法器4,在乘法器4中将所述结果与旋转因子进行复数乘法运算后得到第一次子FFT 迭代结果,将所述第一次子FFT迭代结果存入数据存储器2中;
下一个子FFT计算单元从数据存储器2中读取当前子FFT迭代结果,对当前子FFT迭代结果进行对应子FFT点数的子FFT运算后得到下一个结果,将所述下一个结果输入乘法器4,将旋转因子存储器5中的旋转因子输入乘法器4,在乘法器4中将所述下一个结果与旋转因子进行复数乘法运算后得到下一次子FFT迭代结果,将所述下一次子FFT迭代结果存入数据存储器2中;重复上述过程,直到最后一个子FFT计算单元从数据存储器2中读取上一次子FFT迭代结果,对上一次子FFT迭代结果进行对应子FFT点数的子FFT运算后得到最后一次子FFT迭代结果,将所述最后一次子FFT迭代结果存入数据存储器2中;
从数据存储器2中读取最后一次子FFT迭代结果,作为所述通信系统要求的FFT点数的 FFT运算结果。
进一步的,控制器1中存储有查找表,控制器1从查找表中索引得到所述通信系统要求的FFT点数以及实现所述FFT点数时的每个子FFT计算单元的子FFT点数。
实施例4:
在实施例2所述FFT实现装置的基础上,本实施例提出了一种通信系统中的FFT实现方法,包括如下步骤:
步骤一:根据要求的FFT点数N初始化FFT实现装置,包括:
步骤101:输入FFT计算类型到控制器1中,控制器1将FFT计算类型作为控制器1中查找表的索引,从查找表中读出FFT点数N以及4个子FFT点数N1、N2、N3和N4。其中,控制器1中的查找表为外接的CPU根据控制器1提供的CPU接口预先配置。
具体地,所述FFT计算类型的取值范围为0到63中任意整数,控制器1根据输入的FFT 计算类型作为查找表的索引(地址)去读取查找表内容,获取得到N、N1、N2、N3和N4,控制器1再将N、N1、N2、N3和N4传输到数据存储器2、FFT运算器3和旋转因子存储器 5中,其中包括将N1传输给第一子FFT计算单元31,N2传输给第二子FFT计算单元32, N3传输给第三子FFT计算单元33,N4传输给第四子FFT计算单元34。
步骤102:FFT实现装置外接的CPU通过控制器1提供的CPU接口预先初始化旋转因子存储器5中的3个旋转因子存储单元中的旋转因子表。
具体地,外接的CPU根据N、N1、N2、N3和N4可以计算出三张旋转因子表中的具体旋转因子,再通过控制器1将旋转因子写入旋转因子存储器5中的三张旋转因子表,完成三张旋转因子表初始化工作。在定位故障时外接的CPU可以通过控制器1的CPU接口读三张旋转因子表的数据,判断三张旋转因子表是否初始化成功。
通过步骤101~102,完成本实施例中所述FFT实现装置的初始化工作。
下面再具体地介绍本实施例的后续操作步骤前先介绍数据存储器2中7个数据存储单元的读过程和写过程以及旋转因子存储器5中的3个旋转因子存储单元的读过程。通过定义 data_mem_write和data_mem_read来分别说明7个数据存储单元的写过程和读过程,通过定义twiddle_mem_read来分别说明3个旋转因子存储单元的读过程。
定义数据存储器2中每个数据存储单元的通用写过程data_mem_write为:
data_mem_write(MEM_DEPTH1,VALID1,SWITCH_SIZE)
输入包括:当前数据存储单元的深度MEM_DEPTH1;当前写数据是否有效的指示信号 VALID1;当前数据存储单元进行乒乓操作切换的最大空间SWITCH_SIZE
输出包括:写使能wr_enable;写地址wr_addr
具体的:
(1)当VALID1为FALSE时,即指示信号无效时,不产生写使能,即wr_enable=FALSE;
当VALID1为TRUE时,即指示信号有效时,产生写使能,即wr_enable=TRUE,写地址wr_addr从0开始,每写一次以步进1递增;
(2)当写地址wr_addr大于SWITCH_SIZE-1时,写地址wr_addr变为MEM_DPETH1/2,然后写地址wr_addr从MEM_DPETH1/2开始,每写一次以步进1递增;
(3)当写地址wr_addr大于MEM_DEPTH1/2+SWITCH_SIZE-1时,写地址wr_addr变为0,返回(1)继续写入数据。
定义数据存储器2中每个数据存储单元的通用读过程data_mem_read为:
data_mem_read(MEM_DEPTH1,BURST_SIZE,STEP)
输入包括:当前数据存储单元的深度MEM_DEPTH1;当前数据存储单元连续突发读的大小BURST_SIZE,当数据存储单元已存储数据数量达到BURST_SIZE时,连续开始读出BURST_SIZE个数据;每读一次读地址递增的大小STEP
输出包括:读使能rd_enable;读地址rd_addr
具体的:
(1)当数据存储单元中已存储数据数量为BURST_SIZE时,产生读使能rd_enable,即 rd_enable=TRUE,起始地址start_addr1为0,读地址rd_addr从start_addr1开始,每读一次读地址rd_addr增加STEP;
(2)当读地址rd_addr大于BURST_SIZE-1时,起始地址start_addr1加1,读地址rd_addr 从start_addr1开始,每读一次读地址rd_addr增加STEP;
(3)重复(2)直到读出BURST_SIZE个数据后改变起始地址 start_addr1=MEM_DPETH1/2;
(4)重复(1)(2)(3)直到再次读出BURST_SIZE个数据后改变起始地址start_addr1=0,依次重复(1)(2)(3)(4)继续读取数据。
定义旋转因子存储器2中每个旋转因子存储单元的通用读过程twiddle_mem_read为:
twiddle_mem_read(MEM_DEPTH2,VALID2,STEP)
输入包括:当前旋转因子存储器的深度MEM_DEPTH2;读旋转因子的使能指示信号VALID2;每读一次读地址递增的大小STEP
输出包括:读使能tw_rd_enable;读地址tw_rd_addr
具体的:
(1)当VALID2为FALSE时,不产生读使能,即tw_rd_enable=FALSE;
当VALID2=TRUE时,产生读使能tw_rd_enable,即tw_rd_enable=TRUE,起始地址tw_start_addr为0,读地址tw_rd_addr从tw_start_addr开始,每读一次读地址tw_rd_addr增加STEP;
(2)当读地址rd_addr大于MEM_DEPTH-1时,起始地址tw_start_addr加1,读地址tw_rd_addr从tw_start_addr开始,每读一次读地址tw_rd_addr增加STEP。
以下将第一子FFT计算单元31的输出,即N1点子FFT运算的结果,与第一旋转因子存储单元51输出的旋转因子做复数乘法得到的计算结果称为第一次子FFT迭代结果;将第二子FFT计算单元32的输出,即N2点子FFT运算的结果,与第二旋转因子存储单元52输出的旋转因子做复数乘法得到的计算结果称为第二次子FFT迭代结果;将第三子FFT计算单元33的输出,即N3点子FFT运算的结果,与第三旋转因子存储单元53输出的旋转因子做复数乘法得到的计算结果称为第三次子FFT迭代结果,将第四子FFT计算单元34的输出,即N4点子FFT运算的结果称为第四次子FFT运算结果。
步骤二、控制器1控制待运算数据做N1点子FFT运算并将第一次子FFT迭代结果存入第三存储单元23中。该步骤分201~206来详细说明:
步骤201:控制器1根据输入数据是否有效的指示信号,控制有效的输入数据写入第一数据存储单元21中,得到待运算数据。
具体地,所述控制器1控制有效的输入数据写入第一数据存储单元21中,通过控制第一数据存储单元21的写使能和写地址来完成,所述写使能和写地址的通过如下写过程得到:
data_mem_write(8192,“输入数据是否有效的指示信号”,N)
其中,8192为第一数据存储单元21的深度,N为第一数据存储单元21进行乒乓操作切换的最大空间。
步骤202:控制器1将待运算数据从第一数据存储单元21中读出,写入第二数据存储单元22中。
具体地,所述控制器1将待运算数据从第一数据存储单元21中读出,通过控制第一数据存储单元21的读使能和读地址来完成,所述读使能和读地址通过如下读过程得到:
data_mem_read(8192,N,N3*N4)
其中,8192为第一数据存储单元21的深度,N为第一数据存储单元21连续突发读的大小, N3*N4为每读一次读地址递增的大小。
具体地,所述控制器1控制第一数据存储单元21中读出的数据写入第二数据存储单元 22中,通过控制第二数据存储单元22的写使能和写地址来完成,所述写使能和写地址通过如下写过程得到:
data_mem_write(128,“第一数据存储单元21读数据是否有效”,N1*N2)
其中,128为第二数据存储单元22的深度,“第一数据存储单元21读数据是否有效”为第二数据存储单元22写数据是否有效的指示信号,第一数据存储单元21有数据输出则表示第一数据存储单元21读数据有效,N1*N2为第二数据存储单元22进行乒乓操作切换的最大空间。
步骤203:控制器1将第二数据存储单元22中的数据读出,传输到第一子FFT计算单元31中。
具体地,所述控制器1将第二数据存储单元22中的数据读出,通过控制器1产生第二数据存储单元22的读使能和读地址来完成,所述读使能和读地址通过如下读过程得到:
data_mem_read(128,N1*N2,N2)
其中,128为第二数据存储单元22的深度,N1*N2表示第二数据存储单元22连续突发读的大小,N2表示每读一次读地址递增的大小。
然后控制器1将第二数据存储单元22读出的数据传输到第一子FFT计算单元31。
控制器1将数据写入并读出第一数据存储单元21和第二数据存储单元22是为了达到每 N个待运算数据做重排的效果,为每N个待运算数据做N2*N3*N4次N1点子FFT运算做准备。若仅使用第一数据存储单元21做重排,控制器1产生读地址逻辑复杂,需要二次处理,不能使用上述定义的通用读过程,故为了使控制器1读过程一致,便于设计简单,引入128 深度的第二数据存储单元22作为中间存储,利用存储资源简化逻辑复杂度的思想,简化设计。
步骤204:第一子FFT计算单元31接收到第二数据存储单元22输出的数据,完成N1点子FFT运算。
步骤205:控制器1将第一子FFT计算单元31的输出和第一旋转因子存储单元51输出的旋转因子传输到第一复数乘法单元41中做复数乘法。
具体地,控制器1根据第一子FFT计算单元31每输出一个有效数据,就从第一旋转因子存储单元51中读出一个旋转因子,作为第一旋转因子存储单元51的输出。
具体地,所述控制器1从第一旋转因子存储单元51中读出一个旋转因子,通过控制第一旋转因子存储单元51的读使能和读地址完成,所述读使能和读地址通过如下读过程得到:
twiddle_mem_read(64,“第一子FFT计算单元31输出的数据是否有效”,N2)
其中,64为第一旋转因子存储单元51的深度,“第一子FFT计算单元31输出的数据是否有效”为第一旋转因子存储单元51读旋转因子的使能指示信号,第一子FFT计算单元31有数据输出则表示第一子FFT计算单元31输出的数据有效,N2表示每读一次读地址递增的大小。
步骤206:控制器1将第一复数乘法单元41的输出存入第三数据存储单元23中。
具体地,控制器1将第一复数乘法单元41的输出存入第三数据存储单元23中,通过控制第三数据存储单元的写使能和写地址来完成,所述写使能和写地址通过如下写过程得到:
data_mem_write(128,“第一复数乘法单元41输出的数据是否有效”,N1*N2)
其中,128为第三数据存储单元23的深度,“第一复数乘法单元41输出的数据是否有效”为第三数据存储单元23写数据是否有效的指示信号,第一复数乘法单元41有数据输出则表示第一复数乘法单元41输出的数据有效,N1*N2为第三数据存储单元23进行乒乓操作切换的最大空间。
通过步骤201~206完成N1点子FFT运算并将第一次子FFT迭代结果存入第三数据存储单元23中。
步骤三、控制器1控制第一次子FFT迭代结果做N2点子FFT运算并将第二次子FFT迭代结果存入第四数据存储单元24中。该步骤分301~304来详细说明:
步骤301:控制器1将第一次子FFT迭代结果从第三数据存储单元23中读出,输出给第二子FFT计算单元32。
具体地,所述控制器1将第一次子FFT迭代结果从第三数据存储单元23中读出,通过控制第三数据存储单元23的读使能和读地址来完成,所述读使能和读地址通过如下读过程得到:
data_mem_read(128,N1*N2,N1)
其中,128为第三数据存储单元23的深度,N1*N2为第三数据存储单元23连续突发读的大小,N1为每读一次读地址递增的大小。
控制器1将第一次子FFT迭代结果写入并读出第三数据存储单元23是为了达到每N1*N2 个第一次子FFT迭代结果做重排的效果,为每N1*N2个第一次子FFT迭代结果做N1次N2 点子FFT运算做准备。
步骤302:第二子FFT计算单元32接收到第三数据存储单元23输出的数据,完成N2点子FFT运算。
步骤303:控制器1将第二子FFT计算单元32的输出和第二旋转因子存储单元52输出的旋转因子传输到第二复数乘法单元42中做复数乘法。
具体地,控制器1根据第二子FFT计算单元32每输出一个有效数据,就从第二旋转因子存储单元52中读出一个旋转因子,作为第二旋转因子存储单元52的输出。
具体地,所述控制器1从第二旋转因子存储单元52中读出一个旋转因子,通过控制第二旋转因子存储单元52的读使能和读地址完成,所述读使能和读地址通过如下读过程得到:
twiddle_mem_read(4096,“第二子FFT计算单元32输出的数据是否有效”,N3*N4)
其中,4096为第二旋转因子存储单元52的深度,“第二子FFT计算单元32输出的数据是否有效”为第二旋转因子存储单元52读旋转因子的使能指示信号,第二子FFT计算单元32有数据输出则表示第二子FFT计算单元32输出的数据有效,N3*N4表示每读一次读地址增递增的大小。
步骤304:控制器1将第二复数乘法单元42的输出存入第四数据存储单元24中。
具体地,控制器1将第二复数乘法单元42的输出存入第四数据存储单元24中,通过控制第四数据存储单元的写使能和写地址来完成,所述写使能和写地址通过如下写过程得到:
data_mem_write(8192,“第二复数乘法器42输出的数据是否有效”,N)
其中,8192为第四数据存储单元24的深度,“第二复数乘法器42输出的数据是否有效”为第四数据存储单元24写数据是否有效的指示信号,第二复数乘法器42有数据输出则表示第二复数乘法器42输出的数据有效,N为第四数据存储单元24进行乒乓操作切换的最大空间。
通过步骤301~304完成N2点子FFT运算并将第二次子FFT迭代结果存入第四数据存储单元24中。
步骤四、控制器1控制第二次子FFT迭代结果做N3点子FFT运算并将第三次子FFT迭代结果存入第六数据存储单元26中。该步骤分401~405来详细说明:
步骤401:控制器1将第二次子FFT迭代结果从第四数据存储单元24中读出,写入第五数据存储单元25中。
具体地,所述控制器1将第二次子FFT迭代结果从第四数据存储单元24中读出,通过控制第四数据存储单元24的读使能和读地址来完成,所述读使能和读地址通过如下读过程得到:
data_mem_read(8192,N,N1*N2)
其中,8192为第四数据存储单元24的深度,N为第四数据存储单元24连续突发读的大小, N1*N2为每读一次读地址递增的大小。
具体地,所述控制器1控制第四数据存储单元24读出的数据写入第五数据存储单元25 中,通过控制第五数据存储单元25的写使能和写地址来完成,所述写使能和写地址通过如下写过程得到:
data_mem_write(128,“第四数据存储单元24读数据是否有效”,N3*N4)
其中,128为第五数据存储单元25的深度,“第四数据存储单元24读数据是否有效”为第五数据存储单元25写数据是否有效的指示信号,第四数据存储单元24有数据输出则表示第四数据存储单元24读数据有效,N3*N4为第五数据存储单元25进行乒乓操作切换的最大空间。
步骤402:控制器1将第五存储单元25中的第二次FFT迭代数据读出,传输到第三子FFT计算单元33。
具体地,所述控制器1将第五存储单元25中第二次子FFT迭代数据读出,通过控制器1 产生第五数据存储单元25的读使能和读地址来完成,所述读使能和读地址通过如下读过程得到:
data_mem_read(128,N3*N4,N4)
其中,128为第五数据存储单元25的深度,N3*N4表示第五数据存储单元25连续突发读的大小,N4表示每读一次读地址递增的大小。
然后控制器1将第五数据存储单元25读出的数据传输到第三子FFT计算单元33。
控制器1将第二次子FFT迭代结果写入并读出第四数据存储单元24和第五数据存储单元25是为了达到每N个第二次子FFT迭代结果做重排的效果,为每N个第二次子FFT迭代结果做N1*N2*N4次N3点子FFT运算做准备。若是仅使用第四数据存储单元24做存储和重排,控制器1产生读地址逻辑复杂,需要二次处理,不能使用上述定义的通用读过程,故为了使控制器1读过程一致,便于设计简单,引入128深度的第五数据存储单元25作为中间存储,利用存储资源简化逻辑复杂度的思想,简化设计。
步骤403:第三子FFT计算单元33接收到第五数据存储单元25输出的数据,完成N3点子FFT运算。
步骤404:控制器1将第三子FFT计算单元33的输出和第三旋转因子存储单元53输出的旋转因子传输到第三复数乘法单元43中做复数乘法。
具体地,控制器1根据第三子FFT计算单元33每输出一个有效数据,就从第三旋转因子存储单元53中读出一个旋转因子,作为第三旋转因子存储单元53的输出。
具体地,所述控制器1从第三旋转因子存储单元53中读出一个旋转因子,通过控制第三次旋转因子存储单元53的读使能和读地址完成,所述读使能和读地址通过如下读过程得到:
twiddle_mem_read(64,“第三子FFT计算单元33输出的数据是否有效”,N4)
其中,64为第三旋转因子存储单元53的深度,“第三子FFT计算单元33输出的数据是否有效”为第三旋转因子存储单元53读旋转因子的使能指示信号,第三子FFT计算单元33有数据输出则表示第三子FFT计算单元33输出的数据有效,N4表示每读一次读地址递增的大小。
步骤405:控制器1将第三复数乘法单元43的输出存入第六数据存储单元26中。
具体地,所述控制器1将第三复数乘法单元43的输出存入第六数据存储单元26中,通过控制第六数据存储单元26的写使能和写地址来完成,所述写使能和写地址通过如下写过程得到:
data_mem_write(128,“第三复数乘法单元43输出的数据是否有效”,N3*N4)
其中,128为第六数据存储单元26的深度,“第三复数乘法单元43输出的数据是否有效”为第六数据存储单元26写数据是否有效的指示信号,第三复数乘法单元43有数据输出则表示第三复数乘法单元43输出的数据有效,N3*N4为第六数据存储单元26进行乒乓操作切换的最大空间。
通过步骤401~405完成N3点子FFT运算并将第三次子FFT迭代结果存入第六数据存储单元26中。
步骤五、控制器1控制第三次子FFT迭代结果做N4点子FFT运算并将第四次子FFT迭代结果存入第七数据存储单元27中,由控制器1保序读出,即为待运算数据的N点FFT运算的最终结果。该步骤分501~504来详细说明:
步骤501:控制器1将第六数据存储单元26中的第三次子FFT迭代结果读出,传输到第四子FFT计算单元34中。
具体地,所述控制器1将第六数据存储单元26中第三次迭代结果读出,通过控制器1产生第六数据存储单元26的读使能和读地址来完成,所述读使能和读地址通过如下读过程得到:
data_mem_read(128,N3*N4,N3)
其中,128为第六数据存储单元26的深度,N3*N4表示第六数据存储单元26连续突发读的大小,N3表示每读一次读地址递增的大小。
然后控制器1将第六数据存储单元26读出的数据传输到第四子FFT计算单元34。
控制器1将第三次子FFT迭代结果写入并读出第六数据存储单元26是为了达到每N3*N4 个第三次子FFT迭代结果做重排的效果,为每N3*N4个第三次子FFT迭代结果做N3次N4 点子FFT运算做准备。
步骤502:第四子FFT计算单元34接收到第六数据存储单元26输出的数据,完成N4点子FFT运算。
步骤503:第四次子FFT迭代结果不做复数乘法,直接由第四子FFT计算单元34传输到数据存储器2中,由控制器1控制写入第七数据存储单元27中。
具体地,所述控制器1将第四次子FFT迭代结果写入第七数据存储单元27中,通过控制第七数据存储单元27的写使能和写地址来完成,所述写使能和写地址通过如下写过程得到:
data_mem_write(8192,“第四子FFT计算单元34输出的数据是否有效”,N)
其中,第8192为第七数据存储单元27的深度,“第四子FFT计算单元34输出的数据是否有效”为第七数据存储单元27写数据是否有效的指示信号,第四子FFT计算单元34有数据输出则表示第四子FFT计算单元34输出的数据有效,N为第七数据存储单元27进行乒乓操作切换的最大空间。
步骤504:控制器1将第四次子FFT迭代结果从第七数据存储单元27中读出,作为待运算数据的N点FFT运算的最终结果。
具体地,由于进行4次子FFT运算后,N点FFT运算的结果已经得到,但是N点FFT 运算的结果由于计算出现乱序,需要做保序输出,故先将N点FFT运算的结果存入第七数据存储单元27,然后控制器1控制第七数据存储单元27的读使能和读地址,将N点FFT运算的结果从第七数据存储单元27中保序读出。
具体地,所述将N点FFT运算的结果从第七数据存储单元27中读出,通过控制器1通过控制第七数据存储单元27的读使能和读地址完成,所述读使能和读地址通过如下读过程得到:
data_mem_read(8192,N,N3*N4)
其中,8196为第七数据存储单元27的深度,N表示第七数据存储单元27连续突发读的大小, N3*N4表示每读一次读地址递增的大小。
读出的结果为待运算数据的N点FFT运算的最终结果。
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种用于通信系统的FFT实现装置,其特征在于,包括控制器(1)、数据存储器(2)、FFT运算器(3)、乘法器(4)和旋转因子存储器(5),其中:
FFT运算器(3)包括对应设定子FFT点数集合的若干子FFT计算单元,所有子FFT计算单元的输入连接数据存储器(2),其中一个子FFT计算单元的输出连接数据存储器(2),其余的子FFT计算单元的输出连接乘法器(4),每个子FFT计算单元用于实现设定子FFT点数集合中任一子FFT点数的子FFT运算,所有子FFT计算单元的子FFT点数的乘积等于所述通信系统要求的FFT点数;
旋转因子存储器(5)用于存储旋转因子;
乘法器(4)连接旋转因子存储器(5),用于实现与其连接的每个子FFT计算单元的输出和旋转因子存储器(5)中旋转因子的复数乘法运算;
数据存储器(2)连接乘法器(4),用于存储与其连接的子FFT计算单元和乘法器(4)的输出;
控制器(1)分别连接数据存储器(2)、FFT运算器(3)、乘法器(4)和旋转因子存储器(5),用于配置数据存储器(2)、FFT运算器(3)和旋转因子存储器(5),以及控制数据存储器(2)、FFT运算器(3)、乘法器(4)和旋转因子存储器(5)。
2.根据权利要求1所述的一种用于通信系统的FFT实现装置,其特征在于,FFT运算器(3)包括第一子FFT计算单元(31)、第二子FFT计算单元(32)、第三子FFT计算单元(33)和第四子FFT计算单元(34);
旋转因子存储器(5)包括第一旋转因子存储单元(51)、第二旋转因子存储单元(52)和第三旋转因子存储单元(53);
乘法器(4)包括第一复数乘法单元(41)、第二复数乘法单元(42)和第三复数乘法单元(43),其中:第一复数乘法单元(41)连接第一子FFT计算单元(31)和第一旋转因子存储单元(51),第二复数乘法单元(42)连接第二子FFT计算单元(32)和第二旋转因子存储单元(52),第三复数乘法单元(43)连接第三子FFT计算单元(33)和第三旋转因子存储单元(53);
数据存储器(2)包括第一数据存储单元(21)、第二数据存储单元(22)、第三数据存储单元(23)、第四数据存储单元(24)、第五数据存储单元(25)、第六数据存储单元(26)和第七数据存储单元(27),其中:第二数据存储单元(22)连接第一数据存储单元(21)和第一子FFT计算单元(31),第三数据存储单元(23)连接第一复数乘法单元(41)和第二子FFT计算单元(32),第四数据存储单元(24)连接第二复数乘法单元(42)和第五数据存储单元(25),第五数据存储单元(25)连接第四数据存储单元(24)和第三子FFT计算单元(33),第六数据存储单元(26)连接第三复数乘法单元(43)和第四子FFT计算单元(34),第七数据存储单元(27)连接第四子FFT计算单元(34)。
3.根据权利要求2所述的一种用于通信系统的FFT实现装置,其特征在于,第一子FFT计算单元(31)的子FFT点数与第二子FFT计算单元(32)的子FFT点数的乘积小于或等于第一阈值,第三子FFT计算单元(33)的子FFT点数与第四子FFT计算单元(34)的子FFT点数的乘积小于或等于第二阈值,第一阈值和第二阈值的乘积等于所述通信系统要求的最大FFT点数。
4.根据权利要求3所述的一种用于通信系统的FFT实现装置,其特征在于,第一旋转因子存储单元(51)的深度至少为第一阈值;
第二旋转因子存储单元(52)的深度至少为第一阈值和第二阈值的乘积;
第三旋转因子存储单元(53)的深度至少第二阈值。
5.根据权利要求3所述的一种用于通信系统的FFT实现装置,其特征在于,第一数据存储单元(21)、第四数据存储单元(24)和第七数据存储单元(27)的深度均至少为第一阈值和第二阈值的乘积的2倍;
第二数据存储单元(22)、第三数据存储单元(23)的深度至少为第一阈值的2倍;
第五数据存储单元(25)和第六数据存储单元(26)的深度至少为第二阈值的2倍。
6.根据权利要求1或2所述的一种用于通信系统的FFT实现装置,其特征在于,旋转因子存储器(5)采用RAM实现。
7.根据权利要求1或2所述的一种用于通信系统的FFT实现装置,其特征在于,控制器(1)中存储查找表,查找表中包括若干条目,每个条目包括所述通信系统要求的FFT点数以及实现所述FFT点数时的每个子FFT计算单元对应的子FFT点数。
8.根据权利要求1或2所述的一种用于通信系统的FFT实现装置,其特征在于,所述设定子FFT点数集合为{1,2,3,4,5,6,8,9}。
9.一种用于通信系统的FFT实现方法,其特征在于,包括如下步骤:
控制器(1)根据所述通信系统要求的FFT点数以及实现所述FFT点数时的每个子FFT计算单元的子FFT点数,初始化数据存储器(2)、FFT运算器(3)和旋转因子存储器(5);
第一个子FFT计算单元从数据存储器(2)中读取待运算数据,对待运算数据进行对应子FFT点数的子FFT运算后得到结果,将所述结果输入乘法器(4),将旋转因子存储器(5)中的旋转因子输入乘法器(4),在乘法器(4)中将所述结果与旋转因子进行复数乘法运算后得到第一次子FFT迭代结果,将所述第一次子FFT迭代结果存入数据存储器(2)中;
下一个子FFT计算单元从数据存储器(2)中读取当前子FFT迭代结果,对当前子FFT迭代结果进行对应子FFT点数的子FFT运算后得到下一个结果,将所述下一个结果输入乘法器(4),将旋转因子存储器(5)中的旋转因子输入乘法器(4),在乘法器(4)中将所述下一个结果与旋转因子进行复数乘法运算后得到下一次子FFT迭代结果,将所述下一次子FFT迭代结果存入数据存储器(2)中;重复上述过程,直到最后一个子FFT计算单元从数据存储器(2)中读取上一次子FFT迭代结果,对上一次子FFT迭代结果进行对应子FFT点数的子FFT运算后得到最后一次子FFT迭代结果,将所述最后一次子FFT迭代结果存入数据存储器(2)中;
从数据存储器(2)中读取最后一次子FFT迭代结果,作为对应所述要求的FFT点数的FFT运算结果。
10.根据权利要求9所述的一种用于通信系统的FFT实现方法,其特征在于,控制器(1)中存储有查找表,控制器(1)从查找表中索引得到所述通信系统要求的FFT点数以及实现所述FFT点数时的每个子FFT计算单元的子FFT点数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111666217.2A CN114297570A (zh) | 2021-12-31 | 2021-12-31 | 一种用于通信系统的fft实现装置及其实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111666217.2A CN114297570A (zh) | 2021-12-31 | 2021-12-31 | 一种用于通信系统的fft实现装置及其实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114297570A true CN114297570A (zh) | 2022-04-08 |
Family
ID=80973196
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111666217.2A Pending CN114297570A (zh) | 2021-12-31 | 2021-12-31 | 一种用于通信系统的fft实现装置及其实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114297570A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117389946A (zh) * | 2023-11-09 | 2024-01-12 | 合肥灿芯科技有限公司 | 一种可动态扩展点数的fft实现结构 |
-
2021
- 2021-12-31 CN CN202111666217.2A patent/CN114297570A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117389946A (zh) * | 2023-11-09 | 2024-01-12 | 合肥灿芯科技有限公司 | 一种可动态扩展点数的fft实现结构 |
CN117389946B (zh) * | 2023-11-09 | 2024-05-28 | 合肥灿芯科技有限公司 | 一种可动态扩展点数的fft实现结构 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7164723B2 (en) | Modulation apparatus using mixed-radix fast fourier transform | |
US10152455B2 (en) | Data processing method and processor based on 3072-point fast Fourier transformation, and storage medium | |
US9910671B2 (en) | Vector operation core and vector processor | |
CN101847986B (zh) | 一种实现fft/ifft变换的电路及方法 | |
Boopal et al. | A reconfigurable FFT architecture for variable-length and multi-streaming OFDM standards | |
CN111737638A (zh) | 基于傅里叶变换的数据处理方法及相关装置 | |
US12009948B2 (en) | Data processing apparatus and method, base station, and storage medium | |
CN107391439B (zh) | 一种可配置快速傅里叶变换的处理方法 | |
CN114297570A (zh) | 一种用于通信系统的fft实现装置及其实现方法 | |
EP3370161B1 (en) | Adapting the processing of decomposed ffts to match the number of data points processed in parallel | |
CN105718424B (zh) | 一种并行快速傅立叶变换处理方法 | |
US9268744B2 (en) | Parallel bit reversal devices and methods | |
CN101938442B (zh) | Dft处理器的预检测基运算方法、混合基运算方法和系统 | |
CN102810087B (zh) | 一种傅立叶变换的实现装置 | |
CN112163184A (zh) | 一种实现fft的装置及方法 | |
EP2538345A1 (en) | Fast fourier transform circuit | |
US8010588B2 (en) | Optimized multi-mode DFT implementation | |
US9582473B1 (en) | Instruction set to enable efficient implementation of fixed point fast fourier transform (FFT) algorithms | |
KR100557160B1 (ko) | 고속 퓨리에 변환을 이용한 혼합-기수 방식의 변조 장치 | |
US20140219374A1 (en) | Efficient multiply-accumulate processor for software defined radio | |
CN111368250A (zh) | 基于傅里叶变换/逆变换的数据处理系统、方法及设备 | |
JP5131346B2 (ja) | 無線通信装置 | |
Karachalios et al. | A new FFT architecture for 4× 4 MIMO-OFDMA systems with variable symbol lengths | |
KR20120101807A (ko) | 메모리 기반 고속 푸리에 변환 프로세서 | |
CN116805027A (zh) | Dft复用方法及装置、通信设备、存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |