Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

CORDIC Algorithmus

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Off-Topic-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Make-Grafik



Anmeldungsdatum: 08.10.2012
Beiträge: 29

BeitragVerfasst am: 30.12.2013, 15:08    Titel: CORDIC Algorithmus Antworten mit Zitat

Schönen guten Tag Community! lächeln
Ich suche ein paar Leute die sich mit den CORDIC Algorithmus auskennen oder zumindest mit dem Begriff was anfangen können. Mich interessiert dieser und ich versuche schon eine ganze Weile ihn zu verstehen. Jedoch scheitert es weil ich meist die ganzen Formeln (siehe z.B. Wikipedia) in den Literaturen verstehe. Ich könnte Hilfe gebrauchen den Algorithmus zu verstehen.

Ich habe bisher mehr oder weniger herausgefunden, dass der Algorithmus auf einem Vektor basiert der um einen Punkt rotiert. Aber auch da bin ich mir nicht ganz sicher.

Vielleicht kennt jemand ja gute Internetseiten die den Algorithmus leicht verständlich erklärt? Sie dürfen selbstverständlich auf Englisch sein.

Ich bitte euch um ein wenig Rücksicht wenn ich auf Anhieb nicht alles verstehe. Ich entschuldige mich ganz frech mit meinem Jungen Alter (16 Zunge rausstrecken) und der Unerfahrenheit. happy

Falls weitere Fragen auftauchen werde ich versuchen sie so verständlich wie möglich zu schreiben. Hab leider das Problem, dass ich mich oft falsch ausdrücke und andere dadurch nicht wissen was gemeint ist/war.
_________________
Hmn :/ Mal schaun was es bringt...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 30.12.2013, 21:20    Titel: Antworten mit Zitat

Hallo Make-Grafik!

Der CORDIC-Algorithmus ist so etwas wie sukzessive Approximation für Winkel.

Im Prinzip funktioniert er etwa folgendermaßen: In einem Koordinatensystem hast du einen Vektor, den du um einen bestimmten Winkel drehen sollst. Dazu drehst du den Vektor in einer vorgegebenen Anzahl von Schritten zuerst um 90 Grad, dann um 45 Grad, dann um 22,5 Grad, dann um 11,25 Grad usw., immer um die Hälfte des vorangegangenen Winkels, entweder rechts- oder linksherum auf den Endwinkel zu. Parallel dazu addierst bzw subtrahierst du jedesmal (unter Berücksichtigung der Regeln der Vektoraddition) die zugehörigen x- bzw. y-Werte der Teilwinkel, die du -und das ist der eigentliche "Trick" dabei- vorher berechnet und in einer Tabelle abgelegt hast.
Und praktischerweise funktioniert dieses Verfahren auch in umgekehrter Richtung.

Am anschaulichsten wird dies meiner Meinung nach hier beschrieben.

Weitere Links:
http://www.matheboard.de/archive/383885/thread.html
http://www.wiete.com.au/journals/GJEE/Publish/vol8no3/Risse.pdf
http://digdok.bib.thm.de/volltexte/2009/4148/pdf/CORDIC_Algorithmus.pdfhttp://yasd.de/htwk/logik/Cordic.pdf

Gruß
grindstone

EDIT: sukzessive Approximation ==> "schrittweise Annäherung". Verfahren zur Digitalisierung von analogen Messwerten.
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 30.12.2013, 22:26    Titel: Antworten mit Zitat

Ohne viel Kommentar:

http://de.wikipedia.org/wiki/CORDIC
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 30.12.2013, 23:00    Titel: Antworten mit Zitat

@dreael: Entschuldige, aber Make-Grafik hatte ausdrücklich nach einer verständlichen Erklärung gefragt. zwinkern
Der Wikipedia - Artikel ist eine jener "von-Mathematikern-für-Mathematiker" - Erklärungen, die zwar erschöpfend und präzise, für Nichtmathematiker aber weitgehend unverständlich sind.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Make-Grafik



Anmeldungsdatum: 08.10.2012
Beiträge: 29

BeitragVerfasst am: 31.12.2013, 18:28    Titel: Antworten mit Zitat

Super! lächeln
Vielen Dank für die ganzen Links.
Ich muss mich jetzt erst einmal einlesen. Zunge rausstrecken
_________________
Hmn :/ Mal schaun was es bringt...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Make-Grafik



Anmeldungsdatum: 08.10.2012
Beiträge: 29

BeitragVerfasst am: 01.01.2014, 06:59    Titel: Antworten mit Zitat

Ich weiß dass man mithilfe des CORDIC Algorithmus folgende Funktionen implantieren kann:
- Sinus
- Cosinus
- Tangens
- Exponentialfunktion
- Logarithmusfunktion
- Arcus- und Areafunktionen
- Quadratwurzel
- Multiplikation, Division

Zudem weiß ich, dass dies durch einfache Bitverschiebung (SHL | SHR) oder Bitadditionen möglich ist.
Das bedeutet demnach dass der Algorithmus die oben genannten Funktionen sinngemäß nicht verwendet.

Mein Ziel ist es, alle oberen genannten Funktionen mithilfe der Bit Funktionen in FreeBASIC zu implantieren.
Aber immer schön der Reihe nach. happy

Zuerst muss ich das Grundprinzip verstehen.
Das habe ich auch bisher, jedoch ist mir nicht ganz klar wie ich nun die x bzw. die y Koordinate berechne.
Zum Beispiel habe ich den Vektor (10|0) und möchte ihn um 12.5° drehen.
Ich habe das einmal mit einem Taschenrechner ausgerechnet und das Endergebnis ist demnach (9,762|2,164)

Oder als Code:
Code:
Dim As Double x = 10
Dim As Double y = 0
Dim As Double w = 12.5

Dim As Double pi = ACos(0) * 2
Dim As Double dr = 180 / pi
Dim As Double t

t = x
x = Cos(w/dr) * x + -Sin(w/dr) * y
y = Sin(w/dr) * t + Cos(w/dr) * y

Print Int(x*1000)/1000
Print Int(y*1000)/1000
Sleep


Schön und gut, allerdings ist mir nicht ganz klar wie ich auf das gleiche Ergebnis nur mithilfe der Teilwinkel komme...
Ich schätze das ganze muss vom Grundgerüst in etwa so aussehen:
Code:
Dim As Double x = 10
Dim As Double y = 0
Dim As Double w = 12.5

Dim As Double d1 = 0
Dim As Double d2 = 90

While w <> d1
   If w < d2 Then
      d1 += d2
      ' x = ...
      ' y = ...
   Else
      d1 -= d2
      ' x = ...
      ' y = ...
   EndIf
   d2 /= 2
Wend

Print Int(x*1000)/1000
Print Int(y*1000)/1000
Sleep


Allerdings hänge ich nun beim berechnen der x und y Koordinate.
Vielleicht weiß da ja jemand weiter happy?
_________________
Hmn :/ Mal schaun was es bringt...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 03.01.2014, 14:20    Titel: Antworten mit Zitat

Der Trick bei einer Software-Implementierung von CORDIC ist es, eine LUT (Look-Up-Table) für die Teilwinkel zu haben. Mit den Binärops kannst du natürlich nur arbeiten, wenn du Festkommaarithmetik (siehe z.B. https://en.wikipedia.org/wiki/Q_(number_format) ) benutzt. Bitshifts auf IEEE 752 Floats haben keine mathematische Bedeutung (es sei denn man heißt Carmack).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Off-Topic-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz