Page 71 - 《应用声学》2023年第4期
P. 71
第 42 卷 第 4 期 刘宁庄等: 超声波电源中数字鉴相器设计 733
Y Y −i
R x i+1 = x i − d i y i 2 ,
Q Q
−i
y i+1 = y i + d i x i 2 , i > 0, (12)
P P
θ θ
α
−i
֓ O α X O X z i+1 = z i − d i tan −1 2 ,
֓ ֓
−1, y i > 0,
d i = (13)
(a) ေਇᣁᅺ᧚ڏ (b) ͢ᣁᅺ᧚ڏ
+1, y i < 0,
图 5 旋转模式矢量旋转图 0
其中,z 0 = 0 ,x 0 = cos θ,y 0 = sin θ,经过多次迭代
Fig. 5 Rotation mode vector rotation diagram
计算可得角度值θ。
图 5(a) 中向量 OP 旋转角度 θ 得到向量 OQ, 通过对CORDIC算法的深入分析可知,每次旋
则点Q可表示为 转都是按照一系列固定角度旋转,表1 为i从0到15
x = cos θ(x p − y p tan θ),
对应的θ 值与cos θ。
Q
(7)
y = cos θ(y p + x p tan θ).
Q
表 1 i 从 0 到 15 对应的 θ 值与 cos θ
由于 cos θ 不能通过数学的方式去掉,这里暂时去掉
cos θ,则点Q旋转角度θ 得到点R,如图5(b)伪旋转 Table 1 The value of θ corresponding to i
from 0 to 15 and cos θ
矢量图所示。伪旋转可表示如下:
x = x p − y p tan θ, i θ i (arctan 2 −i )
R cos θ i
(8)
0 45.0 0.7071067812
y = y p + x p tan θ.
R
通过对比两种旋转可知,旋转角度是正确的, 1 26.56505118 0.8944271909
但是伪旋转使模值增大了1/cos θ 倍,在伪旋转结果 2 14.03624347 0.9701425001
上乘上cos θ 即可得到真实值。将θ 分解为一系列微 3 7.125016349 0.9922778767
∑ ∞
小角度的和 θ = θ i ,为方便 FPGA 设计的实 4 3.576334375 0.9980525785
i=0
现,可令:
5 1.789910608 0.9995120761
−i
θ i = tan −1 d i 2 . (9)
6 0.8951737102 0.9998779520
于是可得 CORDIC 算法在旋转模式下迭代 7 0.4476141709 0.9999694838
方程: 8 0.2238105004 0.9999923707
−i
x i+1 = x i − d i y i 2 ,
9 0.1119056771 0.9999980927
−i
y i+1 = y i + d i x i 2 , i > 0, (10) 10 0.05595289189 0.9999995232
z i+1 = z i − d i tan 2 ,
−1 −i 11 0.02797645262 0.9999998808
12 0.01398822714 0.9999999702
+1, z i > 0,
d i = (11) 13 0.006994113675 0.9999999925
−1, z i < 0, 14 0.003497056851 0.9999999981
其中,x 0 = 1,y 0 = 0,d i 表示每次旋转的旋转方向, 15 0.001748528427 0.9999999995
z i 为迭代剩余角度,在迭代最终结果上乘上每次迭
代对应的 cos θ i 进行修正即可得到真实值。可见只 由公式θ i = tan −1 d i 2 −i 可知θ 旋转范围。
需通过简单的移位和加减运算便可实现 CORDIC
∞
∑
算法。 θ max = tan −1 2 −i ≈ 99.8829 ,
◦
向量模式可用于计算反正切值,其与旋转模 i=0 (14)
∞
式的区别在于旋转方向判断条件的不同,式 (12)、 ∑ − tan −1 −i ◦
θ min =
2 ≈ −99.8829 .
式 (13)为向量模式下CORDIC算法数学表达式: i=0