并行FFT算法

2024-10-22

并行FFT算法(共5篇)

并行FFT算法 篇1

0 引言

FFT是数字信号分析和处理过程中最常用的重要变换之一。为便于在工程各种需求中的广泛应用,各大FPGA生产商都已推出了FFT的IP核。此IP核应用简便,减少了设计风险,缩短了开发周期[1,2]。但是,由于IP核局限性很强,其速度和点数等方面都已经不能满足目前通信或雷达信号侦收技术的快速发展。例如Xilinx公司的IP核能实现的最大FFT点数仅为64 K,远远不能满足大点数FFT的迫切需求。因此,利用FPGA丰富的逻辑资源,合理设计并行处理结构,实现快速大点数FFT运算具有重要的实用价值[3]。

针对这一问题,借鉴图像处理中的二维信号处理方法,将一维的大点数FFT算法转换成为适用于矩阵应用的二维FFT算法。在FPGA中设计并实现了并行处理,在增加运算复杂度的前提下提高了运算的效率,解决了大点数FFT快速运算的问题。

1 二维FFT的实现原理

设序列x(n)的长度为N,且N为2的自然数次幂,其DFT为X(k)[4]。则:

X(k)=n=0Ν-1x(n)WΝnkk=0,1,,Ν-1

N=M×L,将x(n)进行重新排序为LM列的矩阵。假设:

n=Mn1+n0,k=Lk1+k0,

(n1=0,1,…,L-1,n0=0,1,…,M-1),

(k1=0,1,…,M-1, k0=0,1,…,L-1);

n,k代入X(k)的表达式,整理后得到:

X(k)=X(Lk1+k0)=X(k1,k0)=DFT[x(n)]=

DFT[x(Mn1+n0)]=DFT[x(n1,n0)];

