Forum: Digitale Signalverarbeitung / DSP / Machine Learning FFT-MATLAB Amplitude des Zeitsignals


von Bernhard G. (bgwh)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich habe folgendes Problem. Ich soll einen Sinusgenerator an einen 
Biosignalverstärker (Daten werden in MATLAB aufgenommen) anhängen und 
diese Daten in MATLAB mit Hilfe einer FFT analysieren und daraus die 
Amplitude des ursprünglichen Sinus (Zeitsignal) ablesen können.

Prinzipiell ist das ja nicht so schwer, allerdings weißt der 
Sinusgenerator "ziemliche" Schwankungen auf. Habe dazu ein File als 
Anhang, wo dies ersichtlich ist. Dadurch entspricht die Amplitude nicht 
wirklich der Amplitude des Zeitsignals: das Maximum wäre ca. 12*10^4 
dies entspricht 120mV, eingespeist habe ich aber einen Sinus mit 200mV 
Amplitude.

Ich habe ein Bingröße (bzw. Spalten, ich hoffe es weiß jeder was ich 
damit meine, weiß nicht wie das tatsächlich heißt) der FFT von 0.1Hz, 
wenn ich diese vergrößere kommt wirklich nur ein Peak vor, und dieser 
entspricht relativ gut der Amplitude des Zeitsignals.
Diese Bingröße sollte sich aber nicht ändern, jetzt muss ich das 
irgendwie anders hinbekommen.

Jetzt habe ich mir gedacht, dass ich die einzelnen Werte der FFT rund um 
den Peak (im Bild bei 1000Hz) aufsummiere und so die tatsächliche 
Amplitude des Zeitsignals zu erhalten. Allerdings kommt da ein viel zu 
hoher Wert heraus.

Vielleicht könnte mir da irgendwer helfen, um auf die tatsächliche 
Amplitude rückschließen zu können. Wäre sehr dankbar dafür!

Noch zur Info, wie ich die FFT in MATLAB realisiert habe, dies sollte 
eigentlich passen:
1
Fs = 19200;                   % Sampling frequency [Hz]
2
T = 1/Fs;                     % Sample time [s]
3
L = 19200*10;                 % Length of signal [samples]
4
5
NFFT = L;
6
fft_data = fft(data,NFFT)/L;      %calculate FFT
7
abs_fft_data = 2*abs(fft_data);   %calculate absolute values

Schoene Grueße

von Sebastian (Gast)


Lesenswert?

Wieso machst Du 2*abs(fft_data);  ?

Du rechnechst den Betrag vom Realteil und Imaginärteil aus aber warum 
multiplizierst Du es dann mit 2?

von Gast (Gast)


Lesenswert?

Skalierungsfaktor beachten! Es ist ja ein abgetastetes Signal...

von Mike C. (Firma: Arbeitslos) (mikecontroller)


Lesenswert?

In Matlab berechnet die FFT() Funktion nur die Koeffizienten.

cn = abs(fft(data,NFFT))/L;

Die Amplitude errechnet sich aus 2*cn für n=1...usw.
Aber Achtung. Der Gleichanteil c0 wird nicht verdoppelt.

von Bernhard G. (bgwh)


Lesenswert?

Mike C. wrote:
> In Matlab berechnet die FFT() Funktion nur die Koeffizienten.
>
> cn = abs(fft(data,NFFT))/L;
>
> Die Amplitude errechnet sich aus 2*cn für n=1...usw.
> Aber Achtung. Der Gleichanteil c0 wird nicht verdoppelt.


Ja das habe ich eh so gemacht. Auch mit dem Faktor *2.

Es geht jetzt rein darum, wie ich die einzelnen Koeffizienten rund um 
den Peak aufsmmieren darf, um auf meine Ausgangsamplitude zu kommen?

Schoene Grueße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.