cordic算法反正切c语言,FPGA环境下基于cordic运算实现反正切运算(VHDL).doc

本文详细介绍了CORDIC算法在圆周系统旋转模式下的工作原理,用于实现角度计算。通过迭代运算,CORDIC算法可以逐步调整角度,最终得到目标角度的正弦、余弦和正切值。在向量模式下,该算法则用于求取向量的角度,通过不断旋转使向量接近实轴,从而得出角度。文章重点探讨了迭代公式及其在工程实现中的应用,并指出在数字计算中使用向量模式求反正切更为便捷。

CORDIC算法实现反正切运算算法

前言

CORDIC算法包括圆周系统、线性系统、双曲系统三种旋转系统,每种系统又分别具有旋转模式和向量模式两种运算模式。其中,运用最为广泛的时圆周系统的两种运算模式,本文也立足与项目应用,仅阐述圆周系统,其余系统可参看相关资料。

算法分析

要充分理解圆周系统,我们需先引入其旋转模式的概念,再以旋转模式引申到向量的概念中去。

CORDIC算法的旋转模式运算的实质就是执行一个平面内旋转,如图1所示,就是从一个坐标点转换到另一个坐标点的过程.

图1.平面旋转模式运算示意图

如图1中所示,原向量的坐标表达式为

(1)

其中,r为向量的长度,由于本文的目的是讨论角度的计算,所以,都假定向量旋转过程中的长度是固定不变的,这样,我们可以专注于角度的变化。

所以,目标向量的坐标表达式为

(2)

用向量统一表示为

(3)

公式1表示由向量到向量的旋转过程,即转过的相角为,可以通过迭代运算分多步执行角度旋转,每一步完成旋转的一部分.单步表述为:

(4)

其中表示下一步迭代需要执行的运算。

根据公式2,必须确切知道每单步要旋转的角度,具体计算方法阐述如下:

为方便表示,并简化方程中的参量,方程(4)提取COS后变成

(5)

规定每一步所调整的角度为

(6)

即单次调整最大为当n=0时调整,其后每次调整值逐步减小,如此多次调整后最终调整角度值即为目标值,向量旋转完毕。即

,其中为角度调整的方向,取值为{-1,+1},每次的取值由上次调整完后的角度剩余量的符号决定,将仍旧需要调整的角度定义为。

(7)

于是

(8)

<0表示调整过度,需要回调,所以=-1,下一步要逆时针旋转,反之,=1,继续按照逆时针调整。

综上所述,结合(5)、(6)式和(7)式以及旋转模式下旋转方向问题,(5)式在工程实现时应为

(9)

公式(9)是可以工程实现的迭代公式,试想,通过n次迭代运算后,向量由原来位置经过了n次不同角度的旋转,形成的新位置为

(10)

由上式可以看出,对于给定次数的向量旋转(n为有限次),所有的cos乘积趋近于固定值,为

(11)

于是,令 (12)

此K值与具体的迭代次数有关,对于所有的初始向量(n=0)和旋转角度而言,K时一个常数。而当迭代次数N趋向于无穷大时,K值收敛且K0.67253。通常定义K叫做聚焦常数,其倒数P1.64676,通常称作旋转增益,于是旋转向量又写为

(13)

在旋转模式下,经N次迭代运算后,已趋近于0,即=1,CORDIC公式的输出为

, (14)

公式(14)即为工程实现中的指导公式。在此种模式下,可以根据上式很方便的计算出一个给定角度的正弦、余弦和正切值。

但在数字计算中,使用向量模式求取一个向量的角度更容易,我们此次的工程中需要求取的就是反正切的角度,这样使用向量模式非常方便。

向量模式的计算方法和旋转模式很相似,区别在于向量模式的输入只有一组坐标值,求取此向量的角度,只需要将此向量旋转,使向量的Y坐标趋近于0,即,使向量旋转到与实轴重合,所转过的角度即为此向量的角度。如图2所示

图2.向量模式下旋转求角度示意图

并且,在计算过程中,的取值需取决于调整过程中的符号,因为在向量模式下要调整的目标位置为,故可根据的正负符号判断向量转动的角度是否已经超过目标值。当迭代运算N次后,,=1,实现指导公式变为:

, (15)

注意,此时的取值与旋转模式下的区别。其原则仍是+1表示要正向(逆时针)调整,-1表示要逆向(顺时针)调整。

将Z值初始化为,经迭代运算,当运算持续到Y=0时,此时

(16)

,此即为我们需要的向量的反

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值