X(k1,k0)=DFΤ[x(n1,n0)]=n=0Ν-1x(n1,n0)WΝ(Μn1+n0)(Lk1+k0)=n0=0Μ-1{[n1=0L-1x(n1,n0)WLn1k0]WΝn0k0}WΜn0k1=n0=0Μ-1{X1(k0,n0)WΝn0k0}WΜn0k1=n0=0Μ-1{X1'(k0,n0)}WΜn0k1=X2(k0,k1)

由上式可以看出,方括号内是L点的FFT,一共M个。而最外层的求和项是M点的FFT,一共L个。这样就把一个基于一维处理的FFT运算转换为基于二维处理的FFT运算。

二维FFT的具体实现步骤如下[5]:

① 将N点数据表示成LM列的矩阵;

② 对矩阵所有的列分别作L点FFT变换(列变换),得到X1(k0,n0);

③ 将X1(k0,n0)乘以中间旋转因子WΝn0k0得到X1′(k0,n0);

④ 将X1′(k0,n0)仍看作LM列的矩阵,对矩阵所有的行分别作M点的FFT变化(行变换),得到X2(k0,k1);

⑤ 整序输出,将X2(k0,k1)整序为X2(k1,k0),变换完成。

2 设计思路

2.1 块浮点

块浮点的运算速度比浮点快,比定点慢,但是精度比定点高。其实质为一个数据块的数据共享一个指数,以期望达到较大的动态范围,是一种比较实用的方法。块浮点对一批数据进行处理,求出这一批数据中对应绝对值最大的数,按照这个数逐个处理每个数据。块浮点一致,即保证各级FFT输出增益一致[6]。

2.2 处理数据存放

计算过程中产生大量中间数据,那么数据要进行存储,以待处理。当FFT点数较小时,可以在FPGA内存储;当点数较大时,FPGA内部资源无法满足要求,需要外部存储器存储大容量的数据。

2.3 旋转因子

旋转因子共LM列,与其所在的坐标位置密切相关。

利用旋转因子的对称性,采用查表和插值相结合的方法实现,减少旋转因子的存储长度[7,8]。

3 算法的硬件实现

3.1 实现流程

FFT点数最大为16 M。采用二维FFT算法,同时8路并行计算,提高运算速度。

块浮点存在Virtex-6的内部RAM中。中间结果存在外部存储器中。为了读写的高效率,采用读写总线分离,且不用刷新的QDRII存储器。图1为二维FFT算法的流程图,详细地说明了FPGA实现算法的工作流程。

3.2 接口设计

QDRII SRAM是静态RAM,操作时不需要定时刷新时钟和预充电,也能保证数据的连续传输在芯片架构上。具有分离的读写数据端口,可以同时对芯片进行读操作和写操作,避免了总线竞争,消除了死周期,最大限度的扩展了数据宽度,而且操作相对简单[9,10]。

QDRII分为两字突发和四字突发结构。区别在于每次读和写请求的传输字节不同。两字突发即一个读或写请求传送个数据。QDRII支持双速率,每个时钟周期内分别在时钟的上升沿和下降沿传送数据。所以每个时钟周期有4个总线宽度的数据(个读,个写)传送。读和写操作必须在交互的时钟周期被请求,以保证地址总线的共享。

设计采用存储容量4 M*36(21 bit地址线,36 bit数据线)的QDRII,结构为两字突发。

3.3 VHDL设计要点

设计的FFT最大点数16 M,所以不论行运算还是列运算,都是最多进行4 K次的4 K点FFT。算法中为8路同时计算。所以每一路最多进行4 K/8=512次的FFT。

算法结构中,外部存储器需要同时存储8路的18 bit实部和18 bit的虚部。可由4个36 bit的QDRII两字突发同时完成。

因为同时进行8路计算,每一路最多有512次,每个块浮点4 bit,所以内部的块浮点共存储了8*512*4 bit。在FPGA内一共开辟出16 Kb的RAM资源进行块浮点操作。

当较大点数时FFT结果输出至接口时,采取2个4 K的RAM逐步乒乓输出的方法,解决速率不匹配的问题。

4 仿真试验与性能分析

4.1 FFT结果比较

由FPGA和MATLAB分别计算相同数据的1 M点FFT,二者之间的幅度差和相位差如图2所示。图中比较的是信号左右各250根谱线(采样率为1 600 MHz)。

由图2可以看到,FPGA的结果和MATLAB相比,可以达到工程上应用的要求。

(b)相位差比较

4.2 FFT用时

在200 MHz时钟下,ModelSim仿真IP核和二维算法用时的比较如表1所示。

从表中可以看出,二维FFT并行算法的用时相对于IP核提高了近7倍。而且,此算法还可以实现最大16 M的FFT点数,用时约43 ms。

4.3 资源耗用率

此算法在Xilinx公司的XC6VLX550T芯片上实现,其主要资源耗用率如表2所示。

5 结束语

在分析二维FFT算法的基础上,利用FPGA的优势,提出并实现了流水结构的FFT算法。该算法采用并行的组织结构,进一步地减少了处理时间,更好地满足了FFT处理数据的需要。在CPCI平台上,针对不同信号频率和幅度,不同FFT点数等进行多方面的测试,并将输出结果与MATLAB结果相比较,达到了利用FPGA快速准确实现大点数FFT的目的。

摘要:针对目前高速实时信号处理对大点数快速傅里叶变换(FFT)的性能要求越来越高,提出了一种基于二维FFT算法,利用现场可编程门阵列(FPGA)快速实现的方法。该方法以现有的短数据量的FFT核为单元,通过并行处理实现了16M点数的FFT。这样不但解决了FPGA的IP核计算FFT点数少的问题,而且提高了FFT计算的速度。仿真试验结果表明,该方法准确可靠,易于硬件实现,运算速度快。

关键词:FPGA,二维FFT,并行结构

参考文献

[1]张雪姣,伍萍辉.基于FPGA高精度浮点运算器的FFT设计与仿真[J].电子科技,2011,24(12):88-90.

[2]贺卫东,段哲民,龚诚.基于FPGA的大点数FFT算法研究[J].电子测量技术,2007,30(11):14-16.

[3]邓波,戎蒙恬,汤晓峰.可配置高速高精度FFT的硬件实现[J].计算机工程,2006,32(17):254-256.

[4]BIDET E,CASTELAIN D,JOANBLANQ C,et al.A FastSingle-Chip Implementation Complex Point FFT[J].IEEE Journal of Solid-State Circuits,1995,30(3):300-305.

[5]王晓君,龙腾,周希元.二维级联流水结构大点数FFT运算器实现研究[J].无线电工程,2010,40(11):19-22.

[6]杨向萍.提高FFT运算速度的几项措施[J].中国纺织大学学报1999,25(1):42-44.

[7]黄聚永,袁慧梅,吴向阳,等.基于查找表和Newton插值算法的正余弦的FPGA时间[J].继电器,2007,35(16):33-36.

[8]庞龙,陈禾.基于FPGA的数字脉冲压缩实现[J].现代电子技术,2010,14(325):190-192.

[9]GS81302Qxx.SigmaQurd[S],2008.

[10]纪彦星,宋虎.利用QDR SRAM和FPGA实现雷达动目标显示的方法[J].雷达与对抗,2009(3):33-36.

并行FFT算法 篇2

设长度为N的有限序列x (n) 的DFT为:

设序列x (n) 的长度N (N=2M, M为任意整数) , 根据N的奇偶性把x (n) 分解为两个N/2点的子序列如式 (2) 所示:

则x (n) 的N点DFT为式 (3)

由于

所以

式 (5) 中, G (k) 和H (k) 分别为g (m) 和h (m) 的N/2点DFT, 表达式如下 (6) (7) 所示:

由于G (k) 和H (k) 均以N/2为周期, 考虑到对称性, 有WÂÁÁÂÁÂ=-WÂÁ, X (k) 就可以用 (8) (9) 表示:

通过将N点的DET分解和 (8) (9) 的运算。可以有效减少DFT的运算量。由于N是2的正整数次幂, N/2点的DET可以继续进行分解, 直到分解为2点的DET为止。这种运算称为蝶形运算符。

2 算法分析

本设计实现了在Altera FPGA上实现的基于Open CL的快速傅里叶算法 (FFT) , 该基准程序并行处理32点复杂单精度浮点数据。数据以有序输入, 以倒位序输出。

本设计能够每时钟周期处理8个数据点单基数2的FFT引擎。根据现有设备资源, 设计还可以额外例化模块, 以实现更高的性能, 也可以定制变换的大小。

FFT算法模块被配置为单个工作项内核, 它使用一个滑动窗口来表示延迟元件。该应用程序从全局内存中读取输入数据, 并将数据馈送到FFT单元然后将存储结果保存到全局内存。性能将受到内存带宽的影响。

3 性能分析与比较

本设计基于64位Windows 7的操作系统, Intel酷睿i3四核四线程的处理器, 以及DE1-So C FPGA开发板。对于处理不同的数据量在不同硬件环境下的运行情况如表1所示:

数据是10次测试结果的平均值, 从表中的结果可以看到, 对于相同大小的数据量, FPGA的加速效果比Cortex A9有很大的提升, 并且, 随着数据量的加大, 效果也越来越明显。此外, 在保证处理不同规模问题质量的前提下, 基于FPGA平台的Open CL设计也很大程度的降低了系统的功耗。

4 结论

本设计使用的SDK为Altera发布的支持Open CL并行编程的SDK, 本设计简单有效的解析了Open CL和FPGA的并行体系架构, 使用DE1-So C平台和FFT算法为实验对象, 对并行的加速算法Open CL在FPGA上实现的原理和方法进行研究。与传统的串行平台作对比, 测试加速性能和功耗情况。经过对数据分析对比, 由FFT算法的实验数据结果可见, 在FPGA上实现开放计算语言Open CL标准并且与Open CL并行编程模型和拥有强大并行体系结构的FP-GA相结合, 不仅可以更大程度的提高性能, 也能更大程度的有效降低系统功耗。

参考文献

[1]陈国良, 孙广中, 徐云, 龙柏.并行计算的一体化研究现状与发展趋势[J].中国科学.2009, 54 (8) :1043-1049.

[2]陈国良.并行计算:结构·算法·编程[M].北京:高等教育出版社, 2003:368-402.

[3]詹云, 赵新灿, 谭同德.基于Open CL的异构系统并行编程[J].计算机工程与设计, 2012, 33 (11) :4191-4195.

[4]苏金国, 李璜, 杨健康等译, Open CL编程指南[M].北京:机械工业出版社, 2013:75-77.

FFT算法研究 篇3

1.1 FFT处理器的总体设计

FFT数据处理器主要由三个模块组成, 各个模块的作用如下:

第一, in_ram的作用在于将按照一定顺序输入的每个点保存起来, 包括实部数据和虚部数据。在所有的16个点的数据一一输入之后, 以并行的方式传递给FFT运算单元。

第二, fft_16_8是FFT运算单元的最关键部分, 其作用在于运用复数FFT并行迭代处理16个点的8位数据;其运算过程是, 首先通过设计, 完成一级FFT运算的gout模块, 在此基础上经过四次迭代调用, 完成16个点的FFT运算。

第三, out_ram的作用在于, 将FFT运算的16个点的运算结果进行保存。在此基础上, 按照输入顺序将每个点的实部和虚部的数据以串行的方式输出。

1.2 各运算模块的设计和实现

1.2.1 加法器的设计

FFT运算的加法器是指一个有时序的, 8位带进位的二进制补码输入加法行波。其运算过程是:通过数据输入, 在2个时钟的运算周期内实现一次二进制补码加法运算。

实现1位全加器的逻辑表达式如式 (1-1) :

其中Ai与Bi表示两个不同的二进制数字;Ci表示一个进位输入数字;Si表示两个不同的二进制的数字输出和。

1.2.2 乘法器的设计

FFT运算的乘法器是指一个有时序的, 8位带进位的二进制补码运用带符号位的阵列的输入行波乘法算法。其具体的逻辑结构为 (n+1) 位× (n+1) 位带求补级阵列。

1.2.3 蝶形运算单元设计

FFT运算的蝶形运算是指首先分别输入2个点的实部数据和虚部数据 (表示为xrl、xil和xr2、xi2) , 这两个点的实部和虚部数据均用8位补码数表示;其次分别输入旋转因子的实部数据和虚部数据 (表示为w nr和w ni) , 这两个点的实部和虚部数据用8位带符号位的原码表示。其各个时钟周期的运算公式如下所示:

1) 四次乘法运算

