www.mikrocontroller.net

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


Autor: Bernhard G. (bgwh)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
Fs = 19200;                   % Sampling frequency [Hz]
T = 1/Fs;                     % Sample time [s]
L = 19200*10;                 % Length of signal [samples]

NFFT = L;
fft_data = fft(data,NFFT)/L;      %calculate FFT
abs_fft_data = 2*abs(fft_data);   %calculate absolute values

Schoene Grueße

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Skalierungsfaktor beachten! Es ist ja ein abgetastetes Signal...

Autor: Mike C. (Firma: Arbeitslos) (mikecontroller)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernhard G. (bgwh)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.