一种基于Cooley-Tukey的FFT算法

文档序号:10534787阅读:2301来源:国知局
一种基于Cooley-Tukey的FFT算法
【专利摘要】本发明公开了一种基于Cooley?Tukey的FFT算法,利用FPGA芯片,采用Radix?4的碟形运算,把N点FFT分解成一个以上的短序列的FFT。本发明使用Cooley?Tukey的FFT算法,把N点FFT分解成几个较短序列的FFT,大大减少复乘次数;采用Radix?4的碟形运算,解决了计算延时长、动态响应速度慢的问题,并利用FPGA丰富逻辑资源给予实现,解决了占用大量RAM空间的问题。
【专利说明】
_种基于Goo I ey-Tukey的FFT算法
技术领域
[0001] 本发明涉及电力系统谐波检测领域,尤其是利用FPGA芯片实现的基于Cooley-Tukey的FFT算法。
【背景技术】
[0002] FFT算法广泛应用于电力系统谐波电流检测领域,以往的谐波电流检测方法是利 用DSP芯片使用传统FFT算法检测谐波电流,但传统的方法存在计算延时长、动态响应速度 慢、计算精度不高、占用大量RAM空间的问题。

【发明内容】

[0003] 本发明要解决的技术问题是现有的FFT算法计算延时长、动态响应速度慢、计算精 度不高、占用大量RAM空间。
[0004]为解决上述技术问题,本发明采用的技术方案是:一种基于Cooley-Tukey的FFT算 法,利用FPGA芯片,采用Radix-4的碟形运算,把N点FFT分解成一个以上的短序列的FFT,N = rl*r2,包括以下步骤:步骤1:将x(n)改写成x(nl,n0),利用x(n) = x(r2m+n〇) =x(m,n〇), f' = (),2- 1 r\ 1 =riY...\-1步骤2:做r2个rl点的FFT,得到 X1(k0,n0);尤1(&為乞咖1為风' 、 - * "r-〇 k〇 = 0,l,…,n-l;步骤3:把N个Xl(k0,n0)乘以相应的旋转因子,组成Xl'(k0,n0); 弋'(Av ?n) = 4 (軏為)步骤4:做rl 个r2 点FFT,得到X2(k0,kl);;('A) = Z ki = 0,1,…,r2_l;步骤5:进行整序,得到X(kl,k0) =X(k),其中k = rl*kl+k0 ;X(ki,k〇) =X2 (k〇,ki)〇
[0005] 传统FFT方法,N点FFT的复乘次数等于N2,计算量过于庞大,计算延时长、动态响应 速度慢;使用Cooley-Tukey的FFT算法,把N点FFT分解成几个较短序列的FFT,可使复乘次数 大大减少;基于Cooley-Tukey的FFT算法在本设计中采用Radix-4的碟形运算予以实现,相 对于传统的Radix-2碟形运算在运算次数和运算时间上有了大幅度的减少。
[0006] 进一步,步骤4中,旋转因子以向量6# = (3〇80 +」8;[110的形式表现,以查找表方 式实现向量旋转运算;该向量的的实部和虚部存储在寄存器中,且只存储在1/8圆内,即 卜41之间的旋转因子;按照旋转因子的周期性和对称性,通过交换实部虚部和改变正负号 得到其他的旋转因子。本设计中,旋转因子只存储在1/8圆内,大大减少RAM的存储空间。
[0007] 本发明提的优点是:使用Cooley-Tukey的FFT算法,把N点FFT分解成几个较短序列 的FFT,大大减少复乘次数;采用Radix-4的碟形运算,解决了计算延时长、动态响应速度慢 的问题,并利用FPGA丰富逻辑资源给予实现,解决了占用大量RAM空间的问题。
【附图说明】
[0008] 图1是Radix-4的碟形运算不意图。
[0009] 图2是复数加法器结构示意图。
[0010] 图3是复数减法器结构示意图。
[0011] 图4是复数乘法器结构示意图。
[0012] 图5是旋转因子的选取示意图。
[0013] 图6是本发明方法的实现框图。
[0014] 图7是本发明蝶形单元的设计示意图。
【具体实施方式】
[0015] 下面结合附图对本发明作进一步的说明。
[0016] 传统FFT方法,N点FFT的复乘次数等于N2,计算量过于庞大,计算延时长、动态响应 速度慢;使用Cooley-Tukey的FFT算法,把N点FFT分解成几个较短序列的FFT,可使复乘次数 大大减少,例如把N点FFT分解成两个
-点FFT,则复乘次数将减少为
[0017] 这里用假设进行N=rl*r2的二维Cooley -Tukey快速算法,来解释Cooley -Tukey 快速算法,分五步骤:
[0018] a?将x(n)改写成x(nl,n0),利用
[0019] x(n)=x(r2ni+n〇)=x(ni,n〇),] 1 * 1 ' (/?,, =0J, 2,???,/-, -1
[0020] b?做 r2 个 rl 点的 FFT,得到)Q(k0,n0)。 r「1
[0021] (k0,?〇) = ^,n0)W^h, A-(j =0,1, ???,/, -1 n{ ^0'
[0022] c.把N个Xl(k0,n0)乘以相应的旋转因子C,组成Xl'(k0,n0)。
[0023] X^(ka,n0) =
[0024] d?做rl个r2点FFT,得到X2(k0,kl)。
[0025] X:(k{i,kl) = h -1 ?p=〇
[0026] e ?进行整序,得到X(kl ,k0) =X(k),其中k = rl*kl+k0。
[0027] X(ki,ko)=X2(ko,ki)
[0028] 基于Cooley-Tukey的FFT算法在本设计中采用Radix-4的碟形运算予以实现,相对 于传统的Radix-2碟形运算在运算次数和运算时间上有了大幅度的减少;从上述的五个步 骤中可以得出,基于Cooley-Tukey的FFT算法包括复数加减法、复数乘法和旋转因子$/°的 存取。
[0029]如图1所示,为Radix-4的碟形运算计算方式。
[0030]计算公式为:
[0031] X(K)=A+Bffp+Cff2p+Dff3p
[0032] X(K+N/4) =A-jBffp-Cff2P+jDff3P
[0033] X(K+2N/4) =A-jBffp+Cff2P-jDff3P
[0034] X(K+3N/4) =A+jBffp-Cff2P-jDff3P
[0035] 计算公式可以分割为如下的复数运算:
[0036] X'[n]=[(x[n]+x[n+N/2])]+[(x[n+N/4]+x[n+3N/4])]
[0037] x'[n+N/2]=[(x[n]+x[n+N/2])]-[(x[n+N/4]+x[n+3N/4])]
[0038] x'[n+N/4]=[(x[n]_x[n+N/2])]-j*[(x[n+N/4]_x[n+3N/4])]
[0039] x'[n+3N/4]=[(x[n]-x[n+N/2])]+j*[(x[n+N/4]-x[n+3N/4])]
[0040] 公式 2
[0041 ] 如图2-3所示,从公式2中,加减计算可以归纳为a+b,a-b,a+jb,a-jb四种形式。采 用复数加法器和复数减法器可以完成此运算。
[0042] 如图4所示,从公式2中,乘法运算可以归纳为如下的形式:
[0043] Y=AXB = (a+jb) X (c+jd) = (ac_bd)+j(ad+bc) = yre+jyim
[0044] 对于A,B相乘的结果Y来说,它的实部和虚部可以做如下变换:
[0045] yre= (ac_bd) =ac-ad+ad_bd= (c-d)a+(a_b)d
[0046] yim= (ad+bc) =ad-bd+bd+bc= (c+d)b+(a-b)d
[0047] 如图7所示,为依据上述加减乘运算方法设计的蝶形单元。
[0048] 如图5所示,旋转因子^^^可以表示为向量e# = cos0+jsin0,该向量的的实部和 虚部存储在寄存器中,利用查找表方式实现向量旋转运算。在本设计中,为了减少RAM的存 储空间,只存储在1/8圆内,§卩^.4之间的旋转因子。其他的旋转因子都是这1/8圆周区域 内旋转因子的变换。按照旋转因子的周期性和对称性,其他区域的旋转因子,通过交换实部 虚部和改变正负号得到。
[0049] 例如:设点A为其_
的一个旋转因子,假设它写成矢量形式是A=c〇SX+j* sinx〇
[0050] 则映射到4个象限内的另外7个投影是:
[0051] sin x+j氺cos x;-cos x+j氺sin x;_sin x+j氺cos x;-cos x+j*(-sin x);
[0052] -sin x+j氺(_cos x);sin x+j氺(_cos x);cos x+j氺(_sin x).
[0053]加起来一共是8个数据。
[0054]只需要将这样的一个数据的实部和虚部的数值,不包括符号分别存储在寄存器同 一个地址的数据存储单元里,就可以在取出这个数据后,通过变换,安排好它的实部和虚 部,重新安插它的正负号,得到其他在该级运算中所需要的另外7个旋转因子。
[0055]如图6所示,运算模块(包括加减运算和乘法运算)为Radix-4运算模块,控制模块 产生所有的控制信号、存储器1和2的读写地址、写使能、运算模块的启动信号旋转因子表的 读写地址等信号。
【主权项】
1. 一种基于Cooley-Tukey的FFT算法,其特征是:利用FPGA芯片,采用Radix-4的碟形运 算,把N点FFT分解成一个以上的短序列的FFT,N=rl *r2,包括以下步骤: 步骤1:将x(n)改写成x(nl,n0),利用步骤2:做r2个r 1点的FFT,得到Xl (kO,n0);步骤3:把N个XI (kO,nO)乘以相应的旋转因子,组成XΓ (kO,nO); 步骤4:做r 1个r2点FFT,得到X2 UO,k 1);步骤5:进行整序,得到X(kl,kO)=X(k),其中k = rl*kl+kO; X(ki,ko)=X2(ko,ki)〇2. 根据权利要求1所述的一种基于Cooley-Tukey的FFT算法,其特征是:步骤4中,旋转 因子以向量e# = C0s0+jsin0的形式表现,以查找表方式实现向量旋转运算;该向量的 的实部和虚部存储在寄存器中,且只存储在1/8圆内,8卩1。,4之间的旋转因子;按照旋转因 子的周期性和对称性,通过交换实部虚部和改变正负号得到其他的旋转因子。
【文档编号】G06F17/14GK105893328SQ201610244184
【公开日】2016年8月24日
【申请日】2016年4月19日
【发明人】刘明, 仇志凌, 张明, 葛文海
【申请人】南京亚派科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1