Forum: Digitale Signalverarbeitung / DSP / Machine Learning Matlab FFT / IFFT


von TP78 (Gast)


Lesenswert?

Hallo!
Ich spiele gerade etwas mit Matlab rum und habe mir eine Zeitfunktion 
bestehend aus drei Sinunsfunktionen unterschiedlicher Frequenz 
generiert. Diese Wandele ich ins Spektrum und wieder in den Zeitbereich 
und wieder ins Spektrum. Nun wundere ich mich, warum die Amplitudenhöhen 
nicht übereinstimmen! ...richtig, ich wandele ins 
Leistungsdichtespektrum (also keine Phaseninfo)! Also ist mein 
Zeitsignal aus der Rücktransformation natürlich Phasenfalsch - was aber 
doch auf mein daraus entstehendes Spektrum keinen Einfluss hat.
Hier skizziere ich mal den Code:

%Wahl des Testsignals (oben auch ändern)
ZeitSig=10*sin(2*pi*Frequenz*t)+5*sin(2*pi*Frequenz2*t)+8*sin(2*pi*Frequ 
enz3*t);

%FFT vom Signal x
Y= fft(ZeitSig,8192);
% Leistungsdichte Pyy
Pyy=Y.*conj(Y)/8192;

ZeitSigRueck = ifft(Y,8192);
ZeitSigAusPyy = real(ifft(Pyy,8192));

%FFT vom Signal ZeitSigAusPyy
Y= fft(ZeitSigAusPyy,8192);
Pyyy=Y.*conj(Y)/8192;

Ergebnis: Pyy ungleich Pyyy!!! Warum?? ...1000 Dank!

von Matthias (Gast)


Lesenswert?

Da liegt das Problem:

ZeitSigAusPyy = real(ifft(Pyy,8192));

Du wirfst den Imaginärteil einfach weg, der gehört aber zum Signal dazu.

von TP78 (Gast)


Lesenswert?

Die Phase schmeiße ich weg (oder besser: In meiner späteren Anwendung 
habe ich sie gar nicht, da ein Spektrumanalyser sie nicht messen kann) - 
möchte quasi nur ein Zeitsignal, was ebenfalls das selbe Spektrum hat 
wie das Spektrum der original-Zeitfunktion!
Bei einem Zeitsignal, welches aus mehreren Sinusfunktionen gleicher 
Amplitude besteht klappt das! ...doch wehe sie haben unterschiedliche 
Amplituden! ...wie kommt das? Danke für weitere Tipps

von Fred (Gast)


Lesenswert?

So wird was draus:
es gilt: Pyy = abs(Y).^2
also: ZeitSigAusPyy = real(ifft(sqrt(Pyy),8192));

von Unit (Gast)


Lesenswert?

Matthias hat Recht. Mit dem Imaginärteil schmeißt man NICHT (NUR) die 
Phase weg! Das sind komplexe Werte, und keine Polarkoordinaten! Also 
statt real einfach abs benutzen, und natürlich sqrt nicht vergessen.

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.