|
hiwi |

Forum-Newbie
|
 |
Beiträge: 2
|
 |
|
 |
Anmeldedatum: 21.10.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.10.2008, 11:01
Titel: fft und ifft
|
 |
|
 |
|
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.
|
|
|
|
|
Janvi |

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 20.05.08
|
 |
|
 |
Wohnort: Rom
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 28.10.2008, 18:20
Titel:
|
 |
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
|
|
|
hiwi |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 2
|
 |
|
 |
Anmeldedatum: 21.10.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.10.2008, 14:36
Titel:
|
 |
|
 |
|
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.
|
|
|
mb_matlab |

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 02.11.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.11.2008, 20:07
Titel:
|
 |
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
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| RSS
Hosted by:
Copyright © 2007 - 2025
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.
|
|