18 CORDIC-Algorithm us
Document Sample


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
Related docs
Get documents about "