·上一文章:充分发挥FPGA浮点IP内核的优势
·下一文章:基于FPGA的2M误码测试仪设计
3 CORDIC算法原理与FPGA实现
3.1 CORDIC算法
计算三角函数和其它一些硬件不易实现的函数,一般可使用查表法、多项式展开或近似的方法。这些方法均不能兼顾速度、精度、简单性等方面的要求。CORDIC算法则是为解决这种问题而产生的。它从算法本身人手,可将复杂的算法分解成一些在硬件中容易实现的基本算法,如加法、移位等,从而使这些算法在硬件上可以得到较好的实现。由于该算法是一种规则化的算法,它满足硬件对算法的模块化、规则化要求,因此,CORDIC算法是可以充分发挥硬件优势并利用硬件资源来实现硬件与算法相结合的一种优化方案。
3.2 用于频偏校正的CORDIC算法的旋转模式
假设直角坐标系内有一个向量a(xa,ya),逆时针旋转θ角度后得到另一个向量b(xb,yb),那么,这个过程可以表示为:
如果向量a(xa,ya)经过n次旋转才到达向量b(xb,yb),其中第i次旋转的角度为θi,那么,第i次旋转的表达式为:
CORDIC算法的旋转示意图如图4所示。图中,若取旋转的角度总和这里的Si={-1;+1}。其中Si=+1表示向量是逆时针旋转,Si=-1表示向量是顺时针旋转。式中:随着旋转次数的增加,该式将收敛为一个常数k:
如果暂时不考虑这个增益因子k,则有:
这就是CORDIC的迭代式,它只需要通过移位和相加就可以完成矢量的旋转。其向量a向向量b逼近的精度由迭代的次数决定,迭代的次数越多,逼近的精度越高。而引入变量z则表示进行i次旋转后与目标角度之差。这样,迭代n次所得到的最终结果为:
可以看出,此模式下,便可求出给定角度的三角函数值。