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

Inverse FFT

 

Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2011, 22:05     Titel:
  Antworten mit Zitat      
Rechenleistungsprobleme habe ich (zur Zeit noch) nicht! ich mache quasi statische Analysen und muss nach jeder Messung das Spektrum berechnen.

naja der Grund meiner Frage nach Aufteilung in Abschnitten ist, weil ich gar keinen Unterschied im Spektrum feststellen kann, wenn ich einfach mein gesamtes Signal der Länge 2^14 vorher mit Fensterfunktion gewichte. Die beiden Spektren sind absolut identisch.
Code:

N = length(data);  %laenge des Messvektors "data"
Nfft = 2^nextpow2(N);
y1 = fft(data,Nfft)/N;  
yplot1 = 2*abs(y1(1:Nfft/2+1,:));
% Windowing
data_window = blackman(data);
y2 = fft(data_window,Nfft)/N;  
yplot2 = 2*abs(y2(1:Nfft/2+1,:));
 


PS: sofern sich jemand für eigene Berechnung interessiert habe ich einen Messvektor hochgeladen

data.zip
 Beschreibung:

Download
 Dateiname:  data.zip
 Dateigröße:  123.22 KB
 Heruntergeladen:  421 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.06.2011, 22:19     Titel:
  Antworten mit Zitat      
Du musst doch das Fenster (hier blackman) mit dem Zeitsignal multiplizieren Wink

Code:

data_window = blackman(N)';
 y2 = fft(data.*data_windows,Nfft)/N;


Deine Skalierung der y-Achse (also der Amplitude) ist auch nicht richtig, wenn du nur von 0 Hz...fa/2 das Spektrum darstellen willst.

Schau dir dazu mal dieses Beispiel an: http://www.gomatlab.de/fft-umfassendes-beispiel-t777.html

Für die richtige Skalierung des Fensters sollte du ebenfalls dieses Skript studieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2011, 00:05     Titel:
  Antworten mit Zitat      
Vielen Dank DSP!
manchmal bin ich wirklich blind! Das Spektrum sieht mit der Fensterung "sauberer" aus!
und was die Amplitude des Spektrums angeht, habe ich einen Faktor 2 drin! weiss aber warum ich ihn damals eingegeben habe!
nun darf ich geschätze 300 Messungen samt Spektren laden, die Frequenzspektrum mit Fensterfunktion berechnen und wieder abspeichern. Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
djanski
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 03.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2011, 08:45     Titel:
  Antworten mit Zitat      
DSP hat Folgendes geschrieben:
Ich habe vor lauter Wald die Bäume nicht gesehen...Sorry. Mir ist erst jetzt aufgefallen, dass tatsächlich dein Programm bei den beiden verschiedenen Sinussignalen eine Verschiebung bei dem gefensterten Signal anzeigt. Das liegt eindeutig an der Frequenzauflösung, die unterschiedlich ist. Um ein Signal mit nicht ganzen Perioden im Messfenster zu generieren, änderst du ja den Zeitvektor.

Code:
t_2     = 0:dt:(anzPer+0.63)*T_id-dt;


Dadurch wird der Vektor länger und es ergibt sich dadurch eine andere Auflösung. Bei Signal 1 ist die Auflösung 1Hz und bei Signal 2 unter 1Hz. Bei einem Sinus von 10 Hz als Testsignal, zeigt dir das Spektrum ohne Leakage natürlich bei 10 Hz eine Spektrallinie. Durch die andere Auflösung von 0.9434 Hz kann die Spektrallinie von Signal 2 eben nicht nicht dort liegen. Daher kommt die Verschiebung des gefensterten Signals.


Hey DSP,

vielleicht hätte ich auch meine Frage konkreter formulieren sollen. Ausgangsbedingung sollte der zweite Zeitvektor sein
Code:
t_2     = 0:dt:(anzPer+0.63)*T_id-dt;

Die Frage die ich da dann hatte war, ob bei einer Abtastrate von 0,1Hz mir bei Fensterung des Signals trotzdem nur bei den 5 Hz eine Amplitude angezeigt wird oder ob der Leakage dazu führt, dass die Amplitude nicht mehr genau zugeordnet werden kann und ich halt um die 5 Hz herum mehrere Amplitude angezeigt bekomme, wobei bei 5 Hz das Maximum liegt.
Habe ich mich verständlich ausgedrückt? Wenn nicht bitte sagen. Dann versuch ich es noch mal Smile.

@KIA
Wenn du die von mir gepostete Funktion benutzt kannst du dir den Freqeunzvektor gleich mit berechnen lassen und musst dir nicht selber darüber gedanken machen...wobei das natürlich nie schaden kann Wink. Das einzige was du brauchst ist der äquidistante Zeitvektor und dein Datensatz.

MfG
djanski
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.06.2011, 11:18     Titel:
  Antworten mit Zitat      
In diesem konkreten Beispiel kann doch gar kein Leakage auftreten.

