Verfasst am: 03.06.2009, 08:48
Titel: Umgang von Fenster-Funktionen und FFT
Ich arbeite gerade an einer einfachen Umsetzung einer FFT-Implementierung.
Das Spektrum soll dabei mit Fenster-Funktionen optimiert werden.
Folgendes Beispiel habe ich in Matlab programmiert:
Code:
figure(1);
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sample time
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector % Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = (0.7*sin(2*pi*50*t) + sin(2*pi*120*t));
y = (0.7/sqrt(2)*sin(2*pi*50*t) + sin(2*pi*120*t)/sqrt(2));
plot(Fs*t(1:50),x(1:50));
xlabel('time (milliseconds)')
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(x,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
Die Spektren, einmal ungefenstert und einmal gefenstert, sehen so aus:
Meine Frage bezieht sich jetzt darauf, dass meine Fensterfunktion ja die Amplitude meines Signals "wegdrückt" und sich das dementsprechend im Spektrum niederschlägt.
Ich suche eine mathematisch nachvollziehbare Möglichkeit auch mit einem gefensterten Signal eine korrekte Ampitude anzeigen zu lassen und das dämpfende Verhalten der Fensterung (im Beispiel ein Blackman-Fenster) im Spektrum zu kompensieren.
Vielen Dank im Voraus!
man weiss nach der FFT ja nicht mehr, wo (zeitl.) die jew. Frequenzen waren... du könntest ja ne ungefensterte fft machen, ein paar Maximas mit den jew. Frequenzen suchen und dann die gefensterte einfach mit einem Faktor multiplizieren...
holyfetzer
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 26.06.2009, 13:45
Titel:
Den Gedanken hatte ich am Anfang auch, die Dämpfung ist allerdings nicht linear über den Frequenzbereich. Kann man diese genaue Dämpfung vielleicht irgendwie berechnen? Auf alle Fälle danke für deine Antwort.
hmm... du hast also ne ganze Menge Maximas, oder ?
Wie wärs, alle über mean()*faktor zu suchen, dann die Division mit dem gefensterten zu machen und dann den kleinsten/grössten (ähh... ) Faktor zu nehmen ?
Aber das ist eh alles nur Kuddel-Muddel und hat mMn keinen echten Sinn - vielleicht kannst du mir dein Problem ein bissl mehr erklären ?
Ich denke dein problem ist eventuell lösbar indem du die entsprechende Gewichtung, die aus der verwendeten Fensterung resultiert, berechnest.
Eine Fensterung im zeitbereich bedeutet ja im frequenzbereich eine Gewichtung mit einer bestimmten funktion.
Beispielsweise Rechteckfenster liefern im Freq-Bereich eine Gewichtung mit der Si-Funktion deren Nullstellen etc. durch die Fensterfunktionswahl gegeben ist. Und an der entsprechenden Stelle der der Peaks kannst du den
Faktor der Gewichtung ausrechnen.
vielleicht gibt es geschiktere Möglichkeiten, aber die funktioniert auch.
zuerst einmal der hinweis, dass wenn du vom zweiseitigen auf das einseitige Spektrum wechselst, der DC-Wert nicht mit 2 multipliziert werden sollte!
Dann solltest du beachten, dass du beim Teilen der FFT nicht zwangsweise durch die Anzahl der FFT Elemente teilen solltest, sondern eher durch die Gewichtung des Fensters ( sum(f2) ist das in deinem Fall ).
timmi
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 20.08.2010, 14:11
Titel:
Andy386 hat Folgendes geschrieben:
man weiss nach der FFT ja nicht mehr, wo (zeitl.) die jew. Frequenzen waren... du könntest ja ne ungefensterte fft machen, ein paar Maximas mit den jew. Frequenzen suchen und dann die gefensterte einfach mit einem Faktor multiplizieren...
also meine signalverarbeitungskenntnisse sind ja nicht mehr ganz taufrisch aber ne ungefensterte fft kannst du in matlab wohl nicht umsetzten... ich glaube du meinst rechteckgefenstert...
zu der frage der amplituden: wenn ich mich recht erinnere muss man nach der festerung noch entnormieren... ich würd mal hier nachlesen: http://web.mit.edu/xiphmont/Public/windows.pdf
ja, mathematisch betrachtet ist es rechteckgefenstert. In Matlab hat man aber meist irgendwie abeschnittene Zeitreihen (sofern man nicht symbolisch rechnet).
Das man irgendwie normieren sollte, wurde ja schon genannt. Leider fehlt die Antwort vom TE.
_________________
Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
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.