从上述算法中可以看出, 第二个点的实部数据和虚部数据, 以及旋转因子的实部数据和虚部数据经过运算后, 相比之前扩大了26倍, 并用8位补码数呈现。四个乘法器的输出:Mullout、mul2out、m ul3out、m ul4out也同样扩大了26倍, 并用16位补码数呈现。

2) 一次中间减法运算和一次中间加法运算

上述公式中, 中间加法器与减法器的输出结果分别用midsubout、m idaddout表示, 以8位数的补码数呈现。并在运算过程中对数据进行了相关处理, 使其结果固定缩小2倍。

3) 最后输出前的两次加法运算和两次减法运算

上述公式中, 蝶形运算的两个序列的实部数据和虚部数据分别用xkrl、xkil、xkr2、xki2表示, 用9位补码数表示, 其目的在于防止数据溢出。并在运算过程中, 运用相关处理, 使输入数据固定缩小2倍。由此, 经过蝶形运算后的结果也将固定缩小2被, 最后输出时截取码值的低7位和符号位。

根据补码加法和补码减法的运算公式, 如式 (1-12) 和式 (1-13) 所示:

[x]补+[y]补=[x+y]补式 (1-12)

[x-y]=[x]补-[y]补=[x]补+[-y]补式 (1-13)

从上述公式中可以看出, 负数的加法需要运用补码化的加法运算;同理, 减法可以将其先转化为式 (1-13) , 再进行加法运算。

