基于CORDIC算法的FFT处理器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于CORDIC算法的FFT处理器设计
彭清兵;李方军
【摘要】采用CORDIC算法和无乘法器的蝶形运算操作,建立Matlab函数模型.
合理选择迭代级数和运算数据位宽,设计一种新的高信噪比快速傅里叶变换(FFT)处理器.在最优化设计中,信噪比可以达到88 dB,在加入溢出保护设计后,硬件实现的信噪比可以达到80 dB,功耗减少20.63%.仿真结果表明,该处理器具有芯片面积较小、精度高、功耗低、信噪比高等优点.%A Matlab function model is built through using CORDIC algorithm and butterfly operation without multiplier. By choosing reasonable iterative series and the operation data bit width, a novel Fast Fourier Transform(FFT) processor with high Signal Noise
Ratio(SNR) is designed. In the Matlab simulation, the SNR can reach 88 dB. After adding the overflow protection, the SNR realized by hardware can reach 80 dB, and the power consumption can be reduced by 20.63%. The designed FFT processor has many advantages such as smaller chip area, high accuracy, lower power consumption and high SNR.
【期刊名称】《计算机工程》
【年(卷),期】2011(037)023
【总页数】3页(P208-210)
【关键词】快速傅里叶变换;CORDIC算法;误差;信噪比;处理器
【作者】彭清兵;李方军
【作者单位】吉首大学物理科学与信息工程学院,湖南吉首416000;吉首大学数学与计算机科学学院,湖南吉首416000
【正文语种】中文
【中图分类】TP391
1 概述
随着电子技术的发展,数字信号处理技术越来越多地应用于电子系统中。
在数字信号处理中,快速傅里叶变换(Fast Fourier Transform, FFT)[1]作为一个非常重要的设计单元,成为现代电子设计的重点。
如何提高FFT处理器性能,增加FFT处理器信噪比,降低其面积成为设计FFT的一个重点。
本文基于低功耗FFT的设计思想,通过采用CORDIC(Coordinate Rotation Digital Computer)算法[2-3],避免使用乘法器,减少处理器内核面积,实现对FFT处理器内核性能的提升。
通过对比不同的数据截取宽度和迭代级数,实现对FFT信噪比最优化的设计。
2 FFT运算基本原理
从相关文献可知,FFT运算是将离散的时域信号转换成频域信号,如下式所示:
x(n)作为离散的时域信号量,通过离散傅立叶变换,变换成为频域信号X(k)。
反FFT运算与FFT运算正好相反,即将离散的频域信号转换为时域信号,如下式所示:
在 FFT设计中,经常使用基 2-FFT、基 4-FFT、基2/4-FFT。
综合考虑,基 2-FFT 电路结构简单,易于实现,基 4电路设计相对复杂些,但是速度快,适用于快速FFT设计。
在实际FFT处理器设计中,为了降低FFT处理器的功耗,需要降低时
钟频率,并且减少控制电路复杂度。
综合以上考虑,在FFT设计中,采用最为简
单的基2-FFT运算模式。
3 基于CORDIC算法的FFT设计的基本原理
在基2-FFT运算中,最重要的一部分是蝶形运算单元,如下式所示:
由式(3)可以看到,其包含了乘积项,如X1(k+B)。
CORDIC是一种用于计算一些常用的基本运算函数和算术操作的循环迭代算法,
其基本思想是用一系列与运算基数相关的角度,不断偏摆从而逼近所需旋转的角度,实现完成运算的目的。
在 FFT设计中,可以利用 CORDIC 运算实现蝶形运算中的乘法运算。
将量按照欧拉公式进行分解可以得到:
因此,上式可以写成:
提取项前面的余弦量:
利用角度的小角度变换得到多个逐次的迭代的运算:
因为tan θ = 2-i ,所以得到下面的计算公式:
因为∂与zi+1映射,所以得到最后的简式:
通过偏转角度的设置,实现xn和yn的逐次逼近运算,由∂n决定下一级是迭代的
正值还是负值。
通过分析可以知道,在设计中通过计算前面的累乘项,可以得到最后输出的结果,在n>9时,则前面的累乘项的结果近似为0.607253。
另外由于使用CORDIC运算时,角度偏转只能偏转90°,因此在进行角度变换时,首先要进行角度的预偏转[4]。
4 基于CORDIC运算的信噪比最优化设计
由基本原理可知, CORDIC运算的精度和操作数的位宽和迭代的次数有关[5-6]。
在造成FFT运算中产生的误差主要有近似误差和舍入误差。
近似误差主要是旋转
角度与实际计算的角度存在误差偏差,而舍入误差主要是FFT数据进行小数定点
化运算时,会出现小数舍入的运算误差。
近似误差与CORDIC运算迭代的次数有关,而舍入误差与定点化运算数据的位宽
和小数点的定标有关。
通过设计Matlab验证运算和相关函数,对FFT运算进行截断处理,然后进行仿真,得到信噪比的值。
衡量误差大小,采用信噪比来进行表示。
通过设计下面2个参数进行参考设计:一个参数是进行CORDIC运算的迭代级数;另一个参数运算数据位宽。
通过设计迭代参数和位宽参数,实现对不同参数条件下的信噪比的衡量。
单一的乘法运算,通过级数的增加,迭代的结果可以逐步逼近实际乘法的结果。
图1为乘法运算 CORDIC单一乘法运算的Matlab仿真图。
其中,横坐标表示所计
算的数据(无量纲),纵坐标表示利用 CORDIC得到数据所需要运行的级数。
图1 乘法运算CORDIC数据对比
从仿真图中可以清晰地看到,在级数大于 13级后,CORDIC完成的乘法运算和直接使用乘法器完成的乘法运算得到的结果偏差较小。
从图1可以看到,利用CORDIC迭代算法,可以有效地实现蝶形运算的乘法运算。
要设计整体CORDIC FFT最优的信噪比,降低近似误差和舍入误差,就需要对不
同的参数进行模拟,得到一系列的FFT信噪比的波形结果。
将基2-FFT运算编成Matlab代码,在Matlab中进行验证,通过利用CORDIC的计算结果和利用Matlab自带的FFT函数进行对比,得到一系列信噪比的参数。
从图2中可以看到,通过增大迭代级数和运算数据的位宽,可以明显地增大信噪比,但是当数据位宽和迭代次数上升到一定程度后,信噪比的增大就非常有限。
当迭代级数和数据位宽增大到一定级数后,信噪比值不会增大。
图2中的X轴表示运行的级数,Y轴表示
计算数据的位宽,而Z轴表示在不同的级数和数据位宽中得到的信噪比。
图2 FFT信噪比三维示意图
通过仿真结果得到如表1所示数据。
从表1可以看到,在整个设计中,信噪比达
到88 dB可以满足信噪比的要求,当继续增加迭代级数和数据位宽时,性能提高
并不明显,相反会增加过多的功耗,因此在这里采用迭代级数为14,数据位宽为20的数据设计。
表1 信噪比数据位宽/bit 信噪比/dB n=13 n=14 n=15 n=16 n=1718 72.531 88.394 85.699 94.622 95.87319 72.539 88.414 85.663 94.662 95.51020
72.529 88.437 85.661 94.659 95.51021 72.539 88.426 85.889 94.659
95.72222 72.539 88.421 85.889 94.659 95.722
5 硬件电路实现及其信噪比
硬件设计方法,在硬件设计中,采用14级流水线的设计方式。
在蝶形运算中,运算数据为 16 bit,实部和虚部采用最高位定标的方法,即数据
采用15 bit的数据,蝶形运算中采用25 bit的运算方式。
高位为4 bit,防止溢出,然后在参与运算前,数据补足最后的5 bit。
其中防溢出设计方法是当迭代运算超
出了低20 bit运算数据时,会向高4 bit数据进位,当数据完成了整体的CORDIC迭代运算后,会整体地进行截位运算,当高4 bit判断不是4’b0000或
者4’b1111时,就会对数据进行溢出处理,将数据设置成最大值或者最小值,
尽量减少处理误差。
因为硬件电路中有 14级CORDIC迭代运算,所以每一级的迭代角度参数固定输出,取代使用查找表的设计方法,这样可以减少硬件电路,从而减少静态功耗,并且减少芯片面积。
如图3所示是每一级迭代单元的电路模块。
整个数据的迭代计
算都是基于流水线的传输模式实现的,在每一级传输时,仅需要一个时钟周期的延时。
图3 流水线单级CORDIC运算模块
CORDIC FFT运算模块主要有2条流水线传输路径,一条传输路径传输的是蝶形
运算中k的数据,并且传输原位操作的存储器地址;另一条传输路径传输的则是
经过迭代运算后得到的k+bit的运算项,延迟模块中传输的数据为16 bit的数据,而在传输迭代模块,传输的是25 bit数据,在输入端需要有数据的扩充移位操作,在输出端需要有数据的截取操作。
整个模块的设计结构如图4所示。
图4 CORDIC FFT硬件电路模块
其中,FSM模块从存储器中读取数据进入输入级,然后经过 CORDIC_FFT_FSM
模块的控制,经过 14级的数据传递,实现最后数据的传输作用,最后将数据进行输出处理,输出处理主要做的是将信号进行溢出判断和截位处理。
通过仿真验证得到最后的信噪比结果是80.336 dB,该结果高于要求的信噪比70 dB的要求。
针对功耗分析,经过2个电路的对比,在采用原始结构中,在1 MHz频率下,功耗为69.75 mW,当采用CORDIC设计后,功耗降为55.36 mW,功耗降低有20.63%,能够实现低功耗设计。
6 结束语
在FFT处理器设计中,平衡CORDIC算法的信噪比、面积大小和功耗成了研究的
热点,本文通过选择合理的迭代级数和数据位宽可以在既提高FFT处理器的信噪比的同时,又兼顾减小电路规模,降低电路的功耗。
在实际的硬件电路的设计中,通过合理的数据截位处理和防溢出保护设计可以有效地提高实际FFT处理器的信噪比。
参考文献
[1]Brigham E O, Morrow R E.The Fast Fourier Transform[M].[S.1.]:Prentice Hall, 1976.
[2]Jack E V.The CORDIC Trigonometric Computing Technique[J].IRE Transactions on Electronic Computers, 1959, EC-8: 330-334.
[3]Garrido M, Grajal J.Efficient Memoryless Cordic for FFT
Computation[C]//Proc.of ICASSP’07.[S.1.]: IEEE Press, 2007:113-116. [4]李岩, 汪海明, 郭世德.CORDIC算法在DSP算法硬件中的应用[J].现代电子技术, 2002, (6): 85-89.
[5]韩芳, 初建朋, 赖宗声.一种 CORDIC算法的精度分析及其在FFT中的应用[J].微电子学与计算机, 2004, 21(7): 14-20.
[6]邓波, 戎蒙恬, 汤晓峰.可配置高速高精度 FFT的硬件实现[J].计算机工程, 2006, 32(17): 254-257.。