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 - Amplitude, Hann

 

niccnacc
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2013, 20:24     Titel: FFT - Amplitude, Hann
  Antworten mit Zitat      
Hallo!

Ich muss mich gleich entschudligen, weil ich mit einem solchen Thema starte.
Der Grund ist folgender: Ich hab viel gelesen zum Thema und glaube kenn mich stellenweise ganz gut aus, es fehlt aber der Überblick und das numerische "Gefühl" - was passiert wenn etc.

Bin neu in Octave/Matlab (benutze ersteres, was aber wurscht sein sollte).

Also die Frage: Wie/warum beeinflussen Datenpunkte die Amp einer FFT?

Genauer:
Ich habe eine FFT von einer großen Menge Daten vor und muss dazu kleine Stücke aus Messungen wählen, fenstern und FFT'n. Funkt alles soweit wirklich brilliant - außer der Amp!
Bei nem Signal y * cos (x * 2pi * t) komm ich schön auf meine y und die Frequenzen passen perfekt. Das Ding ist, wenn ich meinen eigentlichen Datensatz nehm ist die Amplitude VIEL zu gering - so im Bereich Faktor 30 bis min 2,3. Durch Test bin ich drauf gekommen, dass wenn ich die Daten feiner Interpoliere bekomm ich noch kleinere Amplituden -> Die Abhängigkeit ist 1/Npts. Dieses 1/nfft gehört doch da rein, oder? Aber die Amplitude dürfte doch keine Abhängigkeit zeigen!?

Und zum Zero Padding - wie ich das gemacht habe passt doch, oder? Ich denke das vergurkt nur alles, eben wegen der Abhängigkeit von der Zahl der Punkte. also das wär dann nexpow term & fft(signal, nfft);

Um jede Hilfe/Hinweis dankbar.
Entschuldigt das übersättigte Thema, aber man findet so viel schlechte/falsche/unübersichtliche Infos dazu...


FFT Code:

Code:

dt = time(2:end) - time(1:end-1); %time steps

if ( max(dt)-min(dt) > 0.01*mean(dt) )    % print residual check if grater than 1% of mean
  error ("Sampling Frequency not constant!");
else
  dt = mean(dt);
endif

fs = 1/dt;                      %sampling frequncy
%nfft= 2^(nextpow2(length(signal)));  % Use next highest power of 2 greater than or equal to length(x)
nfft = length (signal);

signal_fft = fft(signal)/nfft;
freq_vect = fs/2*linspace(0,1,floor(nfft/2+1)); % Number of unique Pts = floor(nfft/2 +1)


amp = signal_fft (:,1:floor(nfft/2+1));    %cut imaginary part of the conjugate complex fourier coefficients
amp = 2*abs(amp);       %scale all coefficients so only one sum is sufficient
amp(:,1)=0.5*amp(:,1);  %scale down c_0 to correct value (constant value)

 
Private Nachricht senden Benutzer-Profile anzeigen


niccnacc
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2013, 12:47     Titel:
  Antworten mit Zitat      
I now know, that you have to divide by length(signal) and not the transformation length. This reduces the problem to: why does the amp is so fine for testing and on my data its miserable:
Code:

M = floor(nfft/2);

a0 =    amp(1);
an =    real(amp(2:M));
a_last= amp(M+1);
bn =    -imag(amp(2:M));

n = 1:length(an);
y = a0 + an*cos(2*pi*n'*time) ...
       + bn*sin(2*pi*n'*time) ...
       + a_last*cos(2*pi*M+1 *time);


figure(3)
clf();
subplot(2,1,1),
  plot(time, y, "k");
title('FFT Interpol - Time domain plot');

subplot(2,1,2),
plot(time,signal,'k');
title('Real signal Input');

 



This should plot the signal through the coefficients taken from the FFT and is just there for looking, wether or not the amplitude of the signal is represented corretly within my code. Obviously it is, because for any test signal i get very accurate interpolations.
With my data though it's horrible!
I've attached a sample - it has to be divided by its mean.
second col = time in ms (divide by 1000 for s)
first col = velocity in m/s
Data must be interpolated due to uneven spacing! I use pchip.
So I get 11339 Points, which should be enough, right?

The picture attached is the interpolation with the coeffitients of the FFT. Over the Input (including Hann Window).

Bildschirmfoto 2013-02-23 um 12.41.11.png
 Beschreibung:
Plot of the FFT-Interpolation for the signal.

Download
 Dateiname:  Bildschirmfoto 2013-02-23 um 12.41.11.png
 Dateigröße:  23.43 KB
 Heruntergeladen:  922 mal
3400.txt
 Beschreibung:

Download
 Dateiname:  3400.txt
 Dateigröße:  230.3 KB
 Heruntergeladen:  1012 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
niccnacc
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2013, 14:30     Titel:
  Antworten mit Zitat      
For the sake of completion:

The solution to this unique thing was: I was cutting the files into pieces, where in between was just 0. I failed to take these massive amounts of zeroes into account.

As I mentioned before, you need to divide by the length of the signal - not the transformed length (zero padding of any sort doesn't count).
Private Nachricht senden Benutzer-Profile anzeigen
 
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.