zoukankan      html  css  js  c++  java
  • Cordic 算法的原理介绍

    cordic 算法知道正弦和余弦值,求反正切,即角度。

    采用用不断的旋转求出对应的正弦余弦值,是一种近似求解发。

    旋转的角度很讲求,每次旋转的角度必须使得 正切值近似等于 1/(2^N)。旋转的目的是让Y轴趋近与0。把每次旋转的角度累加,即得到旋转的角度和即为正切值。

    比如Y轴旋转45度,则值减小1/2;

       再旋转26.56505°,再减少1/4;

       再旋转角度14.03624º,再减少1/8; 依次减少1/16, 1/32......,最后Y轴的值无限小,趋近于0 。

    比如X=1, Y=1,的角度,角度是45°。经过一次旋转,要使得Y=0,这个角度必须是45°。

    如上图

    如图中,直角坐标系中点(X0,Y0)逆时钟旋转角度θ,变换成坐标(X1,Y1),那么用X0,Y0,以及θ的三角函数,如果表示X1,Y1呢?

    请想象,如果坐标也旋转角度θ,那么X1,Y1的坐标依然是(X0,Y0)。接着往下看:

    看完以上这副图,就该明白这个等式了:

    x1= x0cos θ − y0sin θ
    y1= x0sin θ + y0cos θ

    再把这个式子化成正切函数。

    Cordic 算法的思想是通过迭代的方法,不断的旋转特定的角度(这个特定的角度就是使得 Y为上次的1/2),使得累计旋转的角度的和无限接近某一设定的角度,

    每次旋转的角度的θ = arctan( 1/(2^n) );

    具体迭代如下表:Z0 =30°,Y0=0,X0 = 0.6073

    输入30°,经过9次迭代后, Z0 = 0,Y0=0.5006, X0 = 0.8657

    x '(i +1)= ( x 'i− y 'i(σi)2−i)
    y '(i +1)= ( x 'i(σi)2−i+ y 'i)

    (当 i = 0)
    x '1= 0.607 − 0 ⋅ (+1 ) ⋅ 1 = 0.607

    y '1= 0.607 ⋅ (+1 ) ⋅ 1 + 0 = 0.607

     通过Cordic算法后,得到y9=0.5006 (=sin(30°))

                                     x9=0.8657 (=cos(30°))

    所以也可以用cordic算法求出正切值的。

    或者求反正切值:

    计算公式:

  • 相关阅读:
    软件工程二人组队开发第一周
    软件工程第五周
    这学期的目标
    软件工程第四周的总结
    二维数组的最大子数组和 时间复杂度:O(n的四次方)
    10.tesseract
    mysql存储过程和函数
    mysql触发器
    9.selenium
    mysql练习
  • 原文地址:https://www.cnblogs.com/touchblue/p/3535968.html
Copyright © 2011-2022 走看看