Fast Fourier Transformation-FFT-Amplitude

Gast #3130722
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?
Gast #3130746
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.
Gast #3131634
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;
#3131650
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
#3131669
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
Gast #3131747
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
#3131792
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..
Gast #3132244
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])
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren