www.mikrocontroller.net

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


Autor: Andreas J (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
e^(jx)=cos(x)+jsin(x)

Autor: Andreas J (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja . Alex erklär doch mal  :)

Autor: methyl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Beginner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry leute ihr habt wirklich gar keine Ahnung von Mathe

Autor: Andreas J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: jugin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Andreas J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: jugin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum bascom ?

Autor: Andreas J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie drauf hängen geblieben.
Womit arbeitest du?
Guss Andreas

Autor: Kay Pohl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas J. (Gast)
Datum:

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

Autor: Kay Pohl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo andreas,

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

mfg Kay

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.