CORDIC算法 arctan反正切计算原理及C语言定点实现 您所在的位置:网站首页 arctan的运算 CORDIC算法 arctan反正切计算原理及C语言定点实现

CORDIC算法 arctan反正切计算原理及C语言定点实现

2023-08-12 09:42| 来源: 网络整理| 查看: 265

之前做FOC算法的时候,用到了TLV493D磁传感芯片通过两个相差90°的正弦曲线计算角度,所以需要计算arctan的值。这里就基于CORDIC(坐标旋转数字计算方法,Coordinate Rotation Digital Computer)理论,实现一种arctan的定点计算方法。

一、原理 坐标旋转

与FOC中的Park变换原理相同,CORDIC也是通过旋转坐标轴来求解反正切值的。

x_{2} = x_{1}cos\theta - y_{1}sin\theta = cos\theta(x_{1}-y_{1}tan\theta)

y_{2} = x_{1}sin\theta + y_{1}cos\theta = cos\theta(y_{1}+x_{1}tan\theta)

如果去掉cosθ,这样不会影响角度旋转的结果,只是x和y都被缩小了cosθ,这样能简化计算,这称为伪旋转。得到下式:

x_{2} = x_{1}-y_{1}tan\theta

y_{2} = y_{1}+x_{1}tan\theta

而CORDIC的核心则是令tan\theta ^{i} = 2^{-i},此时得到下式:

x_{2} = x_{1}-y_{1}2^{-i}

y_{2} = y_{1}+x_{1}2^{-i}

 

(1) 为什么用2^{-i}呢?

因为在实际代码中,可以使用右移操作来完成,能加快计算速度。

(2)这个方法能计算的角度范围?

上表中列出了5个θ值,若为无穷个呢?由tan\theta = 2^{-i}可得\theta = arctan 2^{-i}

\pm \theta =\pm \sum_{0}^{\infty} arctan 2^{-i} \approx \pm 99.8829^{\circ}

所以可以看出用这个方法能求的角度范围在[-99.8829°,99.8829°]。而在大多数场合,我们的计算范围是在[-180°,180°]。四个象限内的arctan都可以相互转换,且arctan是个奇函数,所以我们只需要将其它角度都转到[0°,45°]范围内计算,得到结果后变换一下即可。

迭代

迭代求arctan的方法的原理就是:每次旋转上面表中计算出的角度,累加这个角度,使y趋近于0。

y趋近于0的意思,可以把旋转坐标系想象为Park变换。如图所示,坐标轴在以表中的角度旋转,假设此时要求点(1,1)相对x轴的角度,即θ = arctan(1/1) = 45°,坐标轴第一次旋转,则为表中最大的45°,此时在旋转坐标系(下图黑色)中,(1,1)点变为(\sqrt{2},0)。当然在计算的过程中,x最后不会是\sqrt{2},因为最开始我们为了方便计算将x和y都缩小了cosθ,但是一旦旋转到了我们期望的角度,y就是0。

因此,我们只需要不断让坐标轴旋转表中的角度,得到下式:

x_{i+1} = x_{i}-d_{i} (y_{i}2^{-i})

y_{i+1} = y_{i}+d_{i} (x_{i}2^{-i})

坐标轴在逆时针旋转时d_{i}=1,顺时针旋转时d_{i}=-1。其实就是因为tan(-\theta) = -tan\theta,规定以逆时针旋转为正,顺时针旋转为负。

假设θ=30°,初始角度为0°。第一次逆时针旋转45°,d_{i}=1。此时45°>30°,坐标轴要往回旋转26°,d_{i}=-1,此时角度为19°



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有