专利名称:一种实现fft/ifft变换的电路及方法
技术领域:
本发明涉及数字信号处理领域,具体涉及一种实现FFT/IFFT变换(快速傅立叶变 换/快速傅立叶反变换)的电路及方法。
背景技术:
在数字信号处理中,经常需要对数据进行时域到频域的转换,此时一般使用FFT 变换,从频域到时域转换时则使用IFFT变换。FFT可以大大减少DFT (离散傅立叶变换)的计算量,对于N点DFT变换,其计算量 为N2,基2的FFT的计算量为Nlog2N0FFT变换有多种形式,如时域抽取/频域抽取,基2/基4/基8/分裂基等多种组合 形式。FFT变换一般需要多次迭代才能完成,比如基2时域抽取64点FFT变换需要6次迭 代。而对于每级迭代,又有不同的迭代方法。基2变换最常见的迭代形式为每个蝶形运算的输入数据和输出数据的存储地址 相同,即同址迭代,如附图1所示。在硬件实现时,同址迭代可以节省RAM空间,但每级迭代 形式不同,控制复杂。而其关键缺点是FFT前后RAM内数据的存储顺序不同,要参与下次 FFT/IFFT时,参与首次迭代蝶形运算的两个数据不能同时读出,要花两个时钟分别读取,写 入数据时也是如此,这浪费了时间资源。另一种改进的基2迭代形式为每级的迭代形式相同,如附图2所示,它降低了控 制的复杂程度,但不是同址操作。它也有前者的缺点,即FFT前后RAM内数据的存储顺序不 同,它需要对数据重新进行排序,或者与前者一样,每两个时钟读取一次蝶形运算的数据。
发明内容
本发明所要解决的技术问题是提供一种新型的实现FFT/IFFT变换的硬件电路, 以及实现FFT/IFFT变换的方法,降低电路的复杂度,保持变换前后RAM内数据的存储顺序 相同,从而减少额外的时间消耗。为解决上述技术问题,本发明采用以下解决方案一种实现FFT/IFFT变换的电路,包括第一多路选择器,第二多路选择器,第一 RAM存储器,第二 RAM存储器,ROM存储器,第三多路选择器,第四多路选择器,复数乘法器, 第一复数加法器,第二复数加法器;本电路包括两个数据输出端和两个数据输入端,所述两 个数据输出端分别为第三多路选择器和第四多路选择器的输出端,或者第一 RAM存储器和 第二 RAM存储器的输出端;第一多路选择器的两个输入端分别与本电路的一个数据输入端和第一复数加法 器的输出端连接;第二多路选择器的两个输入端分别与本电路的另一个数据输入端和第二 复数加法器的输出端连接;第一多路选择器的输出端与第一 RAM存储器的数据输入端连 接;第二多路选择器的输出端与第二 RAM存储器的数据输入端连接;第三多路选择器的两 个输入端分别与第一 RAM存储器的输出端以及0. 5倍的第一 RAM存储器的输出端连接;第四多路选择器的两个输入端分别与第二 RAM存储器的输出端以及0. 5倍的第二 RAM存储器 的输出端连接;复数乘法器的两个输入端分别与第三多路选择器的输出端和ROM存储器的 输出端连接;第一复数加法器的两个输入端分别与第四多路选择器的输出端以及-1倍的 复数乘法器的输出;第二复数加法器的输入为第四多路选择器的输出以及复数乘法器的输
出o其中,所述第一多路选择器、第二多路选择器、第三多路选择器、第四多路选择器 均为2选1的多路选择器。一种实现FFT/IFFT变换的电路,包括第一多路选择器,第二多路选择器,第一 RAM存储器,第二 RAM存储器,ROM存储器,第三多路选择器,第四多路选择器,复数乘法器, 第一复数加法器,第二复数加法器;本电路包括两个数据输出端和两个数据输入端,所述两 个数据输出端分别为第三多路选择器和第四多路选择器的输出端,或者第一 RAM存储器和 第二 RAM存储器的输出端;第一多路选择器的两个输入端分别与本电路的一个数据输入端和第三多路选择 器的输出端连接;第二多路选择器的两个输入端分别与本电路的另一个数据输入端和第四 多路选择器的输出端连接;第一多路选择器的输出端与第一 RAM存储器的输入端连接;第 二多路选择器的输出端与第二 RAM存储器的输入端连接;复数乘法器的两个输入端分别与 第一 RAM存储器的输出端以及ROM存储器的输出端连接;第一复数加法器的两个输入端分 别与第二 RAM存储器的输出端及-1倍的复数乘法器的输出端连接;第二复数加法器的两个 输入端分别与为复数乘法器的输出端及第二 RAM存储器的输出端连接;第三多路选择器的 两个输入端分别与第一复数加法器的输出端及0. 5倍的第一复数加法器的输出端连接;第 四多路选择器的两个输入端为第二复数加法器的输出端及0. 5倍的第二复数加法器的输 出端连接。其中,所述第一多路选择器、第二多路选择器、第三多路选择器、第四多路选择器 均为2选1的多路选择器。一种实现FFT/IFFT变换的方法,包括(1)根据FFT/IFFT变换的输入数据的长度n,确定需要的迭代次数m、第一 RAM存 储器和第二 RAM存储器的深度dl、ROM存储器的深度d2 ;(2)将所述FFT/IFFT变换的输入数据的前n/2部分存入第二 RAM存储器中,后n/2 部分存入第一 RAM存储器中;(3)进行m次迭代蝶形运算其中,在第1次迭代中,读取第一 RAM存储器和第二 RAM存储器时,采用倒位序的顺序进 行读取;迭代结果写回第一RAM存储器和第二RAM存储器,其中偶数次蝶形运算结果写入第 一 RAM存储器,奇数次蝶形运算结果写入第二 RAM存储器;在第2次到第m-1次迭代中,读取第一 RAM存储器和第二 RAM存储器时,采用正常 位序的顺序进行读取;写回第一 RAM存储器和第二 RAM存储器的方式与第一次迭代相同;
在第m次迭代中,读取第一 RAM存储器和第二 RAM存储器时,采用正常位序进行读 取;写回第一 RAM存储器和第二 RAM存储器的位置与读取位置相同。 其中,所述步骤(1)中,所述迭代次数m为彡log2(n)的最小整数;第一 RAM存储 器和第二 RAM存储器的深度dl = n ;ROM存储器的深度d2 = n/2或者n*m/2。
其中,所述步骤⑵中,所述FFT/IFFT变换的输入数据的前ηΛ部分/后n/2部 分写入第二 RAM存储器/第一 RAM存储器的高区间或者低区间。其中,所述步骤(3)中,在第1次至第m-1次迭代过程中,若本次迭代数据从第二 RAM存储器/第一 RAM存储器的高区间读出,则本次的迭代结果写入相应RAM存储器的低区 间;若本次迭代数据从第二 RAM存储器/第一 RAM存储器的低区间读出,则本次的迭代结果 写入相应RAM存储器的高区间。本发明具有以下有益效果1) 一般的FFT变换电路,变换前后,数据在RAM中的排列顺序方式不同,比如输 入正常序,输出倒位序;或输入倒位序,输出正常序。硬件在处理这些数据时,需要额外进行 数据的排序,浪费了时间资源。而本发明在变换前后,数据在RAM中的存储顺序相同,即输 入输出都是正常序,不需要再进行排序,节省了时间消耗。2)采用本发明的电路,输入数据、中间迭代数据、输出数据可存放于同一个RAM 中,不需要使用多个RAM分别存储,节省了 RAM消耗。在IC芯片中,RAM会占用大量的面积, 减少芯片面积可以降低IC的成本。3)本电路在每级迭代时,可以控制是否要进行数据右移,即除以2,这不仅可适应 FFT/IFFT两种模式,而且可以根据算法精度需要,做到中间运算位宽最低。减少运算位宽有 许多好处,比如可以减少加法器、乘法器、RAM的大小,降低电路规模的消耗,节省芯片面积。4)节省芯片面积还有附加的好处降低功率消耗。目前不止终端芯片对功耗要求 非常苛刻,随着系统集成度的不断提高,系统侧对功耗的要求也越来越高。5)FFT每级迭代的关键在于RAM的读写地址控制。如果每级的迭代形式不同,则 每级的读写地址控制都不同。对于128点FFT来讲,需要7级迭代,则需要7种控制模式。 本发明只有最后一级迭代方式与其他级的迭代不同,因此只有两种控制模式,这显著降低 了电路的复杂度。6)对于已有的技术来讲,将数据从正常序排列为倒位序,或将倒位序排列为正常 序,不止要消耗额外的时间,也需要额外的电路来处理。由于本电路不需要这做这个工作, 因此也不需要额外的电路,这也降低了电路的复杂度。
图1为基2同址迭代FFT示意图;图2为基2各级相同迭代FFT示意图;图3为本发明的一种电路结构框图;图4为本发明的另一种电路结构框图;图5为本发明的FFT迭代示意图;图6为本发明的方法流程图;图7为具体实施例128点FFT数据输入存储示意图;图8为具体实施例128点FFT中间迭代数据时序图;图9为具体实施例128点FFT中间迭代数据存储示意图。
具体实施例方式下面结合附图和实施例对本发明作进一步的详细说明请参阅图3,该图所示为本发明的实现FFT/IFFT变换的电路,包括多路选择器 (A),多路选择器(B),RAM存储器1 (C),RAM存储器0 (D),ROM存储器(E),多路选择器(F), 多路选择器(G),复数乘法器(H),复数加法器(J),复数加法器⑷;本电路的输出为多路选 择器(F)和多路选择器(G)的数据输出,或者RAM存储器I(C)和RAM存储器O(D)的数据 输出;本电路有两个数据输入端,分别连接到多路选择器(A)和多路选择器(B);其中,FFT/IFFT的一个数据输入端和复数加法器(J)的输出端分别与多路选择器 (A)的两个输入端相连;FFT/IFFT的另一个数据输入端和复数加法器(K)的输出端分别与 多路选择器(B)的两个输入端相连;多路选择器(A)的输出端连接RAM存储器I(C)的数据 输入端;多路选择器(B)的输出端连接RAM存储器O(D)的数据输入端;RAM存储器I(C)的 输出端以及0. 5倍的RAM存储器1 (C)的输出端分别与多路选择器(F)的两个输入端相连; RAM存储器O(D)的输出端以及0.5倍的RAM存储器O(D)的输出端分别与多路选择器(G) 的两个输入端相连;多路选择器(F)的输出端和ROM存储器(E)的输出端分别与复数乘法 器(H)的两个输入端相连;多路选择器(G)的输出端以及-1倍的复数乘法器(H)的输出端 分别与复数加法器(J)的两个输入端相连;多路选择器(G)的输出端以及复数乘法器(H) 的输出端分别与复数加法器(K)的两个输入端相连。该电路中,多路选择器(F)和多路选择器(G)也可放在复数加法器(J)和复数加 法器(K)后面,如附图4所示。采用图3或图4所示电路实现的FFT迭代如图5所示。图 3和图4中,2选1的多路选择器为优选方式。请参阅图6,该图所示为本发明的实现FFT/IFFT变换的方法,具体包括以下步骤步骤601、根据FFT/IFFT变换的长度n,确定需要迭代的次数m以及RAM存储器 1 (C),RAM存储器0⑶的深度dl和ROM存储器(E)的深度d2。m为彡Iog2 (η)的最小整数。dl等于η,即RAM存储器1 (C)和RAM存储器0 (D)进 行乒乓存储。ROM(E)中存储每级迭代需要的旋转因子。ROM(E)的深度d2可以为n/2,此时 每级迭代读取ROM(E)时,地址生成会复杂一些;ROM(E)的深度d2也可以为n*m/2,即分别 保存各级迭代的旋转因子,此时每级迭代读取ROM(E)时,地址生成很简单。步骤602、将FFT/IFFT输入数据的前η/2部分存入RAM存储器0 (D)中,后η/2部 分存入RAM存储器1 (C)中,存储顺序分别为0,1,2, ,n/2-l,和η/2, n/2+l, ,η_1。该步骤中,FFT/IFFT输入数据的前η/2部分和后η/2部分可分别存入RAM存储器0 (D) 和RAM存储器1 (C)的高区间,也可分别存入RAM存储器0⑶和RAM存储器1 (C)的低区间,还 可分别存入RAM存储器0⑶的高区间/低区间和RAM存储器1 (C)的低区间/高区间。步骤603、第一次迭代中,读取RAM存储器1 (C)和RAM存储器0 (D)时,采用倒位序 的顺序进行读取;迭代结果写回MM存储器1(C)和RAM存储器0 (D),其中0,2,4,...等偶 数次蝶形运算结果写入RAM存储器1(C),1,3,5,...等奇数次蝶形运算结果写入RAM存储 器0(D)。如果本次迭代数据从高区间读出,则迭代结果写入低区间,反之则写入高区间。步骤604、第2次到第m-1次迭代中,读取RAM存储器I(C)和RAM存储器O(D)时, 采用正常位序,即地址从0,1,2,3,4...,一直递增进行读取;写回RAM存储器I(C)和RAM存 储器O(D)的方式与步骤603相同。如果本次迭代数据从高区间读出,则迭代结果写入低区间,反之则写入高区间。步骤605、最后一次迭代m中,读取RAM存储器1 (C)和RAM存储器0 (D)时,采用正 常位序进行读取;写回RAM存储器I(C)和RAM存储器O(D)的位置与读取位置相同。本次 迭代由于是原址变换,则迭代结果可写入原区间,也可写入另外一个区间。经过m次迭代后,FFT/IFFT变换结果即存储于RAM存储器I(C)和RAM存储器O(D)
中。
下面以128点FFT为例,详细讲解本发明的实现方法。IFFT变换的原理与FFT相同,只是每级迭代结果或输入数据除以2。对于128点 IFFT来讲,7级迭代,共需除以128。在实际应用时,可以跟FFT结合起来运用,将部分除以2 的处理移动到FFT中,比如在128点FFT的7级迭代的3次迭代中除以2,则只需要在IFFT 的4次迭代中除以2。这样处理的好处是可以减小数据中间运算的位宽。在本实例中,η = 128,所以RAM存储器I(C)和RAM存储器O(D)的深度dl为128, m = log2 (η) = log2(128) = 7,ROM 存储器(E)的深度 d2 优选为 n*m/2 = 128X7/2 = 448。输入数据的前64个数据存入RAM存储器O(D)中,后64个数据存入RAM存储器 I(C)中,存储顺序分别为0,1,2, ,63,和64,65, ,127。此处以都存储于低区间为例。如 附图7所示。第一次迭代中,读取RAM存储器I(C)和RAM存储器O(D)时,采用倒位序进行读取; 迭代结果写回RAM存储器I(C)和RAM存储器O(D)的高区间,其中0,2,4,...等偶数次蝶 形运算结果写入RAM存储器1 (C),1,3,5,...等奇数次蝶形运算结果写入RAM存储器0 (D)。 倒位序读取时,地址仍先按0,1,2, 的方式递增,然后将其高低bit逆排,送给RAM存储器 即可。其实现时序如附图8所示。第2次到第6次迭代中,读取RAM存储器I(C)和RAM存储器O(D)时,采用正常位 序进行读取;写回RAM存储器I(C)和RAM存储器O(D)的方式与第一次迭代相同。注意的 是数据读出和写入的空间不同,要进行乒乓切换。读取RAM存储器I(C)和RAM存储器O(D) 的顺序如图9所示,每个时钟在RAM存储器1 (C)和RAM存储器0 (D)中各读取一个数据。最后一次迭代,即第7次迭代中,读取RAM存储器I(C)和RAM存储器0 (D)时,采 用正常位序进行读取;写回RAM存储器I(C)和RAM存储器O(D)的位置与读取位置相同,即 可以写入低区间的原位置,也可写入到高区间的相应位置上。本次迭代后,FFT的输出结果 写入RAM存储器0和RAM存储器1中。这些输出数据在RAM存储0和RAM存储器1中的存 储顺序与FFT变换前输入数据的存储顺序相同。对于这7次迭代来讲,RAM存储器的读写地址控制总结如下读取时,第一次迭代 采用倒位序读取,其他6次迭代采用正常位序读取。写入时,前6次迭代的写入方式相同, 最后一次迭代与前6次不同。ROM(E)中保存了各级迭代的旋转因子,每级迭代读取ROM(E)时,第一次迭代读取 地址0 63,第二次迭代读取64 127,...,第7次读取384 447即可。在实际应用中, ROM(E)也可以用RAM替代,由软件配置旋转因子。在本实例中,选择在第2/4/6级迭代中,对输入数据除以2,则在对应的IFFT中,可 以在1/3/5/7级迭代中除以2。同时可以根据算法精度需要选择在任意级除以2。
通过上面的操作,经过7次迭代后,FFT变换的结果存储于RAM存储器1 (C)和RAM 存储器O(D)中。当然也可以在第7次迭代中,直接输出给其他模块。 以上实施例仅用以说明本发明的技术方案而非限制,仅仅参照较佳实施例对本发 明进行了详细说明。本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改 或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的权利要求范 围当中。
权利要求
一种实现FFT/IFFT变换的电路,其特征在于,包括第一多路选择器,第二多路选择器,第一RAM存储器,第二RAM存储器,ROM存储器,第三多路选择器,第四多路选择器,复数乘法器,第一复数加法器,第二复数加法器;本电路包括两个数据输出端和两个数据输入端,所述两个数据输出端分别为第三多路选择器和第四多路选择器的输出端,或者第一RAM存储器和第二RAM存储器的输出端;第一多路选择器的两个输入端分别与本电路的一个数据输入端和第一复数加法器的输出端连接;第二多路选择器的两个输入端分别与本电路的另一个数据输入端和第二复数加法器的输出端连接;第一多路选择器的输出端与第一RAM存储器的数据输入端连接;第二多路选择器的输出端与第二RAM存储器的数据输入端连接;第三多路选择器的两个输入端分别与第一RAM存储器的输出端以及0.5倍的第一RAM存储器的输出端连接;第四多路选择器的两个输入端分别与第二RAM存储器的输出端以及0.5倍的第二RAM存储器的输出端连接;复数乘法器的两个输入端分别与第三多路选择器的输出端和ROM存储器的输出端连接;第一复数加法器的两个输入端分别与第四多路选择器的输出端以及-1倍的复数乘法器的输出;第二复数加法器的输入为第四多路选择器的输出以及复数乘法器的输出。
2.如权利要求1所述的实现FFT/IFFT变换的电路,其特征在于,所述第一多路选择器、 第二多路选择器、第三多路选择器、第四多路选择器均为2选1的多路选择器。
3.一种实现FFT/IFFT变换的电路,其特征在于,包括第一多路选择器,第二多路选 择器,第一 RAM存储器,第二 RAM存储器,ROM存储器,第三多路选择器,第四多路选择器,复 数乘法器,第一复数加法器,第二复数加法器;本电路包括两个数据输出端和两个数据输入 端,所述两个数据输出端分别为第三多路选择器和第四多路选择器的输出端,或者第一 RAM 存储器和第二 RAM存储器的输出端;第一多路选择器的两个输入端分别与本电路的一个数据输入端和第三多路选择器的 输出端连接;第二多路选择器的两个输入端分别与本电路的另一个数据输入端和第四多路 选择器的输出端连接;第一多路选择器的输出端与第一 RAM存储器的输入端连接;第二多 路选择器的输出端与第二 RAM存储器的输入端连接;复数乘法器的两个输入端分别与第一 RAM存储器的输出端以及ROM存储器的输出端连接;第一复数加法器的两个输入端分别与 第二 RAM存储器的输出端及-1倍的复数乘法器的输出端连接;第二复数加法器的两个输入 端分别与为复数乘法器的输出端及第二 RAM存储器的输出端连接;第三多路选择器的两个 输入端分别与第一复数加法器的输出端及0. 5倍的第一复数加法器的输出端连接;第四多 路选择器的两个输入端为第二复数加法器的输出端及0. 5倍的第二复数加法器的输出端 连接。
4.如权利要求3所述的实现FFT/IFFT变换的电路,其特征在于,所述第一多路选择器、 第二多路选择器、第三多路选择器、第四多路选择器均为2选1的多路选择器。
5.一种实现FFT/IFFT变换的方法,其特征在于,包括(1)根据FFT/IFFT变换的输入数据的长度n,确定需要的迭代次数m、第一RAM存储器 和第二 RAM存储器的深度dl、ROM存储器的深度d2 ;(2)将所述FFT/IFFT变换的输入数据的前n/2部分存入第二RAM存储器中,后n/2部 分存入第一 RAM存储器中;(3)进行m次迭代蝶形运算其中,在第1次迭代中,读取第一 RAM存储器和第二 RAM存储器时,采用倒位序的顺序进行读取;迭代结果写回第一 RAM存储器和第二 RAM存储器,其中偶数次蝶形运算结果写入第一 RAM存储器,奇数次蝶形运算结果写入第二 RAM存储器;在第2次到第m-1次迭代中,读取第一 RAM存储器和第二 RAM存储器时,采用正常位序 的顺序进行读取;写回第一 RAM存储器和第二 RAM存储器的方式与第一次迭代相同;在第m次迭代中,读取第一 RAM存储器和第二 RAM存储器时,采用正常位序进行读取; 写回第一 RAM存储器和第二 RAM存储器的位置与读取位置相同。
6.如权利要求5所述的实现FFT/IFFT变换的方法,其特征在于,所述步骤(1)中,所 述迭代次数m为彡Iog2 (η)的最小整数;第一 RAM存储器和第二 RAM存储器的深度dl = η ; ROM存储器的深度d2 = η/2或者n*m/2。
7.如权利要求5或6所述的实现FFT/IFFT变换的方法,其特征在于,所述步骤⑵中, 所述FFT/IFFT变换的输入数据的前η/2部分/后η/2部分写入第二 RAM存储器/第一 RAM 存储器的高区间或者低区间。
8.如权利要求7所述的实现FFT/IFFT变换的方法,其特征在于,所述步骤(3)中,在 第1次至第m-1次迭代过程中,若本次迭代数据从第二 RAM存储器/第一 RAM存储器的高 区间读出,则本次的迭代结果写入相应RAM存储器的低区间;若本次迭代数据从第二RAM存 储器/第一 RAM存储器的低区间读出,则本次的迭代结果写入相应RAM存储器的高区间。
全文摘要
本发明公开了一种实现FFT/IFFT变换的电路及方法,方法为1)确定迭代次数m、第一和第二RAM的深度d1、ROM存储器的深度d2;2)将待变换的输入数据的前和后n/2部分分别存入第二和第一RAM;3)进行m次迭代蝶形运算第1次迭代中,读取第一和第二RAM时采用倒位序读取,偶数次蝶形运算结果写入第一RAM,奇数次蝶形运算结果写入第二RAM;在第2次到第m-1次迭代中,采用正常位序读取第一和第二RAM,写回RAM的方式与第一次相同;在第m次迭代中,采用正常位序读取第一和第二RAM,写回RAM的位置与读取位置相同。采用本发明,可降低电路的复杂度,保持变换前后RAM内数据的存储顺序相同,减少额外的时间消耗。
文档编号H03K19/003GK101847986SQ20091010619
公开日2010年9月29日 申请日期2009年3月27日 优先权日2009年3月27日
发明者温子瑜 申请人:中兴通讯股份有限公司