ich mache momentan eine FFT-Analyse von Messdaten. Es handelt sich um ein Rechtecksignal (+-3V und 3kHz)
Die Frequenzanteile sind gut zu sehen, jedoch stimmen die Amplituden nicht überein.. Um diesem Fehler entgegenzuwirken (Leakage meines Wissens) habe ich ein Fenster erstellt und multipliziere dies mit meinem Signal. Und dann transformiere ich das Signal. Die Fragen: Wo liegt mein Fehler? (anbei ein Bild vom Spektrum)
Eine weitere Frage wäre, wie es mir möglich ist einen Gesamtpegel des Spektrums zu errechnen? Ist das einfach der Mittelwert meiner Absolutbeträge (a)?
function[mag, mag_dB, fv] = FFT_betragsspektrum( signal, nfft, fa, scale) % Input: % Signal im Zeitbereich % nfft = Anzahl Messwerte für fft % wenn nfft > length(sig) -> fft(sig,nfft) führt Zeropadding durch % fa = Abtastfreq. % scale: 0 = keine Impulsantwort als Eingang, 1 = Impulsantwort % Output: % Magnitude des Spektrums linear und dB skaliert % Frequenzvektor fv in [Hz] von 0...fa/2
% un-,gerade Anzahl Messwerte? ifmod(nfft,2) == 0;
k = (nfft/2) + 1;
else
nfft = nfft + 1;
k = (nfft/2) + 1;
end
Wenn das Signal wirklich eine Amplitude von 3 hat, wird sie im Spektrum auf jeden Fall niedriger und niemals höher sein, da ja neben der eigentlichen Signalfrequenz Nebenmaxima entstehen. Die Energie/Leistung des Signals ist ja die Amplitude, welche bei Leakage im Spektrum auf mehrere Frequenzen verteilt wird. Daher ist die ermittelte Amplitude dann immer geringer.
Mgx
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.02.2015, 08:10
Titel:
Ich benutze SciLab und kann daher nicht 1:1 die MATLab-Befehle übernehmen.
Ein Plot meines Frequenzspektrums OHNE Fensterung und MIT Fensterung habe ich angehängt.
Bei Anwenden der Fensterfunktion bekomme ich komischerweise eine geringere Amplitude von ca 3,4. Sollte durch das Reduzieren der Nebenfrequenzen (Leakage) die Amplitude nicht eher höher werden?
In SciLab kann ich beispielsweise nicht nfft anhängen.
So wie es in der oben genannten Funktion ist (zumindest für Matlab). Der Inputparameter nfft ist aber nicht wirklich von Belang, da es keinerlei Auswirkung auf die Skalierung hat. Ist nfft > Anzahl Messwerte des Signals, fügt die Matlab Funktion automatisch Nullen ans Ende des Signals, um auf die Länge nfft zu kommen. Den Vorgang nennt man zero padding. Übergibt man den Parameter nicht mit, kann eben kein zero padding durchgeführt werden. Ist nfft = Anzahl Messwerte des Signals, spielt die zusätzliche Übergabe von nfft ohnehin keine Rolle.
Bei Scilab kann ich dir leider nicht helfen. Wird denn dort auch ein zweiseitiges Spektrum berechnet, also von -Fs/2...0...+Fs/2 ?
Natürlich wird die Amplitude der Signalfrequenz durch die Fensterung höher, denn die Nebenmaxima werden ja gemindert (Gilt nur bei Leakage!!). Aber wenn das Signal eine Amplitude von 3 hat, dann kann weder mit noch ohne Fensterung ein Wert größer 3 im Amplitudenspektrum vorkommen. Erst recht nicht bei Leakage. Es sei denn die Skalierung stimmt nicht. Das war damit gemeint
Mgx
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.02.2015, 14:33
Titel:
In meinem Fall habe ich einmal von 0 bis fmax/2 geplottet, aber es geht auch mittels fftshift von -fmax/2 bis +fmax/2.
Ich habe nun herausgefunden, dass es anscheinend mit der Fourierreihe der Rechteckschwingung zusammenhängt, dass meine Amplitude einen Wert von ~6,3 hat, da die Grundschwingung mit 4/pi * A berechnet wird.. bei 5V im Zeitbereich komme ich dann im Frequenzbereich auf den Wert.
Jedoch habe ich das gleiche auch mit einer Sinussschwingung probiert, wobei hier die Amplitude die gleiche sein müsste wie im Zeitbereich.. ist sie aber leider nicht.
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.