18 CORDIC-Algorithm us

Document Sample
18 CORDIC-Algorithm us Powered By Docstoc
					18        CORDIC–Algorithmus

(Coordinate Rotation Digital Computing)


Gesucht:        Berechnung von sin x, cos x auf dem Computer
                                                            π π
 o
L¨sung:         1. Argumentreduktion so, dass θ = x−kπ ∈ − ,    , k ∈ Z geeignet.
                                                            2 2
                                         π π
                2. Darstellung von θ ∈ − ,      in der Form
                                         2 2
                                      ∞
                            θ=             dk wk ,    dk = ±1 ,   wk = arctan 2−k .
                                     k=0                               tabelliert

                3. Anwendung des CORDIC–Algorithmus; in der Grundform Hinter-
                               u
                   einanderausf¨hrungen von Drehstreckungen.



Satz 1
                                                                                      ∞
                                                         u
Sei (wk ) eine fallende Folge positiver reeller Zahlen, f¨r die s :=                        wk konver-
                                                                                      k=0
giere. Es gelte
                 ∞
      wk ≤              wi ,        k ∈ N0 .                                                       (1)
                i=k+1

 u
F¨r festes t ∈ [−s, s] sei (tk ) definiert durch
          t0 := 0                                             1 , falls tk ≤ t
                                              mit dk :=                          .                 (2)
          tk+1 := tk + dk wk                                 −1 , falls tk > t
Dann gilt
                                ∞
      t = lim tk =                  dk wk .                                                        (3)
            k→∞
                            k=0




Beweis
                k−1
      tk =            di wi ,       k ∈ N.                                                         (4)
          (2)
                i=0
Wir zeigen:
           ∞                               ∞
      −         wi ≤ t − tk ≤                    wi                                                (5)
          i=k                              i=k

                                           u
                                       →0 f¨r k→∞


                                                         1
     ( =⇒ (3) )
      (4),(5)



Induktion nach k:

k=0:         t0 = 0       ⇒     −s ≤ t − 0 ≤ s , da t ∈ [−s, s] nach Voraussetzung

k →k+1:

     1. Fall: dk = −1
     ⇒ tk > t ⇒                  t − tk < 0
                                                                                       ∞
       ⇒         t − tk+1 = t − (tk −wk )                  <         wk          ≤        wi
     dk =−1
                                   <0
                                                                                (1) i=k+1
                                                 ∞                                 ∞
                                       ≥     −            wi + wk = −                    wi
                                  Ind.vor.
                                                 i=k                             i=k+1


     2. Fall: dk = 1
     ⇒ tk ≤ t ⇒                  t − tk ≥ 0
                                                                          ∞                     ∞
      ⇒         t − tk+1 = t − (tk +wk )                    ≤                   wi − wk =              wi
     dk =1                                                Ind.vor.
                                  ≥0                                      i=k                  i=k+1

                                                            ∞
                                  ≥ −wk ≥ −                       wi
                                               (1)
                                                          i=k+1




