APP下载

基于FPGA实现改进CORDIC算法研究*

2014-09-26

电子器件 2014年2期
关键词:累加器原理图分辨率

胡 煜

(桂林电子科技大学信息与通信学院,广西桂林541004)

基于FPGA实现改进CORDIC算法研究*

胡 煜*

(桂林电子科技大学信息与通信学院,广西桂林541004)

传统的CORDIC算法虽然能提高相位分辨率,但是硬件资源的消耗量很大,为了解决这个问题,对传统的CORDIC算法进行了改进,主要增加了内部相位累加器的位数,同时使用两位的方向控制因子改进下级流水操作的加减,在同等硬件资源的消耗量的情况下实现了更高相位分辨率的正余弦信号的产生。通过QuartusⅡ和MATLAB验证了系统的可行性。

CORDIC算法;控制因子;MATLAB;FPGA

CORDIC算法也叫坐标旋转数字计算机算法,在基本运算领域应用非常的广泛。在高速率运算中优势也非常明显,因为此算法需要的加法器和移位寄存器数量很少。目前应用最多是在直接数字频率合成、快速傅里叶变换等领域。传统的CORDIC算法具有减少迭代次数和提高相位分辨率的优点,但是同时也有很大的缺点那就是硬件资源的消耗量很大和实现难度大[1-2]。文章提出的基于FPGA改进CORDIC算法是在传统CORDIC算法上改进而成。经过改进的算法在不增加实现复杂度的基础上减少迭代次数和提高了相位分辨率,此改进算法通过了QuartusⅡ和MATLAB的验证。

1 CORDIC算法基本原理

CORDIC算法原理图如图1所示,设(xi,yi)为起点,经过角度为θ的矢量旋转到达终点(xj,yj)。

由图1可得式(1):

图1 CORDIC算法原理图

从起点到终点如果划分为若干个小旋转角度则可表示为:

式(2)也可表示为:

设每次旋转的角度为θn=arctan(1/2n),总的

旋转角度为:

式(4)中di=±1,所以有tanθ=di2-n,代入式(3)可表示为:

当N值比较大时:

如果不考虑cosθn可得:

引入角度累加器追踪累加的旋转角度:

设旋转方向控制序列为:{dn=±1;n=0,1,2…},旋转角度θ是正角,开始旋转后,如果出现旋转角首次大于θ的情况时,控制因子是dn=±1,n =0,1,2,…,k1;然后进行反向旋转,当出现旋转角首次小于θ的情况时,控制因子是dn=-1,n=k1+ 1,k1+2,…,k2;重复此前的旋转就能得到一个与θ角充分接近旋转向量[3-4]。角度累加器的方向控制因子是:dn=sign(zn)。

2 改进算法及FPGA实现

设x0=1,y0=0,z0=θ为初始值,进过N次迭代的结果为xn=(cosz0)/K,yn=(cosz0)/K。把输出结果乘上伸缩因子K可得到需要角度的sine和cosine的值。

第1,通过减少计算周期可使输出信号的频带范围扩大。为此可以把系统设计成流水线结构,这样就能解决因为迭代次数多导致信号周期长的问题,有效信号能在单个时钟周期内产生,系统的扩展性会更好,增加流水单元即可实现提高精度的要求。

第2,因为用的是多级相位累加器,截尾误差会在每一级相位累加器中产生,经过串行运算截尾误差会不断的累积,为了解决这个问题,要求每一级的截尾误差都必须要满足一个条件,这个条件就是:小于等于最小范围除以迭代次数。为了提高运算精度,可以把内部相位累加器增加一定的位数[5-6]。

第3,传统的CORDIC算法中下级流水操作的加减是由一位方向控制因子控制的。改进算法则是使用两位方向控制因子dn来控制,如果相位累加器的结果还没有最小旋转角度的1/2大的时候,此时dn处于“01”状态,所以下一级流水只保存上一级的结果并不操作。

方向控制因子和相关运算映射关系如表1所示。

表1 映射表

第4,MVR算法的优点是相位分辨率很高,但是需要查找表来解决伸缩因子的问题,其缺点也是很明显的那就是耗费了大量的资源。改进算法中分利用此算法的优点,角度还是用式(8)进行计算,所以转过的角度变化不大,而且只有一次角度旋转[7]。在满足系统对相位分辨率的要求的同时,最终的结果可以用最后一级迭代的次数乘上相应的伸缩因子K得到。系统的FPGA实现是在Altera公司的开发软件QuartusⅡ环境下使用VerilogHDL硬件描述语言实现的。顶层文件如图2所示。

