WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

fft und ifft

 

hiwi
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 21.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2008, 12:01     Titel: fft und ifft
  Antworten mit Zitat      
Ich habe folgendes Problem:

Ich schreibe ein Programm zur Berechnung von synthetischen Seismogrammen. Nach mehreren Schritten erhalte ich das Sprektrum des Seismogramms, welches ich invers fouriertransformieren muss, um das Seismogramm zu erhalten. Dieser letzte Schritt frunktioniert nicht.

Um erst mal zu testen wie die ifft überhaupt funktioniert teste ich das ganze an meinem Signal für das oben genannte Programm.

das Signal sieht wie folgt aus:

T = 30000 ; % Dauer des Signals in ms*10^(-3)
N = 2 ; % Anzahl der Extrema im Signal
Ar = 1000 ; % Abtastrate in ms*10^(-3)
Af = 1/Ar*1000000 ; % Abtastfrequent in Hz
Nf = Af/2 ; % Nyquistfrequenz in Hz
delta = N*pi/T ;
a = (N+2)/N ;
t = 0:Ar:T ;
y = sin(delta*t) - 1/a * sin(a*delta*t) ; % Küpper wavelet
subplot(1,3,1)
plot(t/1000,y)
title('Signal')
ylabel('Amplitude')
xlabel('Zeit in ms')

Dieses Signal wird fouriertransformiert.

ZP = 2^nextpow2(T) ; % von T nächsthöhere 2er Potenz
Y = fft(y,ZP)/T ;
f = linspace(0,Nf,ZP/2) ;
% Plot vom einseitigen Amplitudenspektrum
subplot(1,3,2)
plot(f,2*abs(Y(1:ZP/2)))
axis([0 150 0 0.0015])
title('Signalspektrum')
xlabel('Frequenz in Hz')
ylabel('Amplitude')

Jetzt wird das Signal wieder invers fouriertransformiert und das Ergebniss müsste mein ursprüngliches Signal sein, was aber nicht der Fall ist.

invers=ifft(Y) ;

Mir wurde gesagt, dass mein Problem vielleicht bei den negativen Frequenzen liegt, also habe ich folgendes ausprobiert um die negativne Frequenzen zu berücksichtigen:

Yneg = real(Y(1:ZP/2))-i*imag(Y(1:ZP/2)) ; %Berechnung des Sprektrums für negative Frequenzen (es gilt Y(-f)=Y(f)*)
Yneu(ZP/2:-1:1) = Yneg ; % Yneu soll das Sprekturm mit den negativen und positiven Frequenzen sein
Yneu(ZP/2+1:ZP) = Y(1:ZP/2) ;
f1 = linspace(-Nf,Nf,ZP) ;
plot(f1,abs(Yneu))
invers = ifft(Yneu) ;
t1 = 0:length(inv)-1 ;
plot(t1,invers)

Das funktioniert aber auch nicht. Ehrlich gesagt verstehe ich auch nicht viel von der Fouriertransformation, weswegen ich mich mit der inversen Transformation so schwer tue.

Es wäre super, wenn mir jemand von euch erklären kann, wie die ifft funktioniert.
Private Nachricht senden Benutzer-Profile anzeigen


Janvi
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 20.05.08
Wohnort: Rom
Version: R2007a
     Beitrag Verfasst am: 28.10.2008, 19:20     Titel:
  Antworten mit Zitat      
probier mal abs(ifft(abs(fft(signal))))
Falls du für Seismogramme eine Autokorrelation machen möchtest, musst du allerdings das Quadrat der fft nehmen und dann erst eine ifft machen. Kommt natürlich nicht das Gleiche wie am Anfang raus, aber das macht ja auch keinen Sinn. Vor und Rücktransformation haben im Imaginärteil ein anderes Vorzeichen. Aus diesem Grund sind die Implementationen i.d.R. auch immer mit komplexen Zahlen gemacht, obwohl es normalerweise nur physikalische Messwerte zu transformieren gibt. Der gleiche Code kann zur Laufzeit damit in der Transformationsrichtung umgeschaltet werden was bei HW Realisierung Resourcen einspart. Eine gute Einführung in das Thema gibt es von der TU München hier nachzulesen:

http://www.lntwww.de/Signaldarstellung/Seite1491.html
Private Nachricht senden Benutzer-Profile anzeigen
 
hiwi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 21.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2008, 15:36     Titel:
  Antworten mit Zitat      
danke für die antwort janvi

das problem mit der zurücktransformation habe ich jetzt gelöst. das hin und her transformieren des signals war auch nur ein test, um herauszufindne, wie man überhaupt eine ifft macht.
also der test hat geklappt, das zurück transformierte signal sieht wieder wie das signal am anfang aus.

mein eigentliches problem ist komplizeirter.

erst mal die kurzfassung (ausführliche erklärung weiter unten): ich habe zwei vektoren mit complexen zahlen. diese beiden vektoren multipliziere ich und das produkt muss dann invers fouriertransformiert werden. der letzte schritt der ifft funktioniert aber nicht. matlab rechnet zwar etwas, aber das ergebnis sieht nicht so aus, wie es sein sollte.

ausführliche erklärung:
ich möchte ein synthetisches seismogramm berechnen. dazu habe ich ein modell (dicke und dichte der schichten) vorgegeben. mein programm berechnet die reflektivität an hand des modells, in abhängigkeit der frequenz. außerdem habe ich das oben genannte signal vorgegeben, welches ich fouriertransformiere um das signalspektrum zu erhalten.
anschließend wird die reflektivität mit dem signalspektrum multipliziert und somit erhällt man das seismogrammspektrum. das seismogrammspektrum muss dann nur noch invers fouriertransformiert werdend und man hat das seismogramm im zeitbereich, so wie ich es gerne hätte.

nur der aller letzte schritt funktioniert nicht, ob wohl ich mir ziemlich sicher bin, dass meine reflektivität und das signalspektrum richtig sind. ich glaube das problem liegt bei der ifft, aber vielleicht auch nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
mb_matlab
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 02.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2008, 21:07     Titel:
  Antworten mit Zitat      
Hallo,

was genau meinst du mit "der letzte Schritt funktioniert nicht"? Ein häufiger Fehler ist die falsche Interpretation der Positionen der Element im Ergebnisvektor. Sieh dir mal die funktion fftshift dazu an.

Gruß
Markus
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.