一种用于快速傅里叶变换的数据存储及调度方法
【专利摘要】一种用于快速傅里叶变换的数据存储及调度方法,步骤为:S1:数据的输入端口从Data输入;输入对应的数据存储配置信息,数据先放入一个深度为4的存储块中;S2:在深度为4的数据队列中,假设当前队列的状态位是满状态,则开始将队列中的数据四路输入到DM模块中;S3:当前的DM模块中的数据数量达到要求时,启动DM模块,通过配置信息,将当前的4*4的空间数据流出;S4:经过一轮复数乘法与基四变换,数据通过队列开始输入到DM模块;S5:DM配置信息进行改变,修改输入端口;S6:通过改变DM配置信息改变输出,将输出端口修改后输出到数据队列中,得到正序的数据结果。本发明具有能使数据输出延时时钟数减少、使资源消耗减少等优点。
【专利说明】
-种用于快速傅里叶变换的数据存储及调度方法
技术领域
[0001] 本发明主要设及无线通信系统信号处理(FDM调制解调核屯、运算模块领域,特指一 种用于快速傅里叶变换的数据存储及调度方法,W解决快速傅里叶变换中的数据调度流水 化问题。
【背景技术】
[0002] 正交频分复用(0抑M,(Orthogonal Frequen巧 Division Multiplexing)技术是一 种可W有效对抗符号间干扰的高速传输技术,它可W将一个频率选择衰减信道分解到多个 扁平子信道上,并且更便于均衡。其次,OFDM技术可W使各个子载波重叠起来,增加了频谱 的利用率。它将数据加载在多个子载波上,利用并行的低速数据同时传送来达到高速传输 数据的目的,并且,在传输信号中加入循环前缀(CP)来消除符号间干扰(Inter-symbol interference,ISI)的干扰,提高了无线通信传输过程中的可靠性。
[0003] FFT/IFFT运算模块是OFDM系统中的核屯、模块,其功能是完成信号的调制解调。由 于(FDM系统需要完成高速的数据传输,运就要求FFT/IFFT运算模块能够处理高吞吐率的数 据。另外,根据OFDM的系统架构,收发两端的每个通路中都需要FFT运算。所W ,FFT/IFFT运 算模块的硬件时间消耗将直接影响OFDM系统占用的总体效率。
[0004] 序列x(n),n = 0,. . .,N-1的离散傅里叶变换为:
[0005]
(1)
[0006] 相应的傅单叶逆变换为
[0007]
[000引说明IFFT可W通过FFT求出,因此FFT与IFFT可W用统一的硬件结构来实现。[0009] 对干FFT,设序列长原为N=4P(n为輕#),胳(1)式讲行变换如下:
[0012] 首先对采样点进行K点的行DFT,然后第二步乘W对应的旋转因子巧::""',表示n日行,m 列,最后做列的四点DFT变换。[0013] 当N等于4时的四点DFT运算为:
[0010]
[0011] (2)
[0014]
[0015] 可W看到四点DFT运算无需乘法,可W通过实部虚部的交叉加减实现四点DFT变 换,从而提高运算效率,减少处理时间。
【发明内容】
[0016] 本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一 种能够使数据的输出延时时钟数减少、使资源消耗减少、优化结构的用于快速傅里叶变换 的数据存储及调度方法。
[0017] 为解决上述技术问题,本发明采用W下技术方案:
[0018] -种用于快速傅里叶变换的数据存储及调度方法,其步骤为:
[0019] SI:数据的输入端口从Data输入,每个时钟为一个数据,与输入数据有效位;同时 输入对应的数据存储配置信息,通过该配置实现输入的数据按照规则进行存放,数据先放 入一个深度为4的存储块中;
[0020] S2:在深度为4的数据队列中,假设当前队列的状态位是满状态,则开始将队列中 的数据四路输入到DM模块中;
[0021] S3:当前的DM模块中的数据数量达到要求时,启动DM模块,通过配置信息,将当前 的4*4的空间数据流出;
[0022] S4:经过一轮复数乘法与基四变换,数据通过队列开始输入到DM模块;
[0023] S5: DM配置信息进行改变,修改输入端口;
[0024] S6:当前DM中存储的数据就是16点FFT之后的数据结果;但运种数据结果的数据是 逆向的,当前通过改变DM配置信息改变输出,将输出端口修改后输出到数据队列中,运样最 终得到就是正序的数据结果。
[0025] 作为本发明的进一步改进:所述步骤S2的详细过程为:
[0026] S201:16点FFT中起始,采用原位存储,也就是原地址存储;当前输入的数据每四个 数据为一组,由队列向DM模块进行传输;标记从外界输入的数据地址为0、1、2、3,则数据流 入到DM中的对应地址为12、13、14、15;
[0027] S202:下一批数据的输入:从外界来的数据地址为4、5、6、7,同样当队列当前状态 为满空间时,调用DM模块将运四个数据输入到地址同样为12、13、14、15的地址中,而原来的 数据流向地址8、9、10、11;
[0028] S203:重复步骤S202,直到16个数据都输入到DM模块中。
[0029] 作为本发明的进一步改进:所述步骤S3的流出规则为:
[0030] S301:输出端口为 12、8、4、0四处;
[0031 ] S302:对应的同一列的存储单元;对应于输出端口 12的存储单元13、14、15,按着时 钟节拍,数据流水化15-〉14、14-〉13、13-〉12、12-〉输出,同理对于输出端口8、4、0采取同样 操作;
[0032] 8303:输出的数据地址是0、4、8、12、1、5、9、13、2、6、10、14、3、7、11、15。
[0033] 作为本发明的进一步改进:所述步骤S4中的流出规则为:
[0034] 8401:输入端口为15、11、7、3;
[0035] S402:对于同一列的数据,数据流水化满足:输入-〉15、15-〉14、14-〉13、13-〉12。
[0036] 作为本发明的进一步改进:所述步骤S5的详细过程为:
[0037] S501:经过一次的复数乘法与基四变换结果存储到原地址,接下来启动第二次的 复数乘法与基四变换,本次的数据流向从原来的列输出到行输出,也就是15-〉11、11-〉7、 7-〉3、3-〉输出,其他=行采取同样操作;
[0038] S502:输出的数据经过复数乘法与基四变换之后,数据从队列向DM模块流入,流入 端口为15,14,13,12,同步骤S501 -样的流水方向。
[0039] 作为本发明的进一步改进:当扩展成64点的基四FFT时,将64点数据存储为S维结 构,在64点的数据结构中每一个点均是由四个数据组成的存储块,内部数据W顺序平移的 方式存在。
[0040] 作为本发明的进一步改进:将端口的信息情况映射成一个config的表,通过输入 的config信息进行查找,W满足当前数据流向的DM结构。
[0041] 与现有技术相比,本发明的优点在于:本发明的用于快速傅里叶变换的数据存储 及调度方法,原理简单、易实现,在实际应用后省略了实现地址转换的运算部件,减少了部 件资源的使用,同时提高了数据读取与写入的速度,对于满足当前的高速率存储带来便利, 更是对于傅里叶变换中的调度相契合。
【附图说明】
[0042] 图1是本发明在具体应用实例1中16点基四FFT(傅里叶变换)概况结构示意图。
[00创图視本发明在具体应用实例帥64点基四FFT(傅里叶变换)DM俯视结构示意图。
[0044] 图3是本发明在具体应用实例2中64点基四FFT(傅里叶变换)DM单个模块内部结构 示意图。
[0045] 图4是本发明在具体应用实例帥64点基四FFT(傅里叶变换)DM总体结构示意图。
【具体实施方式】
[0046] W下将结合说明书附图和具体实施例对本发明做进一步详细说明。
[0047] 实施例1:如图1所示,是依据本发明的方法获得的16点基四FFT(傅里叶变换)结构 示意图。其中,主体是DM,存储管理模块。在该实例中,本发明除却基四变换与复数乘法的内 部运算之外,包括W下步骤:
[004引SI:数据的输入端口从Data输入,每个时钟为一个数据,与输入数据有效位。同时 输入对应的数据存储配置信息,通过该配置实现输入的数据按照某种规则进行存放,数据 先放入一个深度为4的存储块中,便于接下来的数据四路并行化W及运行过程中四路数据 流的通道的并行。
[0049] S2:在深度为4的数据队列中,假设当前队列的状态位是满状态,则开始将队列中 的数据四路输入到DM模块中。
[0050] 在具体应用时,其具体运行过程如下:
[0051] 8201:16点FFT(傅里叶变换)中起始,设计是原位存储,意思就是原地址存储。当前 输入的数据每四个数据为一组,由队列向DM模块进行传输。传输端口为图1中的左边的数据 端口,标记从外界输入的数据地址为0、1、2、3,则数据流入到DM中的对应地址为12、13、14、 15;
[0052] S202:下一批数据的输入:从外界来的数据地址为4、5、6、7,同样当队列当前状态 为满空间时,调用DM模块将运四个数据输入到地址同样为12、13、14、15的地址中,而原来的 数据见图1向右流向地址8、9、10、11;
[0化3] S203:重复步骤S202,直到16个数据都输入到DM模块中。
[0054] S3:当前的DM模块中的数据数量达到要求时(当前要求个数是16),启动DM模块,通 过配置信息,将当前的4*4的空间数据W如下规则流出:
[0化5] S301:输出端口为12、8、4、0四处;
[0056] S302:对应的同一列的存储单元,如对应于输出端口 12的存储单元13、14、15,按着 时钟节拍,数据流水化15-〉14、14-〉13、13-〉12、12-〉输出,同样对于输出端口8、4、0采取同 样操作;
[0057] 8303:输出的数据地址是0、4、8、12、1、5、9、13、2、6、10、14、3、7、11、15;
[0058] S4:经过一轮复数乘法与基四变换,数据通过队列开始输入到DM模块,规则如下:
[0化9] 8401:输入端口为15、11、7、3;
[0060] S402:对于同一列的数据,数据流水化满足:输入-〉15、15-〉14、14-〉13、13-〉12;
[0061 ] S5:DM配置信息进行改变,输入端口改为12、13、14、15,输出端口改为0、1、2、3,具 体应用时,详细过程如下:
[0062] S501:经过一次的复数乘法与基四变换结果存储到原地址,接下来启动第二次的 复数乘法与基四变换,本次的数据流向从原来的列输出到行输出,也就是15-〉11、11->7、 7-〉3、3-〉输出,其他=行采取同样操作;
[0063] S502:输出的数据经过复数乘法与基四变换之后,数据从队列向DM模块流入,流入 端口为15,14,13,12,同步骤S501 -样的流水方向。
[0064] S6:当前DM中存储的数据就是16点FFT(傅里叶变换)之后的数据结果。但是,运种 数据结果的数据是逆向的,也就是说当前数据DM对应于内存中地址满足:0-0、1-4、2-8、 3-12、4一1、5-日、6-9、7-13、8-2、9一6、10-10、11一14、12-3、13-7、14一11、15-15, 所W当前通过改变DM配置信息改变输出,将输出端口由原来的0、1、2、3改为0、4、8、12输出 到数据队列中,运样最终得到就是正序的数据结果。
[0065] 实施例2:本发明进一步W实施例1(即图1)所示的结构作为基础,进行扩展成64点 的基四FFT(傅里叶变换)结构。
[0066] 分析64点的调度策略:第一级调度顺序为0~15、16~31、32~47、48~63,即每个 时钟节拍输出的数据地址为〇、16、32、48作为输出端口,其后地址的数据流水流向该四个端 口,如1~15的数据流向输出端口0。第二级调度顺序为0、4、8、12,同上述16点基四变换的第 一阶段调度顺序不谋而合,也就是说兼容上述的16点设计体系。后续的数据地址根据输出 端口分为四组:1~3、16~19、32~35、48~51对应于输出端口0;5~7、20~23、36~39、52~ 55对应于输出端口4;9~11、24~27、40~43、56~59对应于输出端口8;13~15、28~31、44 ~47、60~63对应于输出端口 12。第S级调度顺序输出端口为0、1、2、3,满足16点调度顺序 第二阶段。其对应的地址划分同样为4组:地址为4*N的对应于输出端口 0;地址为4*N+1的对 应于输出端口 1;地址为4*N+2的对应于输出端口 2;地址为4*N+3的对应于输出端口 3,W上N 的取值是从0到15的整数。
[0067] 将64点数据存储为S维结构,从上方俯视结构图,如图2所示,与16点图1相似,不 同的地方在于图1中一个"0"表示的是一个数据存储单位,而64点的数据中一个"0"存储的 是由四个数据组成的存储块。如在图2中标号为"4"的块内结构如图3所示,内部数据W顺序 平移的方式存在。而块与块之间的连接方式与16点的不同,具体数据流图如图4所示。
[006引其中端口(m/n)表示的第m步与第n步用到该端口,m_n表示的是第m步中第n个端 口,相同的n组成一对输入输出端口。第一组中块O、4、8、12之间组成顺序偏移,第二组中块 16、20、24、28之间组成顺序偏移,第=组中块32、36、40、44之间组成顺序偏移,第四组中块 48、52、56、60之间组成顺序偏移,组与组之间是16偏移,(因各组的单位数据数目为16),剩 下的是输入输出端口。
[0069] 整个64点FFT的数据流程具体包括W下步骤:
[0070] Sioo:将运算数据从0~63进行标号,当数据从外界到达该模块时,输入端口对应 于图4中的51、55、59、63分别对应于数据的0、1、2、3,按照标记为(1)的线路进行平移,使得 最终存储单位〇、1、2、3对应于数据的0、4、8、12,W此类推,将64个数据存储到各个存储单位 中。
[0071] S200:开始第一级64点基-4调度算法,数据输出端口对应于图4中标记为(2),四个 输出端口分别为(2_1)、(2_2)、(2_3)、(2_4),同时启动块内数据平移,如第一组数据地址的 流向为 15-〉14-〉。一〉1-〉0,对应于处理的数据标号为 15-〉11-〉7-〉3-〉14-〉10-〉6-〉2-〉13-〉 9-〉5-〉1-〉12-〉8-〉4-〉0,同时输入端口对应于(2_1),同样对于第二组数据、第S组数据与 第四组数据采用相同的流向方式。
[0072] S300:第一级基-4调度结果完成,并采用原位存储方式到每一个存储单位时,启动 第二级基-4调度序列,第二级调度的数据标号分别为(0,4,8,12)、(1、5、9、13)、(2、6、10、 14)、(3、7、ll、15)…(51、55、59、63),由于组内位移是顺序位移,而输出端口是四位,因此采 用循环输出的方法进行调度,即循环地调用输出端口(3_1)、(3_2)、(3_3)、(3_4),使得组内 平移数据在下一轮调度到该组的输出端口时得到下一块的数据。数据端口输出顺序为(0、 1、2、3)、(16、17、18、19)、(32、33、34、35)(48、49、50、51)、(0、1、2、3)…总共循环四次,原位 输入到原地址。对应于标号为(3)的数据通路。
[0073] S400:第S级基-4调度序列,对应于数据标号为(0,1,2,3)、(4,5,6,7)…(60、61、 62、63),而对应于图4数据地址为(0,4,8,12)、(1,5,9,13)...(50,54,58,62)、(51,55,59, 63),采用a)中的数据通路来实现。输出端口为图4中的0、4、8、12端口,输入端口为a)中的输 入端口。对应于图4中的标号为(4)的数据通路。
[0074] S500:因为采用该调度顺序的结果产生是逆序状态,因此数据输出不可W顺序输 出,根据基四算法的运算规律,循环的调用输出端口〇、16、32、48,则得出顺序结果。对应于 标号为(5)的数据通路。
[0075] 进一步,参见图4,本发明可W将部分端口的信息情况映射成一个config的表,通 过输入的config信息进行查找,实现满足当前数据流向的DM结构。
[0076] 由上可知,本发明是针对当前基四傅里叶变换运算中,采用流水线的结构,如 Xilinx官方的基于AXI_STREM总线协议的FFT(傅里叶变换)模块,采用64点数据,基四配置 模式,采用流水结构,在运种方式下,数据结果的生成将在数据从输入开始计时到输出延时 时钟周期达IlOW上,虽然采用的是流水结构,也就是说每组数据在输入结束后,必须等待 相同的周期数才可W产生输出结果,也就是一百多个周期数,但是对于实时性要求极其严 格的系统或者需求时,运些周期的数字无非成为了抢占战略置高点的障碍了。本发明能够 在尽可能的不增加硬件资源的情况下使得整个数据的输出延时减半或者更少。
[0077] 本发明最为关键的就是采用了多维数据存储空间,将FFT(傅里叶变换)所需要的 数据存储模块经过特殊处理形成多维数据存储空间,使之利于傅里叶数据变换的数据调 度。多维数据存储空间利用的是FFT数据调度的特征性,假设是基四处理方式,那么该数据 存储空间的本质是4属性,也就是W4个数据作为最基本的单元设计。
[0078] 多维数据存储空间的建立只是第一步,也是最基本的一步,接下来就是开通数据 通路,使之,多维数据存储空间形成"流水结构",在运一步要做的是"开星渠道",成为一种 特殊的数据流向网络,使得随之产生的"流水化数据"从一个或几个外接端口输出,运个外 接端口通向数据的运算部件模块,可W形象的称之为"数据加工场",该加工厂有个特性就 是,数据的输入输出个数相等,位数相同,该工厂可W采用流水结构,与DMA功能模块有相似 之处,但是可W加入特殊运算,如FFT(傅里叶变换)中因子点乘,使得输出数据由时域信号 转换成频域信号等功能。
[0079] 本发明中多维数据存储空间网络图的建立,是将其应用到某种体系架构或者系统 架构的最直观的体现,也是最复杂的设计之一。因为随着建立的形成,如果其他模块想要使 用该空间的数据流,只需要通过简单的配置参数,使得多维数据存储空间网络图中的连通 性进行更改,并打开数据流出口,就可W得到其相应的"流水化数据"。若是应用到处理器中 的存储模块中,该功能的体现就是打破了传统的数据地址的连续性,使得在原来数据地址 只是单纯的加1情况下多出了几种模式,如可W增加 FFT(傅里叶变换)基四模式下的4倍偏 移(假如,16个连续数,0~15,其输出的数据地址其实是0,4,8,12,1,5,9,13…,15),运对于 程序员而言是透明的。
[0080] 本发明相较于传统方法,省略了实现地址转换的运算部件,减少了部件资源的使 用,同时提高了数据读取与写入的速度,对于满足当前的高速率存储带来便利,更是对于傅 里叶变换中的调度相契合。
[0081] W上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例, 凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的 普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护 范围。
【主权项】
1. 一种用于快速傅里叶变换的数据存储及调度方法,其特征在于,步骤为: S1:数据的输入端口从Data输入,每个时钟为一个数据,与输入数据有效位;同时输入 对应的数据存储配置信息,通过该配置实现输入的数据按照规则进行存放,数据先放入一 个深度为4的存储块中; S2:在深度为4的数据队列中,假设当前队列的状态位是满状态,则开始将队列中的数 据四路输入到DM模块中; S3:当前的DM模块中的数据数量达到要求时,启动DM模块,通过配置信息,将当前的4*4 的空间数据流出; S4:经过一轮复数乘法与基四变换,数据通过队列开始输入到DM模块; S5: DM配置信息进行改变,修改输入端口; S6:当前DM中存储的数据就是16点FFT之后的数据结果;但这种数据结果的数据是逆向 的,当前通过改变DM配置信息改变输出,将输出端口修改后输出到数据队列中,这样最终得 到就是正序的数据结果。2. 根据权利要求1所述的用于快速傅里叶变换的数据存储及调度方法,其特征在于,所 述步骤S2的详细过程为: S201:16点FFT中起始,采用原位存储,也就是原地址存储;当前输入的数据每四个数据 为一组,由队列向DM模块进行传输;标记从外界输入的数据地址为0、1、2、3,则数据流入到 DM中的对应地址为12、13、14、15; S202:下一批数据的输入:从外界来的数据地址为4、5、6、7,同样当队列当前状态为满 空间时,调用DM模块将这四个数据输入到地址同样为12、13、14、15的地址中,而原来的数据 流向地址8、9、10、11; S203:重复步骤S202,直到16个数据都输入到DM模块中。3. 根据权利要求2所述的用于快速傅里叶变换的数据存储及调度方法,其特征在于,所 述步骤S3的流出规则为: S301:输出端口为12、8、4、0四处; S302:对应的同一列的存储单元;对应于输出端口 12的存储单元13、14、15,按着时钟节 拍,数据流水化15->14、14->13、13->12、12->输出,同理对于输出端口8、4、0采取同样操作; 3303:输出的数据地址是0、4、8、12、1、5、9、13、2、6、10、14、3、7、11、15。4. 根据权利要求3所述的用于快速傅里叶变换的数据存储及调度方法,其特征在于,所 述步骤S4中的流出规则为: S401:输入端口为 15、11、7、3; S402:对于同一列的数据,数据流水化满足:输入-> 15、15-> 14、14-> 13、13-> 12。5. 根据权利要求4所述的用于快速傅里叶变换的数据存储及调度方法,其特征在于,所 述步骤S5的详细过程为: S501:经过一次的复数乘法与基四变换结果存储到原地址,接下来启动第二次的复数 乘法与基四变换,本次的数据流向从原来的列输出到行输出,也就是15-> 11、11->7、7->3、 3_>输出,其他三行采取同样操作; S502:输出的数据经过复数乘法与基四变换之后,数据从队列向DM模块流入,流入端口 为15,14,13,12,同步骤S501-样的流水方向。6. 根据权利要求1~5中任意一项所述的用于快速傅里叶变换的数据存储及调度方法, 其特征在于,当扩展成64点的基四FFT时,将64点数据存储为三维结构,在64点的数据结构 中每一个点均是由四个数据组成的存储块,内部数据以顺序平移的方式存在。7. 根据权利要求6所述的用于快速傅里叶变换的数据存储及调度方法,其特征在于,将 端口的信息情况映射成一个config的表,通过输入的conf ig信息进行查找,以满足当前数 据流向的DM结构。
【文档编号】H04L27/26GK105847213SQ201610173480
【公开日】2016年8月10日
【申请日】2016年3月24日
【发明人】邢座程, 董永旺, 刘苍, 唐川, 原略超, 张洋, 王庆林, 王 锋, 危乐, 吕朝, 刘丹, 陈礼锐
【申请人】中国人民解放军国防科学技术大学