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-Rücktransformation: Gespiegelter Zeitbereich

 

Maryn
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 15.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2016, 14:53     Titel: FFT-Rücktransformation: Gespiegelter Zeitbereich
  Antworten mit Zitat      
Hallo,

vermutlich ist die Antwort auf meine Frage einfach, dennoch habe ich gerade ein Brett vorm Kopf.
Zum Problem:
Ich möchte ein Messsignal mit Matlab Fourier-transformieren, Filtern und das gefilterte Spektrum anschließend wieder rücktransformieren.
Nach den ersten Versuchen hatte ich Zweifel an der Form des rücktransformierten Signals und beschloss, mich zunächst an einem Minimalbeispiel zu versuchen, um sicher zu gehen, dass ich richtig vorging.
Und tatsächlich komme ich jetzt mit einem vermeintlich einfachen Beispiel nicht weiter.

Ich benutzte folgenden Code:
Code:

%% Vorgegebene Größen
fs = 1000;
T = 1/fs;
L = 1000;
t = (0:L-1)*T;

%% Generiere Signal
s = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
x = s + 2*randn(size(t));

%% FFT
X2 = fft(x); %X2 = zweiseitiges Spektrum
X2 = abs(X2/L);
y = ifft(X2*L);

%% Zeichnen
figure;
% Sinussignal mit Rauschen
s(1) = subplot(2,1,1);
plot(s(1),t,x);
title(s(1),'Sinussignale mit Zufallsrauschen');
xlabel(s(1),'Zeit (Sekunden)');

% Rücktransformiertes Sinussignal
s(3) = subplot(2,1,2);
%plot(s(3),t,y_abs);
plot(s(3),t,y);
title(s(3),'Rücktransformiertes Sinussignal');
xlabel(s(3),'Zeit (Sekunden)');

 


Ich generiere mir also ein Signal aus zwei Sinusschwingungen, die mit zufälligen Werten(zur Rauschsimulation) überlagert sind.
Offenbar ist aber meine Methode zur Rücktransformation nicht korrekt. Denn es kommt ein Signal heraus, welches genau in der Mitte des Zeitbereichs gespiegelt ist.

Ich nehme an, dass der Effekt dadurch zustande kommt, dass ich die Rücktransformation basierend auf dem Betrag des Spektrums berechne. Ich denke ich müsste das Spektrum wieder in seine komplexe Form zurück führen.
Da das Signal später gefiltert werden soll, kommt eine einfache Rücktransformation des per fft transformierten Signals natürlich nicht in Frage.

Nur komme ich trotz langwieriger Suche nicht auf die zündende Idee, und deswegen brauche ich Eure Hilfe!

Ich hoffe ich habe alle Informationen angegeben, ansonsten bitte rückfragen!

Mit besten Grüßen,
Maryn

Gespiegelter Zeitbereich.jpg
 Beschreibung:

Download
 Dateiname:  Gespiegelter Zeitbereich.jpg
 Dateigröße:  33.38 KB
 Heruntergeladen:  562 mal
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.01.2016, 19:10     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich nehme an, dass der Effekt dadurch zustande kommt, dass ich die Rücktransformation basierend auf dem Betrag des Spektrums berechne. Ich denke ich müsste das Spektrum wieder in seine komplexe Form zurück führen.


Das ist genau der Knackpunkt. Nicht den Betrag verwenden. Die ifft benötigt einen Vektor mit Real- und Imaginärteil.
Private Nachricht senden Benutzer-Profile anzeigen
 
Maryn
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 15.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2016, 15:26     Titel:
  Antworten mit Zitat      
Besten Dank für die Antwort!
Sie hat mich in meiner Vermutung bestätigt und ich denke ich bin jetzt auf die Lösung gekommen.
Falls jemand dasselbe Verständnisproblem hat, ich habe meinen Code inzwischen folgendermaßen erweitert(Hier nur der FFT-Teil, Rest wie im Startpost):
Code:

%% FFT

X2 = fft(x); %X2 = zweiseitiges Spektrum

theta = angle(X2);

X2 = abs(X2/L);

Z = X2 .* exp(1i*theta);

y = ifft(Z*L);

y = real(y);
 


Es wird zusätzlich die Phase berechnet, welche hernach zur Wiederherstellung der komplexen Werte verwendet wird. Hilfreich ist hier auch die Matlab-Dokumentation des angle-Befehls.
Abschließend werden zum Zeichnen die imaginären Werte des Ergebnisses ignoriert, da man sonst nicht auf das Ursprungssignal kommt.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 26.01.2016, 15:37     Titel:
  Antworten mit Zitat      
Hallo,

ich weiß nicht ob ich deinen ersten Post richtig verstanden habe. Aber falls du eine Filterung im Frequenzbereich durchführen willst (im Zeitbereich entspricht die Filterung einer Faltung des Signals mit der Filterimpulsantwort, im Frequenzbereich einer Multiplikation), ist hier eine FFT_Faltung.m Funktion. Bei einer Faltung im Frequenzbereich muss man nämlich die Eingangsvektoren in der Länge anpassen, damit sich das richtige Ergebnis ergibt.

http://www.gomatlab.de/window-sinc-filter-t19156.html

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
Maryn
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 15.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2016, 16:31     Titel:
  Antworten mit Zitat      
Hallo DSP,

Vielen Dank für die weitere Anregung!
Richtig, die Endanwendung meiner Bemühungen soll das Filtern im Frequenzbereich sein.
Hierzu habe ich auch schon ein funktionierendes Filter entworfen. Dieses möchte ich später nochmal verbessern und dann komme ich ggf. auf deinen Hinweis zurück.

Im Moment habe ich aber das SNR, das ich berechnen möchte und das mir Kopfzerbrechen bereitet. Hier habe ich das Problem, dass ich viele verschiedene Ansätze zur Berechnung finde.

Das SNR ist doch eigentlich das Verhältnis aus Nutzsignalleistung zur Störsignalleistung. In manchen Beiträgen wird aber auch auf das Verhältnis zwischen Mittelwert des Signals und Standardabweichung des Signals verwiesen.
Was ist denn hier nun richtig?

Und für die Methode über die Leistungen:
Wie berechne ich in meinem Fall die entsprechenden Leistungen? Ich habe ja keine Effektivspannungswerte oder dergleichen. Ich meine, immerhin habe ich in diesem Beispiel Vektoren von Signal und Rauschen getrennt(Später, in den Messungen, ist das dann ja zusammen in einem Vektor.)

Ist der Ansatz richtig, zur Leistungsberechnung stattdessen die Mittelwerte des Signals/des Rauschens zu nehmen?
Und wie müsste ich das machen, wenn Signal und Rauschen zusammen in einem Vektor vorliegen?
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.