www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP FFT Beispiel in MatLab

Autor: Davos Rit (richmand)
Datum:

Hi.

Ich habe folgendes Problem. Ich habe mehrere Signale mit einer
Samplingrate von 1.0173e+003 Hz und einer Länge von 1730
Samplingpunkten. Ich muss diese Signale in ihrer Frequenzen zerlegen und
vergleichen, welche Frequenzen in welchen Signalen wie intensiv
vorhanden sind.

Ich würde gerne die fft-Funktion von MatLab (logischerweise in MatLab)
verwenden. Hierzu habe ich mir die MatLab-Hilfe durchgelesen und bin auf
folgendes Beispiel gestoßen:
Fs = 1000;                                    % Sampling frequency
T = 1/Fs;                                     % Sample time
L = 1000;                                     % Length of signal
t = (0:L-1)*T;                                % Time vector

% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); 
y = x + 2*randn(size(t));                     % Sinusoids plus noise

NFFT = 2^nextpow2(L);                % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);

% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2+1))) 
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')

Zunächst mal, Fs wäre in meinem Fall 1.0173e+003 Hz und L = 1730!? Der
Rest des oberen Teil ist hinfällig, da hier nur Daten produziert werden,
die ich aber ja bereits habe (hab's nur der Vollständigkeithalber mit
aufgeschrieben). Im Wesentlichen hab ich auch alles verstanden, bis auf
zwei Punkte.

1. Warum wird hier "Y = fft(y,NFFT)/L" durch L geteilt und

2. Warum wird hier in der Ausgabe "plot(f,2*abs(Y(1:NFFT/2+1)))" nochmal
mit 2 multipliziert?


Ich hoffe ihr könnt mir helfen, falls noch irgendwas unklar ist,
beantworte ich auch gerne noch mehr Fragen.
Autor: Michael Lenz (hochbett)
Datum:

Hallo,

> 1. Warum wird hier "Y = fft(y,NFFT)/L" durch L geteilt und
Das ist eine Normierung auf die Anzahl der Signalwerte und wird wohl nur
zu Anzeigezwecken gemacht.

> 2. Warum wird hier in der Ausgabe "plot(f,2*abs(Y(1:NFFT/2+1)))" nochmal
> mit 2 multipliziert?
Das Stichwort lautet: Spiegelspektrum für negative Frequenzen.
Normalerweise (d. h. bei reellwertigen Daten) läßt Du Dir die
Koeffizienten > N/2 nicht anzeigen. Sie enthalten keine neue Information
und ergeben sich als konjugiert komplexe Werte zu den Werten der
positiven Frequenzen.


Gruß,
  Michael
Autor: Davos Rit (richmand)
Datum:

Das heißt also, alles ist soweit richtig!?

Vielen Dank für die Antwort!

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email ü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




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net