CORDIC算法详解(二)

时间:2024-03-30 09:29:41

CORDIC算法详解(二)- CORDIC 算法之圆周系统之向量模式(Vectoring Mode)


  网上有很多类似的介绍,但是本文会结合实例进行介绍,尽量以最简单的语言进行解析。
  CORDIC ( Coordinate Rotation Digital Computer ) 是坐标旋转数字计算机算法的简称,
由 Vloder• 于 1959 年在设计美国航空导航控制系统的过程中首先提出[1], 主要用于解决导航系统中三角函数、 反三角函数和开方等运算的实时计算问题。 1971 年, Walther 将圆周系统、 线性系统和双曲系统统一到一个 CORDIC 迭代方程里 , 从而提出了一种统一的CORDIC 算法形式[2]。
  CORDIC 算法应用广泛, 如离散傅里叶变换 、 离散余弦变换、 离散 Hartley 变换、Chirp-Z 变换、 各种滤波以及矩阵的奇异值分解中都可应用 CORDIC 算法。 从广义上讲,CORDIC 算法提供了一种数学计算的逼近方法。 由于它最终可分解为一系列的加减和移位操作, 故非常适合硬件实现。 例如, 在工程领域可采用 CORDIC 算法实现直接数字频率合成器。 本节在阐述 CORDIC 算法三种旋转模式的基础上, 介绍了利用 CORDIC 算法计算三角函数、 反三角函数和复数求模等相关理论。 以此为依据, 阐述了基于 FPGA 的 CORDIC 算法的设计与实现及其工程应用。

2 CORDIC 算法之圆周系统之向量模式(Vectoring Mode)

2.1 向量模式(Vectoring Mode)

  在向量模式下, CORDIC 算法主要用于实现直角坐标系到极坐标系的转换 旋转模式下, 每次迭代使 z 趋向于 0。与之相比, 向量模式下, 则是使y趋向于 0。 为了达到这一目标, 每次迭代通过判断 yi 的符号确定旋转方向, 最终使初始向量旋转至 X 轴的正半轴, 这一过程也使得每次微旋转的旋转角度累加和存储在变量 z 中。 矢量旋转图如图 3.76 所示, 相应的迭代过程如式(3.110) 所示:

CORDIC算法详解(二)
  经过n(n–>∞)次旋转,使图3.76中的P靠近x轴。因此,当迭代结束之后,P将近似接近x轴,此时P点纵坐标yn = 0,在这个过程中可知旋转了θ,即zn = z0 +θ = z0+arctan(y0/x0)(z0为初始化角度)。
  由上一篇文章可知,每次微旋转都导致向量模长发生了变化。以Ki表示第 i次微旋转模长补偿因子, 故第 i次微旋转真实旋转的结果应为:
CORDIC算法详解(二)
  其中,由于在伪旋转中,去掉了cosθi,所以Ki=cosθi 由式 (3.99) 可知:
CORDIC算法详解(二)

CORDIC算法详解(二)

  当n趋于无穷大时,K 逼近 0.607252935。
  经过n(n–>∞)次旋转,可得:

  • xn = 1/∏cosθi(x0cosθ – y0sinθ)(其中i从0至n-1)
  • yn = 1/∏cosθi(y0cosθ + x0sinθ)(其中i从0至n-1)

  因此,可得y0cosθ + x0sinθ = 0

  • xn = 1/∏cosθi(x0cosθ – y0sinθ) = 1/∏cosθi{ [ (x0cosθ – y0sinθ)2](1/2)}(平方再开方)
    = 1/∏cosθi{ [ x02cos2θ + y02sin2θ – 2x0y0sinθcosθ](1/2)}
    = 1/∏cosθi{ [ x02cos2θ + y02sin2θ + y02cos2θ + x02sin2θ ](1/2)}
    = 1/∏cosθi{ [ x02 + y02](1/2)}

   得到的最终结果为
CORDIC算法详解(二)
  式( 3.111 ) 中, 要求初始化角度 z0 = 0 , 从而可获得向量的模长和相角。 以向量(1,2)为例,其旋转过程如表 3.20 所示, 前 3 次微旋转矢量图如图 3.77 所示。
CORDIC算法详解(二)
CORDIC算法详解(二)
  旋转模式和向量模式的相同之处在于: 两者都是微旋转, 也都是伪旋转。 前者使得向量模式下的初始向量必须落入第一或第四象限; 后者使得向量模长发生变化需要补偿。

2.2 思考

  若初始向量落入第二或第三象限该如何处理?
  由于微旋转限定了初始向量必须在第一或第四象限 ,这就要求 x0 > 0 ,而对 y0没有要求。根据对称性,当初始向量位于第二象限时,将其搬移至第一象限;当初始向量位于第三象限时,将其搬移至第四象限,如图3.78所示,然后在对搬移后的向量利用CORDIC算法进行处理。对CORDIC处理的结果,根据 x0 和 y0的符号(判断初始向量所在的象限)做对应的处理,从而获得初始向量的相角,处理流程如图如图 3.79 所示。
CORDIC算法详解(二)

2.3 CORDIC 算法之圆周系统之向量模式应用