Bemerkung 1

            y
  a) wk = k (y > 0) , wk = ln(1 + 2−k ) ,                                        wk = arctan 2−k erf¨llen die
                                                                                                    u
           2
     Voraussetzungen von Satz 1.

     Beweis f¨r wk = arctan 2−k :
             u
                    √
      i) wk > 0 :
       ii) (wk ) ց :        f (x) := arctan x
                            1
                f ′ (x) =         > 0 ⇒ f (x) ր
                          1 + x2                                                  ⇒        (wk ) ց
                (2−k ) ց
                      ∞
       iii) s :=            wk existiert:
                      k=0
                                                      ′        1          −x2
              g(x) := f (x) − x            ⇒         g (x) =        −1 =        ≤0
                                                             1 + x2      1 + x2
                      ⇒       g(x) ց                                                                        (6)

                                                            2
       0 ≤ x ≤ 1 (Beachte: 0 ≤ 2−k ≤ 2−0 = 1)
                                            π
       ⇒ g(1) = f (1) − 1 = arctan(1) − 1 = − 1 ≤ g(x) ≤ g(0) = 0
                                            4   (6)    (6)


               ⇒                          u
                            arctan x ≤ x f¨r 0 ≤ x ≤ 1                                                             (7)
                         ∞                                  ∞
                                          −k                                         1
       ⇒       s=              arctan 2           ≤               2−k         =              =2
                                                                                         1
                        k=0                                 k=0                    1−
                                                                                         2
                                                      konvergente
                                                      Majorante
                   ∞
   iv) wk ≤                 wi :
               i=k+1
       Sei y > 0 fest, x > 0 .
       h(x) := arctan(x + y) − arctan x − arctan y
                     1            1
       h′ (x) =             2
                              −        < 0 ⇒ h(x) ց
                1 + (x + y)     1 + x2
       ⇒       h(x) ≤ h(0) = arctan y − arctan y = 0
       ⇒                                            u
               arctan(x + y) ≤ arctan x + arctan y f¨r x, y > 0
                                                             ∞
                   −k          −(k+1)         1
               2        =2                          =               2−i                                            (8)
                                            1
                                         1−              i=k+1
                                            2
                                                                         ∞
       ⇒       wk = arctan(2 ) = arctan  −k
                                                                               2−i
                                                                    i=k+1
                    ∞                                   ∞
           ≤                  arctan(2−i ) =                      wi .
       (8)+Ind.
                   i=k+1                              i=k+1



                                   ∞
b) Berechnung von s =                    wk mit wk = arctan(2−k ) :
                                   k=0

                        k                ∞                      ∞
                                                                                                 1
        0≤s−                  wi =                wi ≤              2−i = 2−(k+1)
                                                      (7)                                            1
                        i=0          i=k+1                  i=k+1                            1−
                                                                                                     2
  Damit:
                                                                                             k
                       − ln ǫ                                                 −k
  ǫ > 0 vorgeben, k >          a
                              w¨hlen (⇒                                   2        < ǫ) ,            wi als Approxima-
                        ln 2                                                                 i=0
  tion von s berechnen.
       s = 1.7432866204723400035...




                                                            3
Standard–CORDIC–Algorithmus (Volder, 1959)

x0 , y0 , z0 ∈ R gegeben
                                               
                  1 , falls zk ≥ 0             
       dk :=                                   
                                               
                −1 , sonst                     
                                               
       xk+1 := xk − dk yk 2−k                       k = 0, 1, ...                          (9)
                                               
       yk+1 := yk + dk xk 2−k                  
                                               
                                               
                                               
       zk+1 := zk − dk arctan 2−k



Satz 2                                                    aus (9)
                                                                                          
                  ∞                                       xk           x0 cos z0 − y0 sin z0
    |z0 | ≤ s =         arctan 2−k         ⇒        lim  yk  = K ·  x0 sin z0 + y0 cos z0 
                                                   k→∞
                  k=0                                     zk                     0
                        ∞
      mit K :=                1 + 2−2k = 1.646760258121065648366051...
                      k=0
             
              x0 = 1 = 0.6072529350088812561694...
             
      F¨r
        u           K
              y0 = 0
             
               z0 = θ , |θ| ≤ s
                                       
                            xk      cos θ
      folgt somit lim  yk  =  sin θ  .
                   k→∞
                            zk        0


Beweis
                                      π
Wende Satz 1 auf wk = arctan 2−k ∈ (0, ], t = z0 an. F¨r
                                                      u
                                      4
         t0 := 0                                               1 , falls tk ≤ z0
                                          mit dk :=                                       (10)
         tk+1 := tk + dk wk                                   −1 , sonst

gilt dann
                   ∞
      lim tk =           dk wk = z0 .                                                     (11)
      k→∞
                   k=0

Definiere
                               >1

         xk+1                  1            cos(dk wk ) − sin(dk wk )              xk
                   :=
         yk+1               cos wk          sin(dk wk )  cos(dk wk )               yk
                               ∈(0, π ]
                                    4      Drehung um den Winkel dk wk um
                                             0
                                                  in Gegenuhrzeigerrichtung
                            Streckung        0


                                                      4
                                                     1              cos wk −dk sin wk                    xk
                                         =                                                                          (12)
                                       dk =±1      cos wk          dk sin wk cos wk                      yk

      wk = arctan 2−k                    ⇒           tan wk = 2−k            ⇒        sin wk = 2−k cos wk           (13)

                       xk+1                         1   −dk 2−k                  xk
      ⇒                             =                                                         wie in (9)
      (12)             yk+1                      dk 2−k   1                      yk
                 cos α − sin α                         cos β − sin β                                  cos(α + β) − sin(α + β)
