引言
浮点超越函数的应用领域十分广泛,涉及航空航天、机器人技术、实时语音、图像信号处理、滤波技术、FFT变换等领域。因此,设计并实现浮点三角超越函数是非常重要的。硬件实现的超越函数算法,按照数学公式和对应的实现方式的不同,可以分为查表法、多项式近似法、基于查表的多项式结合方法、有理数近似和逐位法五类。经过对这些算法进行分析和比较,本文选择
CORDIC作为超越函数的算法,并用Altera公司的CycloneⅡ芯片完成硬件实现。
1 CORDIC原理
CORDIC(Coordinate
Rotation Digital
Computer)算法即坐标旋转数字计算方法,是J.D.Volder[1]于1959年首次提出,主要用于三角函数、双曲线、指数、对数的计算。该算法通过基本的加和移位运算代替乘法运算,使得矢量的旋转和定向的计算不再需要三角函数、乘法、开方、反三角、指数等函数。
1.1 圆周系统
CORDIC算法包含圆周系统,线性系统,双曲系统三种旋转系统。本文仅以圆周系统推导如下:
该系统完成的是一个平面坐标旋转,如图1所示。从图1中可以看出,将向量( Xi ,Yi )旋转θ 角,得到一个新的向量( Xj , Yj
),那么有:

其中R为圆周的半径,θ 为旋转角度。把上式化为矩阵形式,平面旋转定义如下:

使用迭代的方法,旋转的角度可以在多步之内完成,每一步的旋转完成其中的一小部分,多步之后将会完成一个平面旋转。旋转等式由式(2)定义,消除cosθ n 因子得到单步旋转等式为:

将比例因子从迭代公式中提取出来,定义K 为增益因子,则有:

具体增益K取决于迭代次数N。对于所有的初始向量和所有的旋转角度而言,K是一个常数。通常把K称作聚焦常数[2],式(8)中常数P为K的倒数。
1.2 计算模式
CORDIC 算法有旋转模式和向量模式[3]
两种计算模式。
1.2.1 旋转模式
在旋转模式中,Z 为初始化需要旋转的角,当Z
旋转变为0 时,公式变化如下:

从式(11)的分析可以看出,CORDIC
算法在圆周系统的旋转模式可以用来计算一个输入角的正弦、余弦和正切,此外还可以将极坐标变换为平面坐标。
1.2.2 向量模式
向量模式将输入向量通过一个特定的角Y
变为0。这种模式下的CORDIC 算法跟旋转模式差不多,区别是旋转的方向取决于Y 而不是Z 的符号。那么N 次迭代后CORDIC
公式的输出变为:

从式(13)可以看出,CORDIC 算法在向量模式可以计算给定向量(X,Y)的长度和角度,即从平面坐标到极坐标的变换。
…………
全文点击下载
本文作者:李全 陈石平 付佃华
作者单位:桂林电子科技大学