图2 顶层原理图

相位累加通过phase_top模块实现,迭代运算通过add_top模块实现。所处象限是由输入的相位值决定的,象限映射关系如表2所示。

表2 象限映射关系表

3 测试结果和结论

3.1 测试结果

用MATLAB对系统进行仿真。把内部相位累加器位数增加4位,这样可以提高运算精度,结果图3所示。

图3 截尾误差造成的精度下降分析曲线

图3中实线data2是正弦函数值与标准正弦函数的值绝对误差,data1是函数值与标准正弦函数值绝对误差。通过上图可以看出运算误差大大降低。相位累加时考虑控制因dn正负的同时还具有停滞状态,所以此迭代算法在提高迭代精度的同时还增加了可计算的相位值。具体的测试结果如图4和图5所示。

图4 优化算法前后的迭代结果

由图4可以看出,通过增加停滞状态可以使相位分辨率增加,由图5可以看出采用文章提出的优化算法降低了迭代误差[8]。表3列出了传统算法和改进后的算法可取的相位数目,通过表3可以看出改进后的CORDIC算法在同等硬件复杂度的条件下相位分辨率大大提高。

图5 优化算法前后误差

表3 传统算法和改进算法可取的相位数目

3.2 结论

经过改进的CORDIC算法的内部相位的处理位数和迭代机制得到了很好的改进,和传统的CORDIC算法相比不但相位分辨大大率提高,而且计算误差也得到了有效的控制。改善效果最好的是sine和cosine函数导数较大的地方。该系统可以广泛的应用在NOC和FFT等领域。

[1] 李美俊,李光明.基于嵌入式的CORDIC算法的改进及实现[J].微电子学与计算机,2012,29(2):142-149.

[2] 夏少峰,黄世震.基于System Generator的CORDIC算法DDS的FPGA实现[J].电子器件,2010,33(1):128-131.

[3] 张尊,李绍荣.基于改进的CORDIC算法的NCO实现[J].信息通信,2009(4):11-13.

[4] 陈彦来.基于CORDIC算法的直角坐标与球面坐标变换电路的FPGA实现[J].舰船电子对抗,2011,34(1):72-75.

[5] 张伟,张安堂,肖宇.基于改进的CORDIC算法FFT的复乘及其FPGA实现[J].电子技术引用,2011,37(4):51-54.

[6] 朱双兵,杨维明,吴恙,等.基于CORDIC算法的线性调频信号产生[J].电子器件,2013,36(4):497-501.

[7] 何宾.FPGA数字信号处理实现原理及方法[M].北京:清华大学出版社,2010.

[8] 肖振华,林水生.基于CORDIC算法的FPGA实现[J].实验科学与技术,2011,9(5):19-22.

胡 煜(1979- ),男,汉族,湖北黄冈人,硕士,讲师,主要研究方向为网络通信/无线通信,huyu@guet.edu.cn。

Improve the CORDIC Algorithm Research Based on FPGA*

HU Yu*
(School of Information and Communication,Guilin University of Electronic Technology,Guilin Guangxi 541004,China)

Traditional CORDIC algorithm can improve the phase resolution,but consume considerable hardware resources.To solve this problem,the conventional CORDIC algorithm,in the great majority of cases,increases the medians in the internal phase accumulator,at the same time using the two-direction control factor to the lower pipeline addition and subtraction operations,and in the case of the same hardware resources consumption to achieves a higher phase resolution of the sine and cosine signal generation.The feasibility of the system is verified by QuartusⅡand MATLAB.

CORDIC algorithm;control factor;MATLAB;FPGA

10.3969/j.issn.1005-9490.2014.02.041

TN702;TP301.5

A

1005-9490(2014)02-0358-03

项目来源:国家自然科学基金项目(61261017)

2013-07-30修改日期:2013-08-15

EEACC:0200

猜你喜欢

累加器原理图分辨率
密码累加器研究进展及应用
浅谈STM32核心板原理图设计
电路原理图自动布图系统的设计与实现
基于Protel DXP 2004层次原理图的设计
EM算法的参数分辨率
原生VS最大那些混淆视听的“分辨率”概念
Fpga的信号发生器设计原理
基于深度特征学习的图像超分辨率重建
一种改进的基于边缘加强超分辨率算法
基于霍夫变换的工位点识别算法设计与实现