Forum: FPGA, VHDL & Co. komplexer teiler


von lukas (Gast)


Lesenswert?

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

von Christian A. (cau) Flattr this


Lesenswert?

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

von lukas (Gast)


Lesenswert?

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.

von Bert (Gast)


Lesenswert?

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

von hans (Gast)


Lesenswert?

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²)

von Bert (Gast)


Lesenswert?

.. oh ja, stimmt. Spart 2 Mults und 2-3 Adds ein.
Auf jeden Fall aber wesentlich besser als eine
Polarkoordinatentransformation.

Bert

von Morin (Gast)


Lesenswert?

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.

von Dose (Gast)


Lesenswert?

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;

von J. S. (engineer) Benutzerseite


Lesenswert?

In jedem Fall konjugiert komplex erweitern und multiplizieren. Teilen 
dauert viel zu lang.

von Bert (Gast)


Lesenswert?

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

von J. S. (engineer) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.