Hi, weiß jemand wie man einen komplexen Teiler in VHDL schreibt? sowohl der Divident als auch der Divisor sind hierbei komplex, hat jemand zufällig sowas schon gemacht? MfG
lukas schrieb: > Hi, weiß jemand wie man einen komplexen Teiler in VHDL schreibt? sowohl > der Divident als auch der Divisor sind hierbei komplex, hat jemand > zufällig sowas schon gemacht? erste Idee meinerseits wäre es so zu machen, wie auf Papier: 1. Betrag der komplexen Zahlen bilden, "normal" dividieren. 2. Winkel der komplexen Zahlen bilden, Winkel des Nenners vom Winkel des Zählers abziehen. 3. aus Betrag (von 1.) und Winkel (von 2.) wieder die gewünschte Form bilden. mag aber durchaus sein, dass es schnellere Rechenwege gibt. viele Grüße Christian
ja ich habe im nenner und Zähler jeweils imaginär und realteil seperat als vekktoren vorliegen ( a +jb ), ich glaube das in winkeln umzurechnen wird komplizierter.
Komplexe Division erhält man durch Erweiterung: c = a/b = a/b * b/b = (a*b)/(b*b) d.h. man hat je Re/Im-Teil eine reelle Division. Gruss Bert
Moin, muß man nicht mit dem konjugiert komplexen Wert von b erweitern? Dadurch erhalt man einen reellen Nenner. Siehe hier http://de.wikipedia.org/wiki/Komplexe_Zahl Also (a+ib) / (x+iy) wird zu ((a+ib) / (x+iy)) * ((x-iy) / (x-iy)) und daraus dann (a+ib) * (x-iy) / (x²+y²)
.. oh ja, stimmt. Spart 2 Mults und 2-3 Adds ein. Auf jeden Fall aber wesentlich besser als eine Polarkoordinatentransformation. Bert
Kommt auf die Darstellung (float / fixed) und die gewünschte Genauigkeit an. Für manche Anwendungen reicht eine Lookup-Table zur Umwandlung in Polarkoordinaten. Ansonsten steht oben ja schon einiges.
Willst du den Code simulieren oder synthetisieren? Es gibt eine standard Lib für Kompelexe Zahlen. Diese lässt sich leider nicht synthetisieren.
1 | use IEEE.math_complex.all; |
In jedem Fall konjugiert komplex erweitern und multiplizieren. Teilen dauert viel zu lang.
Division ist nach wie vor notwendig. Durch die konjugierte Erweiterung wird die Division auf die reelle Division reduziert. Sonst könnte man ja die reelle Division auf die komplexe Ebene projezieren und hat dann nur eine Multiplikation, was ja Unsinn ist. Bert
uups, stimmt natürlich - eigentlich wollte ich schreiben "dauert schon viel zu lang", aber mir fällt jetzt auch auf, daß ich in der Tat eine reine Multiplikation mit dem Reziprokwert im Kopf hatte. Kommt eben drauf an, ob sich der Nenner (häufiger) ändert oder ob man nicht dessen Reziprokwert einmal berechnen kann. Ich hätte dazu nebenbei ein VHDL anzubieten - packt auf einem einem V5 30MHz Daten.
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.