Wegen                                                                                   =
                 sin α  cos α                          sin β  cos β                    ↑              sin(α + β)  cos(α + β)
                                                                                    Additions-
                                                                                    theoreme

und (11) folgt aus (12)
                                    ∞
                   xk                    1                   cos z0 − sin z0                  x0
       lim                     =
      k→∞          yk                  cos wk                sin z0  cos z0                   y0
                                   k=0

        (13) ⇒                 sin2 wk = 2−2k cos2 wk                       ⇒       1 = (1 + 2−2k ) cos2 wk
                              =1−cos2 wk
                                                                                ∞
                                1                                                   1
                   ⇒                 =              1+      2−2k        ⇒                =K
                              cos wk                                          k=0
                                                                                  cos wk
                                                       m                            m
                                                                                          1
(Beachte: (um ) mit um := ln                                     1+   2−2k   =              ln(1 + 2−2k ) ist monoton
                                                       k=0                          k=0
                                                                                          2
wachsend und wegen
                                   m                         ∞
                              1              −2k     1                       1   1                2
      um           ≤                     2         ≤              2−2k =       ·          1   =
                   ↑          2   k=0
                                                     2      k=0
                                                                             2 1−         4
                                                                                                  3
             ln(1 + x) ≤ x
              u
             f¨ r x ≥ 0


nach oben beschr¨nkt, also konvergent gegen ein u⋆
                a
                                                        ∞
                 um                           u⋆
      ⇒        e               →             e     =              1 + 2−2k = K .)
                              m→∞
                                                       k=0



Setze zk := z0 − tk , k = 1, 2, ...
                         z0        =     z0 − t0             gegeben wie in (9)
      ⇒                           (10)
                       zk+1        =     z0 − tk+1 = z0 − tk − dk wk = zk − dk wk

                                    1 , falls zk = z0 − tk ≥ 0
      mit dk =
                       (10)        −1 , sonst

Damit:
                          k
      zk = z0 −                 di wi            →          z0 − z0 = 0 wegen (11) .
                                                 k→∞
                         i=0




                                                                    5
z0 = θ :
 y



                           Drehstreckung
                                                         Beachte:
                                                         xk+1 − xk       −dk 2−k yk       xk
                                                         yk+1 − yk   =   dk 2−k xk    ⊥   yk

             zk = θ − tk              (xk+1 , yk+1)


                                dk wk
                                            (xk , yk )



                                 tk
                θ = z0
                                                                                      x
                                                   2
                                             x2 + yk
                                              k




Bemerkung 2

                                                                             y0
                u
     a) Geringf¨gige Modifikationen von (9) erlauben die Berechnung von arctan ,
                                                                             x0
                               y0          x0
        sinh θ, cosh θ, artanh , x0 · y0 ,    .
                               x0          y0
                    a
        Hieraus erh¨lt man z.B.
                               x−1
              ln x = 2 arctanh
                               x+1
        und
             ex = cosh x + sinh x .

     b) Zur Durchf¨hrung von (9) braucht man nur Shifts (wegen ·2−k ) und Addi-
                   u
        tionen von Dualzahlen.
        ,,Shift–and–Add–Strategie”; einfache Grundoperationen!
                                                                                  u
     c) In der Praxis wird (9) noch modifiziert. Wegen a) und b) ist (9) geeignet f¨r
        Hardware–Implementierung (z.B. HP35–Taschenrechner, Intel 8087 Prozes-
        sor bis 80468 Prozessor). Es gibt allerdings schnellere Algorithmen als (9).

        Literatur:   J.–M. Muller: Elementary Functions. Algorithms and Imple-
                                              a
                     mentation, 2. Aufl., Birkh¨user, Basel, 2006.


                                             6