Forum: Digitale Signalverarbeitung / DSP / Machine Learning DFT mit Exp(X),


von Andreas J (Gast)


Lesenswert?

Euler meint:

1.)    X(k)=X(n)cos(2pi/N*k*n) + j X(n)*(-1)*sin(2pi/N*k*n)

2.)    X(k)=X(n)exp(-j*2pi/N*k*n)

Die Summenzeichen habe ich mal weggelassen.

mit der 1.Gleichung funzt die Dft korrekt.
Problem  die 2.Gleichung erzeugt falsche koeffizienten
aufsummiert sind die koef. viel zugroß.
Und auch die Fkt. cos(x)+(-sin(x))ist nicht gleich exp(x)
Wer kann das erklären
Mfg Andreas

von Alex (Gast)


Lesenswert?

e^(jx)=cos(x)+jsin(x)

von Andreas J (Gast)


Lesenswert?

Ja . Alex erklär doch mal  :)

von methyl (Gast)


Lesenswert?

>Und auch die Fkt. cos(x)+(-sin(x))ist nicht gleich exp(x)
Ist sie auch nicht. ->siehe Alex.
Mit welchem Programm rechnest? Weiß es was j bzw i bedeutet?

von Mario (Gast)


Lesenswert?

Ich denke mal, dass Du in der Exponentialfunktion das argument nicht als
komplexe Zahl einsetzt. Die beiden gleichungen sollten soweit dasselbe
Ergebnis liefern => dürfte also irgendwo in Fehler im Programm sein.

von Andreas J. (Gast)


Lesenswert?

Aber nehmt euch doch mal einen Taschenrechner und rechnet an der Stelle
PI da ist ja  sin(x)=0  somit auch i.
Cos(x)ist -1.
Ich bekomme mit der exp Fkt. nicht das selbe Erebnis.
Ergebnis -1+(i*(-1*0))= -1
Gruss Andreas

von Mario (Gast)


Lesenswert?

@Andreas,

sagte ich doch. Du musst exp(j*pi) nehmen und nicht! exp(pi), und das
ist definitiv -1. Zeichne es Dir am Einheitskreis auf.
z sei eine komplexe Zahl, dann ist

exp(z) = exp(Re{z})*(cos(Im{z})+j*sin(Im{z}))

Ich weiss ja nicht mit was für'n Programm Du rechnest. In Matlab musst
du wie schon oben erwähnt aufpassen, dass i oder j nicht schon als
veriablen benutzt wurden.

Mario

von Beginner (Gast)


Lesenswert?

sorry leute ihr habt wirklich gar keine Ahnung von Mathe

von Andreas J. (Gast)


Lesenswert?

Das Problem ist, ich progr. mit Bascom und das kennt kein i als
komplexe Zahl.Also rechne ich mit cos und sin Werten um sie am Schluss
komplex zusammenzuführen. Meine 128 Punkte FFT läuft gut mit ca. 10
Durchläufen pro Sekunde.Nun will ich die Leistung steigern in dem ich
mit exp^(x). rechne zwecks besserer Multiplikation.Im Moment
funktioniert das auch nur mit 4Byte langen Singel Werten.

Gruss Andreas

von jugin (Gast)


Lesenswert?

bist du sicher dass euelr dir mehr performance bietet ?
weistdu das du überhaupt tust ?
was erwartest du von basecom und wie sieht dein programm aus ?

von Andreas J. (Gast)


Lesenswert?

Nein weiss ich nicht, aber in Exp.Schreibweise lassen sich  kompl.
Zahlen schneller multiplizieren aber auch schlechter addieren.
Und in asm würde ich das wohl nie hinkriegen.
Erstmal läuft die FFt und mit kürzen von Prozessen kriege ich auch
50ms pro FFt Durchlauf aber dann ist wohl Schluss.
Gruss Andreas

von jugin (Gast)


Lesenswert?

warum bascom ?

von Andreas J. (Gast)


Lesenswert?

Irgendwie drauf hängen geblieben.
Womit arbeitest du?
Guss Andreas

von Kay Pohl (Gast)


Lesenswert?

@Andreas J.

ich suche schon seit langem eine FFT für Bascom. ich will damit ein
Audiosignal darstellen. Allerdings brauche ich nur 32 Bänder.
Hättes Du einen Code für mich oder könntest Du mir helfen mit der FFT
?

mfg Kay

von Andreas J. (Gast)


Lesenswert?

Hallo Kai
Kommst du klar mit der FFT?
Hast ja nix mehr von dir hören lassen.
gruss Andreas

von Kay Pohl (Gast)


Lesenswert?

hallo andreas,

bin noch nicht dazugekommen es zu testen. melde mich auf jedenfall,
wenn ich soweit bin.

mfg Kay

von Hans (Gast)


Lesenswert?

also du kannst das NICHT mit exp() rechnen wenn der kein i oder j
kennt !!! du darfst dann alles gemütlich über winkelfunktionen rechnen
;)

daher mach eine fft.. damit wird dir der rechenaufwand von n^2 auf
n*ld(n) gedrückt... wie man das implementiert ist mir jetzt auf die
schnelle zu kompliziert zu erklären.. der algorithmus ist aber
eigentlich primitiv...

und im übrigen kann man in exponentialschreibweise KEINE zahlen
EINFACH addieren !!! (es sei denn sie haben gleichen exponenten)...

also entweder dft über winkelfunktionen oder gleich fft schnell ;)


73

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.