1.2.4 一级FFT单元设计

由于本次FFT运算是16个点的基-2FFT, 通过上述加法器运算、乘法器运算、蝶形运算等多算法的讨论得出, 完成一级FFT运算需要8个蝶形运算单元, 而且这8个蝶形运算单元是并行运行的。

1.2.5 FFT运算单元设计

综上多运算的讨论, 在这一步骤中, 首先将16个点的实部数据和虚部数据并行输入, 然后通过四次迭代运算, 调用gout模块, 根据基-2FFT, 按照FFT的时序序列算法特点, 在四次迭代运算后并行输出FFT的实部数据和虚部数据结果。

2 综合及结果分析

通过上述多算法和多单元模块的设计与运算, 运用Xilinx的Spartan-3E器件, 遵循FPGA开发的方法和步骤, 首先运用Ve rilog HDL进行代码编写, 并完成语法检查, 即Che ck Syntax。在此基础上, 调用“P1an Ahead”工具, 自动分配I/O引脚。最后运用Xilinx ISE自带的综合工具Synthe s ize-XST进行编译、分析、综合, 执行Ge ne rate Pos t-Synthe s is Sim ulation Mode l, 生成后仿模型, 同时产生综合报告文件 (.syr) 。

3 总结

本文以基于FPGA的FFT算法的设计与实现作为选题, 掌握了FPGA设计的基本流程。同时, 用Matlab工具对本设计的算法流程进行了验证, 并且借助Model Sim和Matlab工具对设计结果进行了联合仿真。

