Fast Fourier Transformation-FFT-Amplitude

Gast #3130722
Hallo Forum-Freunde,

ich hoffe ihr könnt mir ein bisschen bei der Signalverarbeitung 
weiterhelfen. Folgendes Skript benutze ich zur FFT von Signalen:

figure('Position',[0 0 630 205]);
set(gcf,'Color','w');
hold on;
y=Signal;
Fs=320000;
T=1/Fs;
L=320000;
t=(0:L-1)*T;
NFFT=2^nextpow2(L);
Y=fft(y,NFFT)/L;
f=Fs/2*linspace(0,1,NFFT/2);
plot(f,2*abs(Y(1:NFFT/2)),'r')
%ylim([0 50])
xlim([0 100])

Ich würde gerne den Zusammenhang zwischen der Amplitude im Zeit- und 
Frequenzbereich verstehen. Habe ich z.B ein Sinussignal (50Hz) mit einer 
Amplitude von 100 müsste ich doch nach der FFT ein Frequenzspektrum 
erhalten, mit einer Frequenz bei 50Hz und einer Amplitude von 100 oder?

Könnte mir vielleicht einer kurz den Zusammenhang erklären?
Ist das Skript so richtig?
Gast
Im Prinzip ja, allerdings hängt es von der Breite der FFT-Linie ab, wie 
stark sich das 50Hz Signal in den einzelnen Linien abbildet. Je nach 
Periode und Zahl der Linien ist das mehr oder weniger schmal. Die Höhe 
der Linie alleine macht daher noch keine absolute Aussage. Du musst die 
Höhe über den Bereich integrieren, um einen direkten Zusammenhang zur 
Amplitude zu erhalten.
Gast
Danke für die Antwort!

Ich habe mir mal ein kleines Beispiel. mit einem Sinussignal (50Hz, 
Amplitude 100) und zusätzliche wird ein Gleichanteil von 10 addiert. 
Werte ich dieses mit folgendem Matlab Skript aus erhalte ich zwar bei 50 
Hz eine Amplitude von 100, allerdings ist der Gleichanteil jetzt 20. 
Woher kommt die 20? es müssten doch eigentlich 10 sein

%% FFT
figure('Position',[0 0 630 205]);
set(gcf,'Color','w');
hold on;

Fs=10000;
T=1/Fs;
L=10000;
t=(0:L-1)*T;
y=10 + 100*sin(2*pi*50.*t);
NFFT=2^nextpow2(L);
Y=fft(y,NFFT)/L;
f=Fs/2*linspace(0,1,NFFT/2);
stem(f,2*abs(Y(1:NFFT/2)),'r')

xlim([0 100])
title('Fouriertransformation iRd50ohnefilter','fontsize',8)
h=legend('Frequenzspektrum is','Location','Best');
set(h,'FontSize',8);
xlabel('f [Hz]','fontsize',8);
set(gca,'Fontsize',8);
ylabel('Amplitude','fontsize',8);
set(gca,'Fontsize',8);
grid on;
hold off;
Hallo,

die Amplituden bei der FFT hängen vom Algorithmus ab. Die Vorfaktoren 
für die Fouriertransformation werden von unterschiedlichen Fachbereichen 
(Mathematik, Physik, Elektortechnik) unterschiedlich gewählt. Welchen 
Vorfaktor Matlab verwendet sollte sich in der Dokumentation finden 
lassen (ist vermutlich sogar einstellbar, was genutzt werden soll).

Gruß Kai
Die 20 kommt von
1
stem(f,2*abs(Y(1:NFFT/2)),'r')

Da wird das EINSEITIGE Spektrum dargestellt. fft berechnet normalerweise 
das zweiseitige (bei reellen Signalen also symmetrisch um fs/2 bzw, wenn 
es geshiftet wird (siehe doc fftshift in matlab) symmetrisch um 0). Beim 
zweiseitigen gibt es zwei Frequenzen (eine positive und eine 
"negative"), auf die sich das Spektrum aufteilt. Für das einseitige 
werden deswegen die Anteile verdoppelt. Für den DC Teil hingegen gibt es 
KEINE negative Frequenz, die beiden bins fallen aufeinander. Deswegen 
darf der DC Teil nicht mit 2 multipliziert werden!

Mach z.B. sowas:
1
F = 2*abs(Y(1:NFFT/2));
2
F(1) = F(1)/2;
3
stem(f,F,'r');

Schöne Grüße
Gast
Super, Danke!

Dann habe ich aber das Problem, das die Amplitude des Sinus im 
Frequenzbereich nicht mehr 100 ist, wie komme ich denn da jetzt wieder 
hin?
Gast
So jetzt noch meine letzte Frage:

Wie wähle ich denn am besten meine Länge des Signals und die 
Abtastfrequenz, damit ich im Frequenzbereich die gleiche Amplitude wie 
im Zeitbereich erhalte? Gibt es da irgendwelche Schritte, wie man am 
besten dabei vorgeht
Tja, das ist die Kunst und funktioniert bei unbekannten Signalen nicht 
wirklich.

Das Problem ist, dass deine Frequenzauflösung, also der Abstand der 
einzelnen Bins von der Abtastfrequenz und der Fensterlänge abhängt.
1
df = fs/N

dabei ist fs deine Abtastfrequenz, N die Länge deines Fensters. Je 
kleiner df wird, desto feiner kannst du deine Frequenzen darstellen.

Du hast also zwei Stellschrauben.

Die Abtastfrequenz wählst du mindestens so hoch, dass sie doppelt so 
hoch ist, wie die maximale Signalfrequenz, die du darstellen möchtest 
(Nyquist Kriterium).

Wenn du bei einem sinusförmigen Testsignal exakt deine Amplitude haben 
möchtest, musst du zusehen, dass dein Fenster genau so lang ist, dass 
ein Vielfaches deiner Periodenlänge reinpasst, sonst kommt es zum 
http://de.wikipedia.org/wiki/Leck-Effekt

Praktisch wird die Messlänge natürlich durch Speicherbedarf und ggf. 
Zeitanforderungen begrenzt..
Gast
Hallo! Vielleicht könnt mir mir für folgenden Scrrenshot bei der FFT 
behilflich sein. Wie würdet ihr hier zu einer sinnvollen Auswertung 
vorgehen?

Mit folgendem Skript erhalte ich das Ergebnis in dem Screenshot

figure('Position',[0 0 630 205]);
set(gcf,'Color','w');
hold on;
y=iRd50sprung;
Fs=32000;
T=1/Fs;
L=320000;
t=(0:L-1)*T;
NFFT=2^nextpow2(L);
Y=fft(y,NFFT)/L;
f=Fs/2*linspace(0,1,NFFT/2);
stem(f,2*abs(Y(1:NFFT/2)),'r')
%ylim([0 5])
xlim([0 100])
Angehängte Dateien:
Was isn das fuern Signal?
Wenn du von t=0 die FFT machst hast du einen Bereich mit gar keiner 
Frequenz und einen mit deinen Schwingungen.
Die "Leistung" deines kompletten Signales verteilt sich in deinem 
Spektrum. Also auch die des ersten Bereichs.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.