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));
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!
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.
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):
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.
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.
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?
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
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.