参考文献

[1]王旭东, 靳雁霞.MATALB及其在FPGA中的应用[M].国防工业出版社, 2008.

[2]高西全, 丁玉美.数字信号处理[M].西安电子科技大学出版社, 2008.

FFT算法的FPGA实现 篇4

离散傅里叶变换(Discrete-time Fourier Transform,DFT)是信号分析与处理中的一种重要变换。因直接计算DFT的计算量与变换区间长度N的平方成正比,当N较大时,计算量太大,所以在快速傅里叶变换(FFT)出现以前,直接用DFT算法进行谱分析和信号的实时处理是不切实际的。1965年由J.W.Cooley和J.W.Tukey提出了FTT算法,它把计算N点DFT的乘法运算量从N2次下降到N/2 log2N次,使DFT的运算效率提高了1 2个数量级,为数字信号处理技术应用于各种信号的实时处理创造了良好的条件,大大推动了数字信号处理技术的发展。FFT算法的出现也因此被看作是数字信号处理发展史上的里程碑。目前,FFT在图像处理、石油勘探、地震和雷达等领域中都得到了广泛的应用。对于FFT的工程实现,目前比较通用的方法有三种:数字信号处理器(DSP)、专用FFT处理芯片和FPGA。其中DSP适用于流程复杂的算法,利用DSP进行FFT运算将占用DSP大量的运算时间,降低整个系统的数据吞吐率,也无法发挥DSP的灵活性;若用专用FFT处理芯片,尽管速度尚可,但外围电路复杂,可扩展性差,并且价格昂贵;FPGA具有可重构的特点,适合于算法结构固定、运算量大的前端数字信号处理。采用FPGA技术可以提高元器件的优质利用性,降低设计成本,并能够并行处理数据,容易实现流水线结构,而且升级简便,提高了设计的灵活性,所有这些都非常适合实现FFT算法。因此,本文主要研究基于FPGA芯片的FFT,把FFT对实时性的要求和FPGA芯片设计的灵活性结合起来,实现并行算法与硬件结构的优化配置,提高FFT处理速度,满足现代信号处理的高速、高可靠性要求。

1 算法原理

DFT是数字信号处理中常用的一种算法,用来对信号频谱进行分析,其基本公式是:

式中x(n)表示时域信号,X(k)表示频域信号,为旋转因子。由式(1)可以看出,对于N点的DFT需做N2次复数乘法运算和N(N-1)次复数加法运算,乘法和加法的运算量均与N2成正比,当N较大时,运算量相当可观。FFT算法就是不断地把长序列的DFT分解成几个短序列的DFT,并利用的周期性和对称性来减少DFT的运算次数。

设序列x(n)的长度为N(N=2M,M为任意正整数),按n的奇偶把x(n)分解成两个N/2点的子序列:

则x(n)的N点DFT为

由于

所以

其中X1(k)和X2(k)分别为x1(r)和x2(r)的N/2点的DFT。由于X1(k)和X2(k)均以N/2为周期,且,所以X(k)又可表示为

这样就将N点的DFT分解为两个N/2点的DFT以及上面两式的运算,这种运算可用如图1所示的流图符号表示,根据其形状称之为蝶形运算符号。其中

