www.wikidata.de-de.nina.az
Der CORDIC Algorithmus englisch Coordinate Rotation Digital Computer ist ein effizienter iterativer Algorithmus mit dessen Hilfe sich viele mathematische Funktionen implementieren lassen wie z B trigonometrische Funktionen Exponentialfunktion und Logarithmen sowie auch die einfache Multiplikation oder Division Inhaltsverzeichnis 1 Motivation 1 1 Geschichtliche Entwicklung 1 2 Anwendungsbeispiele 2 Funktionsweise 2 1 Initialisierung 2 2 Rotationsmodus 2 3 Vektormodus 2 4 Bereich ausserhalb von p 2 3 Verallgemeinerung 3 1 Lineare Modi 3 2 Hyperbolische Modi 4 Alternativen 5 Literatur 6 WeblinksMotivation BearbeitenIn der Rechentechnik vornehmlich in der digitalen Signalverarbeitung benotigt man schnelle Verfahren fur die Berechnung von bspw trigonometrischen Funktionen Herkommliche Reihenentwicklungen wie z B die Taylorreihe zeigen oft nur mittelmassige d h langsame oder gar von den Argumenten abhangige Konvergenz und schlechte numerische Stabilitat Eine Reihenentwicklung besteht ausserdem hauptsachlich aus einer Summe von Produkten die nur aufwendig zu berechnen sind Geschichtliche Entwicklung Bearbeiten Der CORDIC Algorithmus wurde 1959 von Jack E Volder prasentiert In der ursprunglichen Version war es damit moglich trigonometrische Funktionen wie Sinus Cosinus und Tangens sowie die Multiplikation und Division von Zahlen allein durch die in digitalen Schaltungen einfach realisierbaren Additionen und Schiebeoperationen engl shift and add operations zu bilden Schiebeoperationen zur Zahlenbasis 2 sind in digitalen Schaltungen sehr leicht durch entsprechende Verschaltung realisierbar Volders Motivation war der Ersatz der ublichen und fehleranfalligen analogen Navigationsrechner in Convair B 58 Bombern durch digitale Rechner zur genauen Positionsbestimmung Die Anforderung war die Positionsberechnung der mit Uberschallgeschwindigkeit fliegenden Bomber in Echtzeit uber einer vereinfacht als kugelformig angenommenen Erdoberflache Mitte der 1960er Jahre wurde der CORDIC Algorithmus auch in zivilen Anwendungen eingesetzt Vorlaufer der heutigen Taschenrechner wie der Tischrechner 9100 von Hewlett Packard aus dem Jahr 1968 setzten ihn zur Berechnung der trigonometrischen Funktionen ein Im Jahr 1971 wurde der CORDIC Algorithmus von J S Walther auf die heute ubliche Form erweitert und damit auch die effiziente Berechnung von Logarithmen der Exponentialfunktion und der Quadratwurzel in digitalen Schaltungen moglich Anwendungsbeispiele Bearbeiten nbsp Digitalschaltung CORDICCORDIC Algorithmen werden zur Berechnung der wichtigsten Elementarfunktionen in Mikrocontroller Rechenwerken wie Taschenrechnern eingesetzt So findet sich auch in arithmetischen x87 Koprozessoren von Intel der CORDIC Algorithmus zur Berechnung mathematischer Operationen Weitere Anwendungsbeispiele liegen in der Nachrichtenubertragung Damit lassen sich beispielsweise effizient Betrag und Phase eines komplexen Signals bestimmen Da Multiplizierwerke vor allem in digitalen Schaltungen umfangreich und damit teuer zu realisieren sind wird CORDIC oft genau da eingesetzt wo Multiplizierer nicht effizient verfugbar sind Dies umfasst vor allem den Bereich der digitalen Schaltungstechniken wie FPGAs oder ASICs CORDIC ist zwar nicht der schnellste Algorithmus wird aber wegen seiner Einfachheit und Vielseitigkeit oft eingesetzt Funktionsweise Bearbeiten nbsp Illustration von CORDICCORDIC kann man im R 3 displaystyle mathbb R 3 nbsp aber auch nur in der zweidimensionalen Ebene betrachten Im Folgenden umfasst die Beschreibung den einfacheren zweidimensionalen Fall Dreht man ein Koordinatensystem um den Winkel 8 displaystyle Theta nbsp erscheint der Vektor 1 0 T displaystyle 1 0 T nbsp um den Winkel 8 displaystyle Theta nbsp gedreht sein Endpunkt liegt im neuen System bei x cos 8 displaystyle x cos Theta nbsp und y sin 8 displaystyle y sin Theta nbsp Die Rotation um den Winkel 8 displaystyle Theta nbsp entspricht dem Matrix Vektor Produkt x n y n cos 8 sin 8 sin 8 cos 8 1 0 displaystyle begin pmatrix x n y n end pmatrix begin pmatrix cos Theta amp sin Theta sin Theta amp cos Theta end pmatrix cdot begin pmatrix 1 0 end pmatrix nbsp D h um auf den eigentlichen Funktionswert zu kommen muss der Einheitsvektor 1 0 T displaystyle 1 0 T nbsp um 8 displaystyle Theta nbsp gedreht werden Dies lasst sich leichter bewerkstelligen wenn innerhalb der Transformationsmatrix nur noch eine Abhangigkeit von einer Winkelfunktion z B tan displaystyle tan nbsp besteht x n y n cos 8 1 tan 8 tan 8 1 1 0 displaystyle begin pmatrix x n y n end pmatrix cos Theta cdot begin pmatrix 1 amp tan Theta tan Theta amp 1 end pmatrix cdot begin pmatrix 1 0 end pmatrix nbsp Die Drehung um 8 displaystyle Theta nbsp wird trickreich realisiert als Linearkombination von Teildrehungen um geschickt gewahlte Teilwinkel a i displaystyle alpha i nbsp 8 i s i a i s i 1 1 displaystyle Theta sum i sigma i cdot alpha i qquad sigma i in 1 1 nbsp Eine zu weite Drehung im Schritt i displaystyle i nbsp wird kompensiert durch einen Vorzeichenwechsel s i 1 s i displaystyle sigma i 1 sigma i nbsp Das gezeigte Verfahren konvergiert und ist numerisch stabil fur alle 8 displaystyle Theta nbsp die sich aus obiger Summe ergeben konnen Man fuhrt nun noch eine Hilfsvariable z displaystyle z nbsp ein die fur den Drehsinn Verantwortung tragt z 0 8 z i z i 1 s i 1 a i 1 displaystyle z 0 Theta qquad quad z i z i 1 sigma i 1 cdot alpha i 1 nbsp s i 1 falls z i 0 1 sonst displaystyle sigma i begin cases 1 amp mbox falls quad z i leq 0 1 amp mbox sonst end cases nbsp Wenn nur einfachste Bauteile verwendet werden sollen und daher keine Multiplizierer vorhanden sind muss man alles uber Schiebe und Addieroperationen bewerkstelligen Dieses wird erreicht durch den Ansatz tan a i 2 i displaystyle tan alpha i 2 i nbsp Man erhalt damit den folgenden Algorithmus x n y n i 0 n 1 cos a i 1 s i 2 i s i 2 i 1 x 0 y 0 K i 0 n 1 1 s i 2 i s i 2 i 1 x 0 y 0 displaystyle begin pmatrix x n y n end pmatrix prod i 0 n 1 cos alpha i begin pmatrix 1 amp sigma i 2 i sigma i 2 i amp 1 end pmatrix cdot begin pmatrix x 0 y 0 end pmatrix K cdot prod i 0 n 1 begin pmatrix 1 amp sigma i 2 i sigma i 2 i amp 1 end pmatrix cdot begin pmatrix x 0 y 0 end pmatrix nbsp mit dem Skalierungsfaktor K i 0 n 1 cos a i displaystyle K prod i 0 n 1 cos alpha i approx nbsp 0 60725 fur n displaystyle n to infty nbsp der wahrend der Initialisierungsphase implizit berechnet wird x i 1 x i s i 2 i y i displaystyle x i 1 x i sigma i 2 i y i nbsp y i 1 y i s i 2 i x i displaystyle y i 1 y i sigma i 2 i x i nbsp z i 1 z i s i arctan 2 i displaystyle z i 1 z i sigma i arctan 2 i nbsp Initialisierung Bearbeiten Vorweg wird eine Tabelle T displaystyle T nbsp fester Lange L displaystyle L nbsp angelegt mit T 1 p 4 arctan d 1 displaystyle T 1 pi 4 arctan delta 1 nbsp wobei d 1 1 displaystyle delta 1 1 nbsp ist Die folgenden Werte sind T j arctan d j displaystyle T j arctan delta j nbsp mit d j d j 1 2 displaystyle delta j delta j 1 2 nbsp Die Werte des Arcustangens lassen sich mit der hier gut konvergierenden Potenzreihenentwicklung bestimmen Die Lange L displaystyle L nbsp der Tabelle bestimmt die erreichbare Genauigkeit Fuhrt man alle Drehungen eines Einheitsvektors 0 1 T displaystyle 0 1 T nbsp mit den so berechneten Werten hintereinander in gleichem Drehsinn aus erzielt man eine Gesamtdrehung von etwas mehr als p 2 displaystyle pm pi 2 nbsp Der Skalenfaktor K displaystyle K nbsp wird mit einem Aufruf im Vektormodus s u berechnet indem man die Verlangerung des Einheitsvektors 0 1 T displaystyle 0 1 T nbsp ohne Skalierung berechnet Rotationsmodus Bearbeiten Der Ausgangsvektor 1 0 T displaystyle 1 0 T nbsp wird in jedem der Schritte so gedreht dass der Winkel z 8 displaystyle z Theta nbsp gegen Null geht Es werden stets alle L displaystyle L nbsp Teildrehungen ausgefuhrt mit ggf wechselndem Vorzeichen Da der Kosinus eine gerade Funktion ist spielt das Vorzeichen bei der Skalierung keine Rolle Nach Reskalierung sind die Komponenten des erhaltenen Endvektors cos 8 displaystyle cos Theta nbsp und sin 8 displaystyle sin Theta nbsp Der Konvergenzbereich ergibt sich zu i 0 n 1 arctan 2 i 8 i 0 n 1 arctan 2 i displaystyle sum i 0 n 1 arctan 2 i leq Theta leq sum i 0 n 1 arctan 2 i nbsp also bei genugend grossem n displaystyle n nbsp etwa zu 1 74 8 1 74 displaystyle 1 74 leq Theta leq 1 74 nbsp d h er erstreckt sich uber mehr als den vierten und ersten Quadranten Vektormodus Bearbeiten Der vorgegebene Vektor dessen Polarkoordinaten gesucht werden wird immer so gedreht dass sich der Betrag seiner y displaystyle y nbsp Komponente verringert Die Drehwinkel 8 displaystyle Theta nbsp werden dabei vorzeichenrichtig addiert Die x displaystyle x nbsp Komponente des Endvektors ist nach Reskalierung der Betrag des Ausgangsvektors Dieser Modus wird auch benutzt zur Berechnung des Arcustangens aus zwei Argumenten Start mit c cos 8 sin 8 T displaystyle c cos Theta sin Theta T nbsp Der Konvergenzbereich ist derselbe wie oben Aus arctan2 y 0 x 0 displaystyle operatorname arctan2 y 0 x 0 nbsp lassen sich die Funktionen arcsin y 0 displaystyle arcsin y 0 nbsp und arccos x 0 displaystyle arccos x 0 nbsp unter Zuhilfenahme von x 0 2 y 0 2 1 displaystyle x 0 2 y 0 2 1 nbsp leicht ableiten Bereich ausserhalb von p 2 Bearbeiten Der Startvektor 0 1 T displaystyle 0 1 T nbsp bzw 0 1 T displaystyle 0 1 T nbsp entspricht einer Vorwegdrehung von p 2 displaystyle pi 2 nbsp bzw p 2 displaystyle pi 2 nbsp fur den Rotationsmodus Bei einem Startvektor mit negativer x displaystyle x nbsp Komponente im Vektormodus bewirkt man entsprechende Drehungen durch Vertauschen der Komponenten und Anderungen der Vorzeichen Verallgemeinerung BearbeitenDie oben benutzten Iterationsformeln x i y i cos 8 1 tan 8 tan 8 1 x i 1 y i 1 displaystyle begin pmatrix x i y i end pmatrix cos Theta cdot begin pmatrix 1 amp tan Theta tan Theta amp 1 end pmatrix cdot begin pmatrix x i 1 y i 1 end pmatrix nbsp sind ein Sonderfall der allgemeineren Vorschrift x i y i z i k i 1 m s i d i 0 0 s i d i 1 0 0 0 0 1 s i t i x i 1 y i 1 z i 1 1 displaystyle begin pmatrix x i y i z i end pmatrix k i cdot begin pmatrix 1 amp m sigma i delta i amp 0 amp 0 sigma i delta i amp 1 amp 0 amp 0 0 amp 0 amp 1 amp sigma i t i end pmatrix cdot begin pmatrix x i 1 y i 1 z i 1 1 end pmatrix nbsp mit m 1 displaystyle m 1 nbsp und d i 2 i displaystyle delta i 2 i nbsp sowie t i arctan d i displaystyle t i arctan delta i nbsp Lineare Modi Bearbeiten Fur m 0 displaystyle m 0 nbsp d i t i 1 1 2 1 4 1 8 displaystyle delta i t i 1 1 2 1 4 1 8 dotsc nbsp und k 1 displaystyle k 1 nbsp erhalt man x i y i z i 1 0 0 0 s i d i 1 0 0 0 0 1 s i d i x i 1 y i 1 z i 1 1 displaystyle begin pmatrix x i y i z i end pmatrix begin pmatrix 1 amp 0 amp 0 amp 0 sigma i delta i amp 1 amp 0 amp 0 0 amp 0 amp 1 amp sigma i delta i end pmatrix cdot begin pmatrix x i 1 y i 1 z i 1 1 end pmatrix nbsp womit sich Multiplikation und Division durchfuhren lassen Eine Tabelle T displaystyle T nbsp erubrigt sich hier Multiplikationx 0 a displaystyle x 0 a nbsp z 0 b displaystyle z 0 b nbsp ergibt im Rotationsmodus z displaystyle z nbsp gegen 0 y n y 0 a b displaystyle y n y 0 a cdot b nbsp fur alle 2 lt b lt 2 displaystyle 2 lt b lt 2 nbsp Divisionx 0 b displaystyle x 0 b nbsp y 0 a displaystyle y 0 a nbsp ergibt im Vektormodus y displaystyle y nbsp gegen 0 z n z 0 a b displaystyle z n z 0 a b nbsp fur alle 2 lt a b lt 2 displaystyle 2 lt a b lt 2 nbsp Hyperbolische Modi Bearbeiten Mit m 1 displaystyle m 1 nbsp werden die Hyperbelfunktionen ihre Umkehrungen Areafunktionen Exponentialfunktion und Logarithmus sowie die Quadratwurzel berechenbar Einheitskreis bzw hyperbel werden durch x 2 m y 2 1 displaystyle sqrt x 2 my 2 1 nbsp mit m 1 displaystyle m 1 nbsp bzw m 1 displaystyle m 1 nbsp beschrieben Das zu einem Vektor x y T displaystyle x y T nbsp gehorende Winkel bzw Areaargument ist durch 8 arctan m y x m displaystyle Theta arctan sqrt m cdot y x sqrt m nbsp gegeben also m 1 displaystyle m 1 nbsp Winkelfunktionen s o 8 arctan y x displaystyle Theta arctan y x nbsp undm 1 displaystyle m 1 nbsp hyperbolische Fkt 8 arctan i y x i displaystyle Theta arctan iy x i nbsp hier i 2 1 displaystyle i 2 1 nbsp i 8 arctan i y x displaystyle i Theta arctan iy x nbsp und wegen tanh a i tan i a displaystyle operatorname tanh alpha i tan i alpha nbsp auch 8 Atanh y x displaystyle Theta operatorname Atanh y x nbsp Das Verfahren ist analog zu dem eingangs gezeigten fur die Winkelfunktionen Erforderlich sind nur eine weitere Tabelle mit t i Atanh d i displaystyle t i operatorname Atanh delta i nbsp d i 1 2 1 4 1 8 displaystyle delta i 1 2 1 4 1 8 dotsc nbsp und die einmalige Berechnung des Skalenfaktors K displaystyle K nbsp x i y i z i k i 1 s i d i 0 0 s i d i 1 0 0 0 0 1 s i t i x i 1 y i 1 z i 1 1 displaystyle begin pmatrix x i y i z i end pmatrix k i cdot begin pmatrix 1 amp sigma i delta i amp 0 amp 0 sigma i delta i amp 1 amp 0 amp 0 0 amp 0 amp 1 amp sigma i t i end pmatrix cdot begin pmatrix x i 1 y i 1 z i 1 1 end pmatrix nbsp Die Iterationen i 4 13 40 k 3 k 1 displaystyle i 4 13 40 k 3k 1 nbsp mussen immer wiederholt werden da der Areatangens hyperbolicus nicht die Bedingung t i 1 1 2 t i displaystyle t i 1 leq tfrac 1 2 t i nbsp erfullt das somit fur die Reihe s i t i displaystyle sum sigma i t i nbsp nicht konvergieren wurde Rotation mit x 0 y 0 1 0 displaystyle x 0 y 0 1 0 nbsp liefert x n cosh z 0 y n sinh z 0 displaystyle x n operatorname cosh z 0 quad y n operatorname sinh z 0 nbsp davon abgeleitet tanh z sinh z cosh z displaystyle operatorname tanh z operatorname sinh z operatorname cosh z nbsp und e z cosh z sinh z displaystyle e z operatorname cosh z operatorname sinh z nbsp Vektormodus mit z 0 0 displaystyle z 0 0 nbsp berechnet z n Atanh y 0 x 0 displaystyle z n operatorname Atanh y 0 x 0 nbsp und den hyperbolischen Betrag x n x 0 2 y 0 2 displaystyle x n sqrt x 0 2 y 0 2 nbsp davon abgeleitet ln w 2 Atanh w 1 w 1 displaystyle ln w 2 operatorname Atanh frac w 1 w 1 nbsp sowie w displaystyle sqrt w nbsp aus dem Betrag des Startvektors w 1 4 w 1 4 displaystyle w 1 4 w 1 4 nbsp Der Konvergenzbereich ist in beiden Modi beschrankt durch die maximal mogliche Anderung von z displaystyle z nbsp Alle mathematisch erlaubten Argumente konnen jedoch durch einfache Umstellungen und Shift Operationen auf ihn abgebildet werden Alternativen BearbeitenAls Alternativen kommen hauptsachlich schnelle Tablelookup Verfahren in Frage wie z B in DSPs und Bitalgorithmen die mit einem ahnlichen Ansatz wie CORDIC die Berechnung vornehmen Literatur BearbeitenJack E Volder The CORDIC Trigonometric Computing Technique In IRE Transactions on Electronic Computers September 1959 D H Daggett Decimal Binary conversions in CORDIC In IRE Transactions on Electronic Computers Vol EC 8 5 pp 335 339 IRE September 1959 J E Meggitt Pseudo Division and Pseudo Multiplication Processes In IBM Journal April 1962 Vladimir Baykov Problems of Elementary Functions Evaluation Based on Digit by Digit CORDIC Technique PhD thesis Leningrad State Univ of Electrical Eng 1972 Hermann Schmid Decimal computation Wiley New York 1974 V D Baykov V B Smolov Hardware implementation of elementary functions in computers Leningrad State University 1975 96p Don Senzig Don Calculator Algorithms In IEEE Compcon Reader Digest IEEE Catalog No 75 CH 0920 9C pp 139 141 IEEE 1975 V D Baykov S A Seljutin Elementary functions evaluation in microcalculators Radio amp svjaz Moscow 1982 64p Vladimir D Baykov Vladimir B Smolov Special purpose processors iterative algorithms and structures Radio amp svjaz Moscow 1985 288 pages M E Frerking Digital Signal Processing in Communication Systems 199 Vitit Kantabutra On hardware for computing exponential and trigonometric functions In IEEE Trans Computers 45 3 328 339 1996 Ray Andraka A survey of CORDIC algorithms for FPGA based computers Jean Michel Muller Elementary Functions Verlag Birkhauser 2006 ISBN 0 8176 4372 9 Weblinks BearbeitenCORDIC Bibliography Site http www andraka com cordic php BASIC Stamp II math note C VHDL Implementierung des CORDIC Algorithmus auf Opencores org Abgerufen von https de wikipedia org w index php title CORDIC amp oldid 216354602