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

FFT Problem Skalierung der Achsen stimmt nicht

 

Alfred001

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2016, 12:25     Titel: FFT Problem Skalierung der Achsen stimmt nicht
  Antworten mit Zitat      
Hallo zusammen,

dank dieses Forums konnte ich mir als Laie viele Infos zur FFT-Analyse mit Matlab einholen.

Leider habe ich dennoch ein Problem mit der Skalierung von Achsen. Dazu habe ich mir schon einige Beiträge durchgelesen, aber ich komme aktuell einfach nicht weiter und hoffe, dass mir jemand dabei helfen kann.

Nun zum Problem:

Wenn ich eine FFT mit einem Sinus 5 Hz mit einer Länge von einer Sek. durchführe, dann stimmt die Skalierung der X-Achse. Nur die Y-Achse passt nicht mit der Amplitude im Zeitbereich.

Wenn ich das gleiche Signal auf 2 Sek. erhöhe, dann stimmt leider nicht mehr die X-Achse. Es wird mir die Frequenz von 10 Hz angezeigt. Ich frage mich, warum? Wo liegt der Fehler. Die Y-Achse hat sich nicht verändert. Es wäre schön, wenn ich die gleiche Amplitude im FFT-Plot angezeigt bekomme, wie im Zeitbereich

Hier mein Code:
Code:

fs = 160;
fn = fs/2;
fftBlock = 1024;
nfft = fftBlock/2;

% Generate sinus
T = 2; % sec
f = 5; % 5Hz
A = 1; % amplitude
t = 0:T/fs:T-(T/fs);
sig = A*sin(2*pi*f*t)'; % Signal: Sinus 3 Hz
siglen = length(sig);

figure(1)
plot (t,sig);

% hanning window for excluding leakage effect
win = hann(siglen);
sigwin = win.*sig;

figure(2)
plot(t, sigwin);

% Zero-Padding
if siglen < fftBlock
    Diff = fftBlock - siglen;
    ZerPad = zeros(1,Diff)';
    sig = [sigwin;ZerPad];
end

% FFT
YFFT = fft(sig, fftBlock);
Yabs = abs(YFFT);
Y = Yabs(1:nfft);

figure(3)
plot(Y);

% scale x axis in Hz
df = fs/fftBlock;
X = 0:df:fn-df;
figure (4)
plot (X,Y);

% scale y axis
Y = (2*Y)/nfft;
figure (5)
plot(X,Y)
 


Alfred001

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2016, 09:59     Titel:
  Antworten mit Zitat      
Ich habe nun selbst den Fehler gefunden.

Der Fehler bezüglich der dargestellten Frequenz liegt bei der Erzeugung des Signals!

Das Signal sollte so erstellt werden:
[code]
t = 0:1/fs:T-(1/fs);
sig = A*sin(2*pi*f*t)'; % Signal: Sinus 5 Hz
siglen = length(sig);
[\code]

leider kriege ich die y Achse nicht skaliert. Kann mir da vielleicht jemand weiter helfen?
 
Alfred001

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2016, 08:59     Titel:
  Antworten mit Zitat      
So, nun habe ich den weiteren Fehler erkannt.

Die Samplerate und die FFT-Buffergröße spielen eine ganz wichtige Rolle und sollten bei verschiedenen Fragestellungen richtig gewählt werden.

Ich habe nun folgendes festgestellt, in meinem Beispiel ist die Samplerate kleiner als die FFT-Buffergröße. Damit bekommt man eine Frequenzauflösung von 0.15625Hz. D.h. 5 Hz lassen sich gut auf der x-achse darstellen, denn 5 Hz ist das 32-fache von der Frequenzauflösung. Das Einzige, die Amplitude stimmt nicht und die ist scheinbar auch von der Samplerate und FFT-Buffergröße abhängig.

Nehme ich z.B. eine Samplerate von 160 Hz und eine FFT-Buffergröße von ebenfalls 160, dann habe ich eine Frequenzauflösung von 1 Hz. Hier stimmt die x-Achse haargenau und die y-achse zeigt fast exakt die gleiche Amplitude im Amplitudenspektrum, wie im Zeitbereich an.

Falls jemand noch ergänzende Anmerkungen hat, sind diese gerne willkommen!
 
Neues Thema eröffnen Neue Antwort erstellen



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