按照这种分解运算的思想,将X1(k)和X2(k)继续向下分解,直到最后变为一组2点DFT运算的组合。以8点的FFT运算为例,其运算过程如图2所示[1]。

2 设计思路

2.1 数的定标

在蝶形运算单元中,,即在蝶形单元运算中存在复数,且它的实部和虚部均为小数。而在FPGA的设计中,由于输入输出均为固定数目的引脚,操作数一般采用整型数来表示,所以必须首先通过数的定标,用整型数来合理地表示小数。数的定标常用的有Q表示法。在小数和整数的互相表示中,存在以下关系[2]:小数(x)转换为定点的整数(xq):;定点的整数(xq)转换为小数(x):

2.2整体设计

整体设计可以分为输入、输出两个部分,输入部分主要由数据接收处理模块组成,输出部分主要由运算处理部分组成。两个模块之间的数据传递通过地址生成及数据查找模块完成。实现FFT算法各个模块的实现框图如图3所示。

2.3 各功能模块的实现

2.3.1 数据接收处理模块

如图2所示,进行第0级运算时并不是按地址顺序进行取数,而是需要数据接收处理单元把存放在接收RAM中的每个采样点按地址读出,按码位倒置后再存入运算RAM中准备进行运算。

其中运算RAM的作用是为FFT提供数据缓存,并且交替作为数据读出和运算结果写入单元,直到第9级蝶型运算完成。运算RAM采用双口RAM模式,允许同时将蝶型运算所需要的两个入口数据读出,也可以同时将两个运算结果写入,这样就比单口RAM节省1/2的读写周期。

2.3.2 蝶型运算模块

蝶型运算模块的功能是完成对输入数据A、B的蝶型运算,采用标准的加法器和乘法器来完成,以保证运算的精确性。由于输入数据A、B和旋转因子均为32位,为了保证没有溢出错误,乘法器输出应为64位,加法器输出应为65位,每级蝶型运算结果动态范围最大需要扩展33位;因此需要对蝶型运算结果进行检测,判断当前结果动态范围扩展位数,计算出当前级的最大扩展位数。每级FFT运算结果的动态范围最多需要扩展5位,则中间运算结果的位宽应为37位。在送回到运算RAM之前,按照动态范围将这37位数据扩展标准的块浮点格式,以完成定阶。最后,截取其中的32位送回运算RAM为下一级运算做准备。

2.3.3 地址生成及数据查找模块

在FFT运算中,中间运算数据和旋转因子的寻址是实现设计的关键,在设计中利用额外的两块片上RAM存储FFT中间运算结果的实部和虚部,利用两块片上ROM(宽度为32位,深度为10位)存储旋转因子的实部与虚部,这种方法消耗大量的片上资源。一般情况下,N点FFT只用log2N位地址码、N/2旋转因子仅需要位地址码来建立查找表,而在设计中选择的RAM数据宽度为32位,深度为10位,ROM数据宽度为32位,深度为10位,比地址查找表的方法使用了更多的片上资源,但是这样做大大加快了寻址速度。

3 仿真分析

本文采用Alter公司的CycloneⅡ系列FPGA芯片EP2C35F672C8,用VHDL语言编程,并在QuartusⅡ6.0平台上进行逻辑综合与时序分析。在设计中选择初相为0,频率为f1(100Hz)/f2(200Hz)的正弦信号作为输入信号,输入数据是对此输入信号的采样,采样数为1024点,数据格式为32bit补码,存储在两块片上单口RAM中。经FFT运算的中间结果和最后结果输出分为实部、虚部两路,数据格式为每路32位补码,存储在另外两块片上双口RAM中。旋转因子的实部、虚部和输入的数据位相同,都为32位,存储在两块ROM上。图4为QuartusⅡ6.0的仿真结果,

仿真结果显示共占用了FPGA中34%的逻辑单元,50%的片上RAM和2 5%的全局时钟,时钟最快可达102.353MHz。完成1024点FFT,需要时钟约49μs。

将FFT的计算结果依次读出后,利用Matlab软件描点,得到的波形图如图5所示。由图5可以看出,如果排除随机噪声的影响,计算结果和Matlab软件计算得到的结果(如图6)基本一致。

