Verfasst am: 24.10.2014, 16:09
Titel: FFT eines künstlichen Signals
Hallo,
ich kann mir nicht so wirklich erklären, wie die Form meines Frequenzspektrums zu stande kommt.
Ich habe mir ein künstliches Signal gebastelt, bestehend aus überlagerten Sinusschwingungen mit Frequenzen von 1000 bis 10000 Hz in tausender Schritten.
Ich sehe ja die wichtigen Frequenzen, aber warum habe ich trotz Benutzung des Gausfensters weiterhin Amplituden in Form der Sinc-Funktion, was ja bei einem Rechteckfenster passiert.
Andere Fenster hab ich auch schon probiert, passiert immer das gleiche.
Ist das ein Nebeneffekt (wenn ja, welcher?) den ich so hinnehmen muss, oder ist doch was falsch an meinem Code?
Im Anhang nochmal mein Frequenzspektrum ...
Ich danke schonmal im vorraus für Ideen, Ratschläge und Ähnlichem.
Außerdem lies dich mal zum Thema Leckage (Leck-) Effekt ein. Genau dieses Phänomen tritt hier auf. Dies hat mit der Auflösung df des Frequenspektrums zu tun.
Code:
fa = % Abtastfreq.
df = fa/Nfft; % Frequenzauflösung
Nur Frequenzen in deinem Testsignal, die ein GANZES vielfaches von df sind, können richtig dargestellt werden. Liegt eine Signalfreq. dazwischen, kommt es zu diesem Verschmieren des Spektrums um die Signalfreq. herum/weitere Spektrallinien rechts und links des lokalen Maximums. Das lässt sich auch nicht mit einem Fenster beheben, sondern lediglich verringern.
Das Skript hatte ich mir schon angeguckt und hab da auch die Codezeilen mit der Fensterung. Ich glaub, dass ein Gaussfenster nicht die beste Wahl ist. Nehme dann doch lieber das Hanningfenster.
Die Skalierung der y-Achse hab ich so gewählt, weil ich für eine spätere Analyse von Signalen keine Aussage über die wirkliche Amplitude der Frequenzen treffen kann. Die Skalierung der x-Achse auf den relevanten Frequenzbereich wurde einfach weggelassen, damit ich einmal alles darstellen kann. Oder meintest du damit was anderes?
Das mit den Leck Effekt hab ich jetzt verstanden. Hab erst gedacht, dass die nur bei nicht periodisch fortgesetzten Signalen auftreten.
Trotzdem sorgen diese ja nur für eine Verschmierung des Signals. Warum jetzt die Amplituden bei den anderen Frequenzen abnehmen und dann wieder ansteigt, ist doch damit nicht erklärt, oder? Obwohl alle Sinusschwingen eine Amplitude von 1 haben, ist diese im Frequenzspektrum viel geringer ...
Hoffe jetzt, dass ich doch nicht falsch skaliere.
Leackage führt nicht nur zu den Nebenmaxima an der eigentlichen Signalfrequenz, sondern auch zu einer Verringerung dessen Amplitude. Der Fehler ist dann am Größten, wenn die Signalfreq. genau in der Mitte von df liegt.
Aber deine Skalierung von Y = fft(...) ist auch nicht korrekt. Du teilst erst durch Länge und dann aber nochmal durch Nfft. Es sollte aber nur durch Nfft sein.
Code:
% Berechnung der FFT % ------------------
H = fft(y, N);
% Berechnung des Amplitudengangs aus dem komplexen Frequenzvektor H:
amplH = abs(H);
% Amplitudenskalierung (Normierung auf N) und verschieben der Elemente des % Amplitudenvektors, so dass die Darstellung des Amplitudengangs von -fn...0...fn % erfolgen kann:
amplitudengang = fftshift(amplH/N);
Ebenfalls aus dem verlinkten Skript noch etwas zur Verwendung eines Fensters...
Code:
% Fensterfunktion % ----------------------
% Anhang an die bereits erfolgte Untersuchung % -------------------------------------------
win = hann(N)';
y_win = y.*win*N/sum(win); % Fensterung mit Amplitudenkorrektur
Die Wahl des Fenster hängt davon ab, was man damit erreichen will. Es gibt Fenster wie Hann, welche die Nebenmaxima minimieren, aber den Fehler der Amplitude nur wenig beheben. Das Flattop Window wäre hingegen sinnvoll, wenn man Wert auf Amplitudengenauigkeit legt. Hier sind dann aber die Nebenmaxima stärker als bei Hann etc.
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.