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?
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.
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
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?
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..
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])
Die Amplitude im Frequenzbereich passt doch überhaupt nicht zu dem Signal im Zeitbereich!
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.
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
Daniel schrieb: > bild2.png Die roten Kringel sehen GRAUSAM aus. Wie willst du da vernünftig Amplituden ablesen.
A propos Fourier: Das ist cool: http://et-tutorials.de/7456/was-man-sonst-noch-mit-der-fourier-transformation-machen-kann/
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.