4 结束语

通过比较可以看出仿真结果与理论值吻合得很好,所采用的方案能达到设计的要求,并且控制实现简单,具有较高的运算速度。随着可编程器件规模、速度的提高,利用FPGA实现FFT运算的优势越来越明显,并且这种方案实现的FFT很容易扩展,具有很大的可行性和实用性。

摘要:在信号处理中,FFT占有很重要的位置,其运算时间影响整个系统的性能。传统的实现方法速度很慢,难以满足信号处理的实时性要求。针对这个问题,本文研究了基于FPGA芯片的FFT算法,把FFT算法对实时性的要求和FPGA芯片设计的灵活性结合起来,采用Alter公司的CycloneⅡ系列FPGA芯片EP2C35F672C8,用VHDL语言编程,最后分别使用Quartus Ⅱ和Matlab软件开发工具验证实现。

关键词:数字信号处理,快速傅立叶变换,现场可编程门阵列

参考文献

[1]丁玉梅,高西全.数字信号处理(第二版)[M].西安:西安电子科技大学出版社,2001.

[2]侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社,2000.

[3]李静梅,郑超峰,金玉苹.基于FPGA的FFT算法实现[J].应用科技,2009,36(2):38-41.

并行FFT算法 篇5

随着电力电子技术的飞速发展及电力电子设备的广泛应用,电能质量污染问题日益严重,其中谐波问题尤为突出。谐波对电力系统安全、稳定运行构成了严重威胁,对电气环境造成了严重影响,因此谐波补偿至关重要,而谐波检测是设计谐波补偿装置的前提。电网谐波检测的方法主要有使用模拟低通滤波器并进行离散傅里叶变换的方法及小波分解方法等。低通滤波器结构简单,但误差较大,已逐渐被淘汰。小波分解方法精度较高,抗干扰能力强,但其运算速度慢,不易实现。因此,本文采用离散傅里叶变换进行谐波检测,并采用先进的定点DSP芯片TMS320F2812实现FFT算法。

1 DSP芯片定点运算

TMS320F2812具有32位硬件乘法器和累加器,处理能力可达150 MIPS,但它是一款定点处理芯片,用定点数进行数值运算,其操作数一般采用整型数来表示,不能直接处理小数。因此本文用Q格式[3]表示操作数,并进行小数运算。在进行FFT运算时,把输入数据归一化为Q15格式来表示,既可使运算结果达到一定精度,又可以提高芯片TMS320F2812处理浮点数的速度。Q15格式数据范围为[-65 536,65 535]。计算完成后,将Q15格式的所有结果转换为浮点数即得到正确结果。

浮点数xf转换为定点数xq:

定点数xq转换为浮点数xf:

2 电网谐波检测方法实现

2.1 FFT谐波检测一般步骤

用FFT进行谐波检测的步骤:(1)采样电网电压信号并将其变换为离散序列。(2)建立数据窗,忽略数据窗前后信号波形。(3)进行FFT运算得到结果。在进行以上步骤时,必须满足以下要求:首先要满足采样定理,以免引起频谱混叠;其次采样频率必须与信号频率同步,整周期采样。

对电网信号x(t)以频率fs采样N个数据,得到一组序列x(n)(n=0,1,…N-1)。序列x(n)实质上可理解为对连续信号x(t)离散采样后,用长度为N的矩形窗截断的结果。由时域卷积定理可知,时域相乘在频域对应卷积,所以对原始信号进行FFT后得到的是原始信号的频谱与矩形窗频谱的卷积,这将造成长范围频谱泄漏[5]。由于电网信号频率存在小范围内的漂移,所以在采样时不可能做到严格同步采样,对此时的采样结果进行频谱分析存在短范围频谱泄漏。为减小频谱泄漏对检测结果造成的影响,采用加窗插值FFT算法[6]进行谐波分析。

2.2 数据采集模块设计

