整个系列分别从圆周系统、 线性系统和双曲系统及硬件实现进行分析,如下:
CORDIC算法详解(一)- CORDIC 算法之圆周系统之旋转模式( Rotation Mode )
CORDIC算法详解(二)- CORDIC 算法之圆周系统之向量模式(Vectoring Mode)
CORDIC算法详解(三)- CORDIC 算法之线性系统及其数学应用
CORDIC算法详解(四)- CORDIC 算法之双曲系统及其数学应用
CORDIC算法详解(五)- 统一的 CORDIC 算法形式
CORDIC算法详解(六)- CORDIC 算法的硬件实现
其中第五篇及第六篇后会放出相关参考资料及源码。
线性系统下的坐标系如下所示,基本推导过程和旋转坐标系类似,就不在多述。
线性系统下的 CORDIC 算法亦有旋转模式与向量模式, 如图 3.83 所示。 其中, 旋转模式解决了乘法计算问题, 向量模式解决了除法计算问题。
在线性系统中, 第 i次的旋转角度为
这里初始化迭代的顺序号由 1 起始而不是由 0 起始, 从而
其中di∈{+1, -1} 结合式 (3.114 ) 和 (3.115 ) 可得出图 3.83 所示的迭代过程。 式 (3.115 )也进一步表明, 只有当|z|≤1 时, 才可以表示为一系列的2-i(i=1,2,…,) 的线性组合; 也证明了为什么迭代顺序号由 1 开始而不是由 0 开始。 由此也限定了在旋转模式下|z1|≤1 ,在向量模 式 下|y1/x1|≤1 。
旋转模式下, 可利用 CORDIC 算法实现乘法运算, 要求|z|≤1 ,如图 3.84 所示。 图中x1= 100 , z1 =-1:0.1:1 , 即 z1起始值为-1,步进为 0.1,终止值为 1。
向量模式下, 可利用 CORDIC 算法实现除法运算, 要求|y1/x1|≤1 即 |y1|≤ |x1|且x1>1 。若令y1=1,x1>1,z1=0,则可以获得x1>1的倒数1/x1>1,如图3.85所示。
% /*
% * @Author: ZLK
% * @Date: 2018-10-31 10:00:17
% * @Last Modified by: ZLK
% * @Last Modified time: 2018-10-31 10:05:24
% */
function a = cordic_lr(x1,y1,z1,mode,it)
% File: cordic_lr.m
% Note: Linear Rotation of Cordic Algorithm.
% xl,yl,zl: input parameters.
% mode: 0 rotation mode; 1 vectoring mode.
% mode: 0 z0 [-1,1].
% mode: 1 abs(y)<=abs(x).
% it: iteration number.
x = zeros(it+1,1);
y = zeros(it+1,1);
z = zeros(it+1,1);
x(1)= x1;
y(1)= y1;
z(1) = z1;
di = 0;
for k=1:it
if mode==0
di = sign(z(k));
else
di = sign(-y(k));
end
x(k+1)= x(k);
y(k+1)= y(k)+x(k)*di*2^(-k);
z(k+1)= z(k)-di*2^(-k);
end
xn = x(it+1);
yn = y(it+1);
zn = z(it+1);
if mode==0
xt = x1;
yt = y1+x1*z1;
zt = 0;
else
xt = x1;
yt = 0;
zt = z1+y1/x1;
end
a =[xn,xt,yn,yt,zn,zt];