crazybird

【原创】初识CORDIC算法

0
阅读(6216)

一、CORDIC(Coordinate Rotation Digital Computer,坐标旋转数字计算机)算法提供逼近计算的方法,可以将复杂的三角函数、平方根等复杂运算转化为简单的移位相加运算。

二、CORDIC算法有3种旋转系统:圆周系统、线性系统和双曲系统。每种系统下有2种工作模式:旋转模式和向量模式。

三、圆周系统的旋转模式

1、在直角坐标系中,将向量OP逆时针旋转θ角得到向量OQ,如图1所示。于是有如下关系式:

图片1

  图1 圆坐标系旋转

2、由图1可得以下关系式:

                                图片2                       (式1)

证明:令wps802A.tmp,则有

                                wps803B.tmp         (式2)

又因为wps7821.tmp,代入(式2)可得

                                wps7822.tmp                        (式3)

故命题得证。

2、通过提取因数wps7833.tmp,(式3)可转化为

                                wps7834.tmp                       (式4)

3、去除wps7835.tmp项(可以简化坐标平面旋转的计算操作),得到伪旋转方程式:

                                wps7836.tmp                            (式5)

由于wps7846.tmp,故模值会增大wps7847.tmp倍。另外,旋转的角度是正确的。

4、我们假设第i次旋转角度为wps7848.tmp,则第i次伪旋转的表达式为

                                  wps7849.tmp                         (式6) 

wps784A.tmp进行一定的限制,使得wps785B.tmp,即wps785C.tmp。旋转角度的总和wps785D.tmp,其中wps785E.tmp,当wps785F.tmp时表示向量是逆时针旋转,当wps786F.tmp时表示向量是顺时针旋转。每次旋转的方向都影响到最终要旋转的累积角度。在wps7870.tmp的范围内任意角度都可以旋转,满足wps7871.tmp所有角度的总和为wps7872.tmp。对于该范围之外的角度,可用三角恒等式变换成该范围内的角度。例如,当目标角度覆盖到wps7873.tmp时,则需要对目标角度进行预处理。预处理方法一:在原有旋转角度的基础上再添加两级i=0,即将旋转角度总和扩大了wps7884.tmp,这样目标角度的的取值范围为wps7885.tmp;预处理方法二:依据正、余弦函数的对称性。

5、在满足第五点的条件下,伪旋转可表示为

                                    wps7886.tmp                      (式7)

其中第三个方程为角度累加器,用来在每次迭代过程中追踪累加的旋转角度;wps7887.tmp是一个判决算子,用于确定旋转的方向,wps7898.tmp

6、令wps7899.tmp,表征每次旋转时向量模长发生的变化。若总得旋转次数为为n,则总的比例因子K为

                                    wps789A.tmp                        (式8)

wps789B.tmp时,K=0.6073。

7、在旋转模式中:wps789C.tmp。经过n次迭代后得到

                                   wps78AC.tmp              (式9)    

wps78AD.tmp时,wps78AE.tmpwps78AF.tmp。通过设置wps78C0.tmpwps78C1.tmp可以计算wps78C2.tmpwps78C3.tmp。             

四、圆周系统的向量模式

1、其相应的迭代运算式为:

                                    wps78C4.tmp                  (式10)

其中,wps78D4.tmp

2、经过n(n→∞)次旋转,得到最终结果为

                                     wps78D5.tmp                (式11)

通过设置wps78D6.tmpwps78E7.tmp来计算wps78F8.tmp

五、通用的CORDIC方程

                                      wps78F9.tmp              (式12)

  • 圆周旋转:wps78FA.tmp

  • 线性旋转:wps78FB.tmp

  • 双曲线旋转:wps78FC.tmp

六、常用三角函数

(1)两角和公式

wps790C.tmp

(2)倍角公式

wps791D.tmp

(3)诱导公式

wps791E.tmp