在实际测量中,必须对输入电压及电流进行必要的处理才能作为采样单元的输入。本文选择电压互感器SPT204A来获得精度高、线性度好的输出交流电压。SPT204A是一款微安级精密电压互感器,其输入、输出额定电流均为2mA。它具有精度高、轻便、能直接焊于印刷线路板上等特点。电压互感及调理电路如图1所示,其中UIN为电网电压信号。SPT204A输出信号经过两个反向并联二极管D1、D2输入运算放大器[4]。

由于电压互感及调理电路输出信号是峰值约为3.3V的双极性交流信号,而所采用的AD转换器要求输入0~3.3V的单极性信号,因此还需设计电压偏置电路来进行信号转换。电压偏置电路如图2所示,其主要器件是运算放大器。

2.3 加窗插值FFT算法原理

加窗插值FFT算法常用的窗函数有汉宁(Hanning)窗、Blackman-Harris窗等余弦窗。本文采用汉宁窗:

对采样序列x(n)进行加窗处理后得到x′(n):

对x′(n)进行FFT得到X′(k):

汉宁窗对应的FFT插值公式[7]为

式中:Ak和Φk分别对应各次谐波的振幅和相位;

2.4 谐波检测流程

基于FFT算法的谐波检测流程如图3所示。首先初始化DSP及各模块;然后利用内部定时器产生中断,以固定采样频率采集电压信号,经AD转换得到离散序列x(n);将x(n)转换为Q15格式进行加窗、FFT及插值处理,得到Q15格式的各次谐波幅值和相位;最后利用式(2)将结果转换为浮点数。

3 仿真分析

对普通电网基波频率为50Hz的周期信号进行谐波检测,固定采样频率为12.8kHz,采集点数N=1 024。

图4为采集到的电压原始波形。利用Matlab对采集到的数据进行算法仿真,前20次谐波幅值结果如图5所示,其中第1个点为直流分量,第2个点为基波幅值,以此类推。

采用DSP计算各次谐波幅值和相位,结果如表1所示。从表1可看出,DSP计算得到的基波分量为309V,由于该信号为正弦信号,可计算出其有效值为218V,符合实际情况。对比DSP计算结果与Matlab仿真结果可知,利用DSP实现的加窗插值FFT算法能准确地计算出各次谐波,误差较小。

4 结语

介绍了基于FFT算法的电网谐波检测方法的具体实现及仿真分析。该方法在高速定点DSP芯片上实现FFT算法,将数据归一化为Q15格式进行计算,并采用加窗插值FFT算法进行谐波分析,既保证了检测速度,又可使结果满足一定精度。

摘要:针对传统电网谐波检测方法误差较大、运算速度慢的问题,提出了基于FFT算法的电网谐波检测方法;介绍了DSP芯片的定点运算、基于FFT算法的电网谐波检测方法的具体实现,并进行了仿真分析。该方法在高速定点DSP芯片TMS320F2812上实现FFT算法,将数据归一化为Q15格式进行计算;为减小频谱泄漏对检测结果造成的影响,采用加窗插值FFT算法进行谐波分析。该方法实现了对电网电压各次谐波的检测,保证了检测速度和精度。

关键词:电网,谐波检测,FFT,加窗插值,DSP定点运算

参考文献

[1]程佩清.数字信号处理教程[M].2版.北京:清华大学出版社,2001.

[2]王艳芬,王刚,张晓光,等.数字信号处理原理及实现[M].北京:清华大学出版社,2008.

[3]王潞钢,陈林康,曾岳南.DSP C2000程序员高手进阶[M].北京:机械工业出版社,2005.

[4]远坂俊昭.测量电子电路设计——模拟篇[M].彭军,译.北京:科学出版社,2006:17-23.

[5]庞浩,李东霞,俎云霄,等.应用FFT进行电力系统谐波分析的改进算法[J].中国电机工程学报,2003(6):50-54.

[6]谢明,丁康,莫克斌.频谱校正时谱线干涉的影响及判定方法[J].振动工程学报,1998(1):55-60.

【并行FFT算法】推荐阅读:

并行蚁群算法08-16

FFT算法07-17

改进的FFT算法05-10

并行模型05-21

并行计算05-24

并行诊断06-12

并行编码06-19

数据并行06-19

并行机制07-05

并行优化08-09

上一篇:基础砌砖的施工下一篇:带宽测量