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
   66   67   68   69   70   71   72   73   74   75   76