基于3072点快速傅里叶变换的数据处理方法及处理器的制造方法_3

文档序号:9326852阅读:来源:国知局
单元,所以一轮处理16次3点DFT运算,1024次3点DFT运算共需要16轮。数 据存取控制单元从数据存储单元的32个RAM的第0~15号RAM和第16~31号RAM乒乓 取出数据送入3点DFT运算单元进行运算,运算完的结果原位写回到相应的RAM地址中去。 需要注意的是,根据Goertzel算法数据取出的顺序是地址从高到底依次取出。
[0074] 本发明中采用Goertzel算法,3点DFT运算的公式如下:
[0076] 其中,x(n)为输入数据,X(k)为运算结果,W为蝶形旋转因子。
[0077] 公式(2)可以为变换成公式⑷的形式:
[0079] 从上式可以看出X(k)的结果可以进行递归运算,如图5所示,Goertzel算法的结 果见表2。
[0081] 表 2
[0082] 其中,y (η)为每次步骤得到的结果,y (n) = x(n)+REG。x(n)和REG别为两项中间 结果。REG代表寄存器中的数据。
[0083] 为了提高数据处理能力,本发明在3点DFT运算单元中采用3个Goertzel运算单 元并行运算的结构,处理时间可以提高3倍,其结构如图6所示。以第一轮运算,第0号3点 DFT运算单元为例,从数据存储模块RAMO的第2048号、1024号以及0号地址中取出数据输 入到3点DFT运算单元中,待运算完成后X(O)、X(I)以及X(2)的结果分别再写回到RAMO 的第0、1024以及2048号地址中去达到原位运算的效果。其他轮次的其他3点DFT都依照 类似的顺序从通过数据存取控制单元从数据存储单元中取出数据进行运算并原位写回。每 个Goertzel运算单元除了需要输入X值之外还需要配合输入蝶形旋转因子W 31^W31以及W32。 在运算单元中输入12bit数据(lbit符号位、2bit小数位、9bit小数位)经过如图5所示 的3次迭代之后输出13bit数据(Ibit符号位、3bit小数位、9bit小数位),共需要进行2 次复数乘法以及2次复数加法。为了防止数据溢出导致输出数据符号位发生错误,在最后 一次迭代输出时需要对输出数据进行溢出保护处理。具体方法是,首先判断截止位是否每 一 bit都为全"0"或者全" 1",如果是则表示没有出现溢出,数据按照规则输出截取的13bit 数据;如果不是全"0"或者全"1",则表示数据超出13bit表示存在溢出,这时判断截止位的 最高位,如果是"0",则输出13'bOllllllllllll ;如果是"1",则输出13'blOOOOOOOOOOOO.
[0084] 在进行完所有的3点DFT运算之后就可以按照Good-Thomas算法对表1中每一行 进行1024点DFT运算,共进行3轮。本发明采用Cooley-Tukey时间抽取基-2FFT算法,其 算法流图如图7所示。1024点DFT运算共需要进行10级运算,每级进行512次蝶形运算, 共计5120次蝶形运算;图7虚线框中表示的就是一个蝶形运算单元,其主要完成如图8所 示的蝶形运算,蝶形运算器输入端口 1的数据加上或者减去输入端口 2的数据与旋转因子 的乘积。每个蝶形运算中包含一次复数乘法,故整个1024点DFT运算总共需要进行5120 次复数乘法;本发明实施例采用16个蝶形并行运算的硬件结构,故每一级1024点DFT运算 需要进行32次运算,整个1024点DFT需要进行320次运算。
[0085] 1024点DFT运算单元用来完成1024点DFT的运算,为了提高数据处理能力,增加 运算的并行度,DFT运算单元包含16个蝶形运算单元,以及一个旋转因子产生单元用来产 生运算时需要的旋转因子(如图11所示),其中蝶形运算单元主要完成如图8所示的蝶形 运算,其中输入的X 1GO与X2GO对应蝶形运算单元的a与b端口(参照图11中的蝶形运 算单元),tw端口(参照图11中的蝶形运算单元)输入的是每次蝶形运算所需要的旋转 因子,其由旋转因子产生单元生成。为了提高数据处理性能,蝶形运算单元采用全流水线结 构,每4个时钟(elk)可以完成一次蝶形运算。完成一级运算需要32个时钟(elk)。由于 1024点DFT运算需要进行10级,为了在保证性能的前提下尽可能的节省硬件存储资源,所 以需要对每一级运算的结果进行截位处理。每一级截位以及定点情况如表3所示。
[0086]
[0087] 表 3
[0088] 与Goertzel运算单元一样,蝶形运算单元也需要对运算结果进行溢出保护,其方 法也与Goertzel运算单元类似,判断截止位是否每一 bit都为全"0"或者全"1",再根据判 断结果对输出数据进行相应的调整。
[0089] 本发明实施例对3072点数据分3轮进行1024点快速傅里叶变换运算,下面以第 一轮1024点DFT运算为例介绍数据存取控制模块对运算中间结果的存取操作。第一轮需 要进行1024点DFT运算的数据存储在数据存储单元中RAMO~31的地址0~31中,一共 1024个数据,为描述方便,数据与地址关系如图9所示,这里每个地址存储的数据都是刚经 历过3点DFT运算之后写回到对应地址的结果。在进行1024点DFT运算时每个时钟周期通 过数据存取控制单元从数据存储单元的32个RAM中分别读取一个数据送入到1024点DFT 运算单元中进行运算。由之前分析可知,1024点DFT运算共需要10级才能运算完成,而每 一级又由于需要进32次运算,每次运算由16个蝶形运算单元并行完成,也就是每个时钟周 期从RAM中读取32个数据进行运算,只要不发生地址冲突,则整个运算过程就可以流水线 进行,为了保证整个运算过程中不发生读写地址冲突,在每一次1024点快速傅里叶运算的 第一级运算完成之后数据写回时需要对数据存储地址进行调整,如图10所示,图中第一行 标有"顺序"对应列表示第1级运算完写回数据仍然存储在原来位置的位置上;标有"逆序" 对应的列表示第1级运算完写回的数据存储顺序需要颠倒,如RAMO地址1的数据经过第1 级FFT运算完之后将写到RAM31地址1中。这种写回数据地址的调整仅在每次1024DFT运 算的第1级完成之后进行,之后的运算则严格按照原位运算的原则从RAM中读写数据。做 这次调整的目的是因为写回的数据还是按照之前输入数据与RAM地址对应关系存储,在运 算进行到第6级时会发生地址冲突,影响运算的并行性。而这次调整仅在写回时进行,不会 打断算法的流水处理。
[0090] 1024点DFT运算需要进行10级,每一级运算都需要从数据存储单元的RAM中按 图7所示排列顺序将数据出入到1024点DFT模块中进行运算。除了在进行第一级运算需 要调整位序之外,之后的每一级运算数据都可以进行原位运算,这样的好处是使得整个运 算的数据存储相对简单,也节省了大量的数据缓存空间,使得这个3072点快速傅里叶变换 在整个运算过程中只使用3072个存储空间成为可能,使用RAM的资源达到最少。
[0091] 在所有3072个数据在进行完3次1024点DFT运算之后需要根据Good-Thomas算 法:
[0093] 对输出数据序列再次进行索引变换,其中,
彳《丨表 示小于或者等于η中与η互为质数的个数
所以输出数据 的映射关系如表4所示:
[0095] 表 4
[0096] 当kl等于0对应存储在数据存储单元的32个RAM的第0~31号地址中的数据; kl等于1对应存储在数据存储单元的32个RAM的第32~63号地址中的数据;kl等于2 对应存储在数据存储单元的32个RAM的第64~95号地址中的数据。由于在进行1024点 DFT运算时对数据存储的地址进行了一次调整,所以最终数据输出的顺序也响应的进行了 调整,最终RAM中数据输出地址关系如图12所示,与图类似图中三块分别代表32个RAM的 第0~31、32~63以及64~95地址空间。每块第一行数字表示具体的RAM地址,共96 个地址;每块最右侧第一列表示RAM的编号,共32块RAM。每个地址中的数字序号表示输出 数据的顺序号,第一个输出的数据序号为〇,例如图中第一块中第3行第2列2049表示的是 输出的第2050个数据存储在RAMl的第0号地址中。数据存取控制模块按照图所示的地址 数据映射关系按顺序从数据存储单元中读取数据输出,最终完成3072点快速傅里叶变换。
[0097] 基于上述【具体实施方式】,本发明实施例提供的基于3072点快速傅里叶变换的处 理器具体为如图13所示的结构,包括:
[0098] 数据存储模块,由32个96 X 36 (深度行数X位宽bit) RAM组成。
[0099] 数据存取控制模块,负责读写数据。
[0100] 3点DFT运
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1