9 0。1119 0。001953125 0。999998093
10 0。0560 0。000976563 0。999999523
11 0。0280 0。000488281 0。999999881
12 0。0140 0。000244141 0。999999997
对二分查找的角度进行了修改后,前面的伪旋转可表示为(2-6)和公式(2-7)(对每次迭代)。而本身需要储存在rom中的tan值变为了,这些值只需要通过对乘数的简单移位操作就可以实现。这样在rom中就不用储存大量的数值了,从而节约了储存空间,提高了运算速度。
公式(2-6)
公式(2-7)
上文提到,在经过不断地迭代之后,会有一个累加的旋转角度,也就是我们原本设定的旋转角,我们引入第三个方程公式(2-8),称之为角度累加器:
公式(2-8)文献综述
其中。 符号是一个判决因子,通过它的正负可以判断旋转的方向。现在,我们已经将原始的算法简化成使用向量的伪旋转来表示的迭代移位运算。考虑到一个问题,我们之前在做伪旋转的时候省略了cos(θ),然而这引发的负面效果就是使得每一次迭代都把 实际长度放大了1/cos(θ)倍。输出值被乘以一个因子,我们称为伸缩因子,其计算公式为(2-9):
公式(2-9)
由表格2-1中的cos(θ)的值我们可以得到:cos45×cos26。5×cos14。03×cos7。125……×cos0。0139=0。6073,也即当时,,即,其中,角分辨率的数据位对最终的旋转计算精度非常重要。
2。2 CORDIC算法的工作模式
CORDIC算法有两种工作模式:旋转模式和向量模式,工作模式决定了控制判决因子的条件,当在旋转模式下工作时: 初始旋转角度, =sign。是每次旋转叠加之后的角度值,即为它的符号位,当>0时表示该向量逆时针旋转,当<0时则表示向量顺时针旋转。那么经过n次迭代后得到公式(2-1) ,公式(2-2) ,公式(2-3):
公式(2-10)
公式(2-11)
公式(2-12)
我们在上述公式的基础上,令和,然后经过n此迭代,
当趋向于0时可以计算 sin和cos 的值。所以,将所需产生的角度值作为输入,那么迭代后的就是要求的三角函数值,由此可知CORDIC算法的旋转模式可以用来计算一个输入角的三角函数值。因此我们输入和,然后通过迭代使=0。
按照Wather提出的迭代序列,CORDIC算法所覆盖的角度范围为[-99。9°,99。9°],覆盖不了[-180°,180°],这限制了该算法的计算范围。我们采用增加迭代的方法来对角度进行预处理。预处理的方法是在本来的旋转角度的基础上再添加两级i=0,实质上这是将旋转角度总和放大了90°,这样使得目标角度的取值范围扩大到[-189。9°,189。9°]。正、余弦函数本身具有对称性,所以我们还可以进行其他一些预处理,如下表2-2所示。为了方便说明,表2-2中都采用弧度制来表示。