Guten Tag! Ich bin dabei einen cordic zu implementieren um cos und sin zu berechnen, doch verstehe ich nicht wie ich das für alle Quadranten machen soll. Hier im Forum habe ich bereits gesucht, doch kann mit den Lösungsansätzen nichts anfangen. Als Anfangswerte verwende ich x = 1 und y = 0. Muss ich diese für einen anderen anderen Quadranten anpassen? Oder muss ich doch den Eingangswinkel anpassen? Vielen Dank im voraus, steverino
Das sind aber Grundlagen der Mathematik: Sowohl Sinus als auch Cosinus und die daraus abgeleiteten Funktionen sind symmetrisch zur Achse. Damit kann man sowohl spiegeln als auch drehen!
Hi Du brauchst nur 90° einer der beiden Funktionen, z.B. SIN, Von 90 bis 180 sind die Werte 'rückwärts', Von 180-270 wieder 'vorwärts', aber negativ, von 270 bis 360 wieder rückwärts, ebenfalls negativ. So konnte man schon auf langsamsten PCs unter Basic in einer affenartigen Geschwindigkeit Kreise auf den Bildschirm plotten. MfG
Patrick J. schrieb: > Du brauchst nur 90° einer der beiden Funktionen, z.B. SIN, > Von 90 bis 180 sind die Werte 'rückwärts', > Von 180-270 wieder 'vorwärts', aber negativ, > von 270 bis 360 wieder rückwärts, ebenfalls negativ. Das Problem ist, dass ich nicht weiß wie ich das für den cordic einsetzen soll. SO wie ich das verstanden habe beginne ich bei einem Startwert von x = 1 und y = 0. das sind die Koordinaten vom Winkel 0°. Von dort aus werden Winkel entweder addiert oder subtrahiert bis man zu dem gewünschten Ergebnis kommt. Das geht aber nur in einem Bereich von +90° bis -90°. Was soll ich jetzt machen um den restlichen Bereich abzudecken?
Die Antworten fallen meiner Meinung nach alle unter steverino schrieb: > Oder muss ich doch den Eingangswinkel anpassen? Das geht für jede Funktion und jeden Quadranten. Zum Beispiel kannst du einen Winkel im zweiten Quadranten in den ersten bringen durch 180-a (a: Winkel) sin(140)=sin(180-140)=sin(40). Das liegt im ersten Quadranten. Du musst also für jede Winkelfunktion vier Fallunterscheidungen machen und dann den Winkel im ersten Quadranten in den CORDIC eingeben.
Du musst die Symmetrien, Phasenverschiebungen und die Periode ausnutzen. https://de.wikipedia.org/wiki/Formelsammlung_Trigonometrie#Symmetrien
lies das mal komplett durch: Beitrag "CORDIC in VHDL" Wurde hier schon lang und breit durchdiskutiert...
Dussel schrieb: > Das geht für jede Funktion und jeden Quadranten. > Zum Beispiel kannst du einen Winkel im zweiten Quadranten in den ersten > bringen durch 180-a (a: Winkel) > sin(140)=sin(180-140)=sin(40). Das liegt im ersten Quadranten. > Du musst also für jede Winkelfunktion vier Fallunterscheidungen machen > und dann den Winkel im ersten Quadranten in den CORDIC eingeben. Vielen Dank für die Hilfe. Werde den Eingangswinkel anpassen.
steverino schrieb: > Vielen Dank für die Hilfe. Die Frage war ordentlich gestellt, da helfe ich doch gerne, wenn ich kann. Dazu aber noch ein Nachtrag: Ich will nicht ausschließen, dass man mit CORDIC auch Winkel in anderen Quadranten berechnen kann, zum Beispiel X=0, Y=1 für den zweiten Quadranten. Aber wenn, wäre da wohl auch eine Fallunterscheidung nötig.
steverino schrieb: > Ich bin dabei einen cordic zu implementieren um cos und sin zu > berechnen, Schreibe doch um himmelswillen zu allererst, WOFÜR das Ganze gut sein soll. Als nächstes solltest du dich dazu durchringen, als WAS deine Winkel denn so vorliegen. Also im Bogenmaß oder Grad oder Neugrad oder Artillerie-Strich oder was? Dann sollte folgen, auf wieviel Bit dein Sinus und Cosinus denn berechnet werden soll. Normalerweise braucht man für den Cordic (so man es sinnvoll anstellt) nämlich nicht eine Stufe pro Bit, sondern nur etwa 0.4 Stufen pro Bit - oder anders ausgedrückt für 24 Bit Ergebnis brauchst du nur 8..9 Drehungen, wenn du den Restwinkel skalierst und so ans Ergebnis dranhängst. Du brauchst für's Skalieren ja bloß ne Konstante, die aus dem Produkt aller möglichen 1/cos(dx) besteht. Ich glaub, die war so etwa 1/1.6nochwas. Das führt zwar eine Multiplikation ein, spart aber zugleich 15..16 Drehungen. Ich würde dir sehr empfehlen, deine Winkel auf 4 skaliert zu benutzen, das heißt, der Vollkreis entspricht 4.000. Damit hast du als ganzen Teil die Quadranten und als gebrochenen Teil die Winkel innerhalb des nullten Quadranten, vulgo 0..90°. W.S.
Dussel schrieb: > steverino schrieb: >> Vielen Dank für die Hilfe. > Die Frage war ordentlich gestellt, da helfe ich doch gerne, wenn ich > kann. > Dazu aber noch ein Nachtrag: > Ich will nicht ausschließen, dass man mit CORDIC auch Winkel in anderen > Quadranten berechnen kann, zum Beispiel X=0, Y=1 für den zweiten > Quadranten. Aber wenn, wäre da wohl auch eine Fallunterscheidung nötig. Nein keine Fallunterscheidung aus mathematischen Gründen nötig. Cordic ist ein Verfahren mit dem man von einem beliebigen Startpunkt zu jedem Zielpunkt kommt. Es gibt ein paar Dinge zu beachten. Das erste ist die maximale Schrittweite. Um nicht mit vielen Schritten entlang der Kurze zu "rutschen" macht man im Angortimus eine Fallunterscheidung um von einem Startpunkt nahe des Ziels zu starten. Die meisten Implementierungen haben eine Entscheidung Rechte oder Linke Hälfte des Einheitskreises. rechte Hälfte ist der Startpunkt 0° linke Hälfte ist der Startpunkt 180° Von dem Startpunkt werden die Schritte so gewählt dass sich 90° vorwärts und 90° rückwärts bewegt werden kann.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.