Forum: Digitale Signalverarbeitung / DSP / Machine Learning Fast Fourier Transformation-FFT-Amplitude


von Dennis (Gast)


Lesenswert?

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?

von Michael W. (Gast)


Lesenswert?

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.

von Daniel (Gast)


Lesenswert?

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;

von Kai S. (kai1986)


Lesenswert?

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

von Jan K. (jan_k)


Lesenswert?

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

von Daniel (Gast)


Lesenswert?

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?

von Daniel (Gast)


Lesenswert?

Sorry, hat sich erledigt. Passt alles. Danke

von Daniel (Gast)


Lesenswert?

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

von Jan K. (jan_k)


Lesenswert?

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..

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

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])

von Daniel (Gast)


Lesenswert?

Die Amplitude im Frequenzbereich passt doch überhaupt nicht zu dem 
Signal im Zeitbereich!

von Jan K. (jan_k)


Lesenswert?

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.

von Jan K. (jan_k)


Lesenswert?

Noch mal zur Verdeutlichung: 6 Sekunden nix, 0.5 Sekunden Schwingung.. 
Da ist gerade mal 1/13 der zeit überhaupt signal.
Das wirkt sich natürlich auf die Amplitude aus

von Mike (Gast)


Lesenswert?

Daniel schrieb:
> bild2.png

Die roten Kringel sehen GRAUSAM aus. Wie willst du da vernünftig 
Amplituden ablesen.

von Garden (Gast)


Lesenswert?


von J. S. (engineer) Benutzerseite


Lesenswert?

Häuslebau mit FFT. Nett. Die schwäbische Grundideologie dargestellt im 
Frequenzbereich.

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.