5 Hz Sinus hat eine Periodendauer von 0.2s
Ich nehme mal eine Abtastfreq. fa von 100 Hz an -> Ta = 0.01s

Eine Periode des Signals mit Ta abgetastet besteht damit aus 20 diskreten Messwerten. Die "Abtastrate" eigtl. Freq.auflösung df des Spektrums (dein Begriff könnte auch mißverstanden bzw. mit Ta verwechselt werden) gibst du mit 0.1 Hz vor. Ich hatte ja bereits schon erwähnt, woraus sich df ergibt:

df = fa/N -> 0.1 Hz = 100 Hz/N -> N = 100 / 0.1 = 1000 Messwerte

Die 1000 Messwerte sind ein Vielfaches der 20 Messwerte einer Periode mit Ta abgetastet...nämlich 50. Somit enthält das Messfenster komplette 50 Perioden und es kann kein Leakage entstehen.

Das Verschmieren des Spektrums (=Leakage) entsteht doch dadurch, dass die Signalfreq kein Vielfaches der Freq.auflösung df ist. Bei deinem Bsp. ist der 5 Hz Sinus aber sehr wohl ein Vielfaches von df = 0.1 Hz. Du siehst an dem Rechenbsp. warum die Forderung nach vollen Perioden im Messfenster gestellt wird und mit df und der Signalfreq. zusammenhängt Wink

Zuletzt bearbeitet von DSP am 26.06.2011, 11:49, insgesamt einmal bearbeitet
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.06.2011, 11:36     Titel:
  Antworten mit Zitat      
Kia hat Folgendes geschrieben:

und was die Amplitude des Spektrums angeht, habe ich einen Faktor 2 drin! weiss aber warum ich ihn damals eingegeben habe!


Wenn du meinst...das macht es aber nicht richtiger Surprised Bei einer Darstellung von 0 Hz bis fa/2 Hz wird die Amplitude des Gleichanteils mit N skaliert...die folgenden Ampl. nur noch mit N/2

aus dem Skript:

Code:

% Berechnung der FFT
% ------------------
 H = fft(y, N);
% Berechnung des Amplitudengangs aus dem komplexen Frequenzvektor H:
 amplH = abs(H);
% Darstellung des interessierenden Frequenzbereichs des
% Amplitudengangs (0...fn) und
% daran angepasste Amplitudenskalierung (Normierung auf N/2):
 amplitudengang = [amplH(1)/N amplH(2:N/2)/(N/2)]; % DC-Bin auf N normieren!


und für das Fenster:

Code:

% Fensterfunktion
% ----------------------

% Anhang an die bereits erfolgte Untersuchung
% -------------------------------------------
 win = hann(N)';
 %y_win = y.*win; % Fensterung ohne Amplitudenkorrektur
 y_win = y.*win*N/sum(win); % Fensterung mit Amplitudenkorrektur
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2011, 12:18     Titel:
  Antworten mit Zitat      
Hallo nochmal
Die Sache mit dem Amplitudenkorrektur ist mir klar und habe auch den Code-Ausschnitt entsprechend verstanden und übernommen

Was die Skalierung der Amplitude angeht, muss ich mich korrigeren.
Die Amplituden sind bei mir und in diesem Beispiel identisch! und zwar wenn ich mein Faktor 2 weiterhin benutze! Und ich erinner mich dunkel daran warum ich damals das eingegeben habe. Wenn man nach der Transformation im Frequenzbereich nur die Werte bis N/2 nimmt, müssen diese, außer dem Gleichanteil F(0), alle mal 2 genommen werden und zwar wegen der Energie, die sich im positiven und im negativen
Freuquenzbereich aufteilt.

Der einzige Unterschied zwischen meinem Spektrum und dem des Beipiels liegt darin, dass beide Spektren um 1*df geshiftet zueinander stehen! Aber ich habe mich ja sehr stark an Matlabs eigenes Beispiel orientiert.
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.06.2011, 12:30     Titel:
  Antworten mit Zitat      
Das ist auch alles richtig beschrieben.

Aber bei deinem Bsp ist der Gleichanteil y1(1) ebenfalls mit 2 multipliziert Wink

Code:
yplot1 = 2*abs(y1(1:Nfft/2+1,:));
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2011, 16:55     Titel:
  Antworten mit Zitat      
Achso! alles klar jetzt habe ich es verstanden!
Private Nachricht senden Benutzer-Profile anzeigen
 
djanski
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 03.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2011, 09:02     Titel:
  Antworten mit Zitat      
Oh Gott...wie es aussieht habe ich es wieder einmal komplizierter gemacht als es eigentlich ist bzw. beim Leakage noch was nicht ganz richtig verstanden. Dein Beispiel hat es (noch mal) serh schön verdeutlicht! Ich danke dir für deine Geduld beim erklären Smile.
Jetzt sollte wirklich alles klar sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3

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 - 2025 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.