|
|
FFT Anwendung und Funktion |
|
Hansi |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.07.2010, 12:36
Titel: FFT Anwendung und Funktion
|
|
|
|
|
Hallo und Servus zusammen,
ich möchte gerne die Funktionsweise des FFT im Matlab verstehen. Dazu folgendes Problem.
(Normal findet man eigentlich alles im Internet, bloss dazu finde ich leider nicht wirklich etwas hilfreiches oder gibt es so wenige die es nicht verstehen???)
Im folgenden führe ich meinen aktuellen Wissenstand auf, wie ich es durchführen würde !
Ausgangspunkt:
-----------------
- ein Zeitsignal x. welches mit einer Abtastfrequenz von 50kHz aufgezeichnet wurde
- das Zeitsignal wurde 5 Sekunden aufgezeichnet und hat folglich eine Länge von 250000 samples
- als Blocklänge für den FFT lege ich 8192 samples fest.
- folglich wird das Zeitsignal in 30.5176 gleichgroße Blöcke aufgeteilt
- der letzte Block muss aufgefüllt werden, damit es genau 31 Blöcke sind oder ich lasse ihn weg und verliere dann aber Information!
- nach aufteilen der Blöcke benutze ich eine geeignete Fensterung (z.B. Hanning), damit ich den leakage effekt unterdrücken kann
- nun wird jeder Block mittels FFT in den Frequenzbereich transformiert
- nach der Transformation in den Frequenzbereich werden die Beträge der einzelnen Blöcke miteinander gemittelt und man erhält somit das Signal im Frequenzbereich
---------
Kann bitte jemand helfen, ob das so richtig ist?
Danke
|
|
|
|
|
Fourier |
Forum-Guru
|
|
Beiträge: 329
|
|
|
|
Anmeldedatum: 05.04.10
|
|
|
|
Wohnort: Karlsruhe
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 29.07.2010, 13:53
Titel:
|
|
Hallo,
ich finde es ist ok wie du vorgehen möchtest.
aber ich frage mich nur ob es nicht besser ist die FFT in einem Schlag durchzuführen. 5 sekunden sind nicht zuu lang.
aber wie gesagt wie du jetzt vorgehen möchtest ist bestimmt nicht falsch.
ich gebe dir bald eine bessere antwort. welche länge optimal sein könnte, oder ob es doch egal ist.
weil ich schon gelesen habe :je höher die FFT-Länge, desto besser können dicht benachbarte Frequenzkomponenten unterschieden werden.
gruss
_________________
Ein schlechter General ist besser als zwei gute.
|
|
|
Hansi |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.07.2010, 14:06
Titel:
|
|
Hey
vielen Dank für Deine Hilfe,
Ich gebe Dir recht mit dem direkten FFT ... die Ergebnisse variieren nicht großartig. Gibt es eine Regel ab welcher Zeit oder anderen Variabel man meine Vorgehensweise benutzten sollte ?
Grüße der Hansi
|
|
|
Fourier |
Forum-Guru
|
|
Beiträge: 329
|
|
|
|
Anmeldedatum: 05.04.10
|
|
|
|
Wohnort: Karlsruhe
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 29.07.2010, 14:14
Titel:
|
|
Hallo,
ich musste schon mal sowas ähnliches machen, war sogar länger als 5s.
mein Professor meinte in matlab kann man ruhig in einem Schlag machen.
aber wenn zum beispiel ein signal von einem mikofon kommt und gleich verarbeitet werden muss und weitergeleitet, da kann man nicht solange warten bis das signal da ist, dann verarbeiten......, in so einem Fall muss man blockweise arbeiten.
ich hab aber trozdem dem prof eine kurze email geschickt, nach welcher regel man sich für eine länge entscheiden kann. dauert normalerweise weniger als 24 stunden bis die antwort kommt.
ich sag dir dann bescheid.
das möchte ich übrigens auch wissen
gruss
_________________
Ein schlechter General ist besser als zwei gute.
|
|
|
Hansi |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.07.2010, 14:19
Titel:
|
|
Hallo,
Klasse ... freut mich sehr, dass sich ebenfalls jmd für diese Thematik begeistert !!
Ich bin mal gespannt, wie der Prof das sieht!
Grüße
|
|
|
flmi |
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 27.07.10
|
|
|
|
Wohnort: Karlsruhe
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.07.2010, 14:28
Titel:
|
|
Wie Fourier schon sagte kannst du ruhigen Gewissens alles auf einmal bearbeiten lassen.
OT: Hat der Prof. nicht gerade Urlaub???
|
|
|
_Fourier |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.07.2010, 14:42
Titel: a
|
|
er checkt seine emails regelmässig.
ausserdem habe ich seine private Email
|
|
|
Fourier |
Forum-Guru
|
|
Beiträge: 329
|
|
|
|
Anmeldedatum: 05.04.10
|
|
|
|
Wohnort: Karlsruhe
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 29.07.2010, 16:28
Titel:
|
|
|
|
|
Hallo,
die Antwort hat weniger gedauert als ich dachte :P
---------------------------------------------------------------------
die Bearbeitung sollte mit der Art des Signals verbunden sein. Wenn
das Signal deterministisch und periodisch ist, kann man einige
Perioden (10 bis 200) transformieren. Wenn man nur die Amplituden der
Harmonischen benötigt (ohne die Phasenlage im Intervall, der diese
Perioden enthält) und das Signal auch Rauschen (z.B. Messrauschen)
enthält, dann kann man mehrere solche Ausschnitte transformieren und
dann den Mittelwert des Betrags berechnen.
Für Zufallssignale sollte man immer mehrere Segmente transformieren
und dann mitteln und die spektrale Leistungsdichte ermitteln. Hier
spielt der Winkel der FFT keine Rolle nur der Betrag hoch 2 ist
wichtig. Die Anzahl der Abtastwerte N für ein Segment muss mit der
Auflösung der FFT verbunden sein. Der Abtstand der FFT-Linien ist
immer fs/N. Bei 5 kHz für fs und N = 1000 ist die Auflösung 5 Hz/Linie
(Abstand zwischen den Linien).
Wenn Sie mir das Signal genauer beschreiben kann ich ein Vorschlag
machen, wie Sie die FFT benutzen sollen.
-----------------------------------------------------------------------------------
das ist ja mal Hammer. (das mit winkel muss ich noch verstehen)
kannst du mal das Signal beschreiben ?
Gruss
_________________
Ein schlechter General ist besser als zwei gute.
|
|
|
flmi |
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 27.07.10
|
|
|
|
Wohnort: Karlsruhe
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.07.2010, 17:00
Titel:
|
|
@ Hansi:
Mag sein dass ich mich irre, aber hast du nicht 1.250.000 Samples bei fs = 50kHz und 5s sampling time?
@ Fourier:
Q ist der Hammer...
Wenn die Amplitude (Wert) eines periodischen Signals gesucht ist, gibt es schnellere/einfachere Wege. Aber das war glaub ich nicht Sinn und Zweck des TO.
|
|
|
Fourier |
Forum-Guru
|
|
Beiträge: 329
|
|
|
|
Anmeldedatum: 05.04.10
|
|
|
|
Wohnort: Karlsruhe
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 29.07.2010, 17:13
Titel:
|
|
@flmi
bitte keine Abkürzungen, ich steh jetzt auf dem Schlauch. (TO, OT).
ich glaube du irrst dich.
Fs=50000. und 5*50000= 250 000 ;)
übrigens er ist nicht Q, sondern H.
_________________
Ein schlechter General ist besser als zwei gute.
|
|
|
flmi |
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 27.07.10
|
|
|
|
Wohnort: Karlsruhe
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.07.2010, 17:25
Titel:
|
|
Stimmt natürlich
Ist mir schleierhaft was ich manchmal rechne, oder wie...
TO - Thread Opener
OT - Off Topic
Dann sag mal was/wer H. ist!?
|
|
|
Hansi |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.07.2010, 20:26
Titel:
|
|
Hallo,
also mein Hintergrund ist der, das ich gerne Signale mit den Mikrofonen aufnehmen möchte über eine bestimmt Dauer mit einer best. Abtastfrequenz. Diese lassen ich mir dann ausgehend von den Zeitrohdaten mit MATLAB in den Frequenzbereich transformieren mit Wahl einer geeigneten Samplingrate (sprich N2^alpha (z.B.1024,4096,8192, etc.) ). Daher war mein Ansatz auch der mit der Mittelung über den Blöcken, etc. weil es ja kein periodisches Signal ist was ich aufzeichne, sondern vielleicht das Geräusch in einer Straße oder in einem Park.
Ich poste morgen im Laufe des Vormittags mal einen code, der wiederspiegelt was ich bisher alles getan habe.
Zum Verständnis ... mir ist klar was das Amplitudenspektrum des FFT ist, aber wie oder was bed. die Phase ... verstehe ich so nicht!
Grüße
|
|
|
Hansi |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.07.2010, 20:53
Titel:
|
|
Ich bins nochma:
Genauer gesagt bin ich mir halt nicht sicher, ob das mit der Mittelung nicht so gemeint ist, ob man mehrere Messungen machen muss, da es für mich sehr schwer vorstellbar ein Signal / Geräusch in einzelne Blöcke zu zerteilen.
|
|
|
Hansi |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.07.2010, 06:01
Titel:
|
|
Hier mal mein code, der meine aktuelle Vorgehensweise aufzeigt ...
Grüße
[code]
clear all
fs=50000;
T=1/fs;
L=5*fs;
t=(0:L-1)*T;
f_anreg=1000;
x=sin(2*pi()*f_anreg*t);
%plot(t,x)
Nf=8192;
Bloecke=L/Nf;
block_ch1(1,=x(1,1:Nf);
for n=1:30;
block_ch1(n+1,=x(1,(Nf*n)+1:(Nf*(n+1)));
end;
t_t=0:1/fs:(Nf-1)/fs;
plot(t_t,block_ch1(1,)
hw=hanning(Nf);
hw_scale=sqrt(sum(hw.^2)/length(hw));
for n=1:30;
blockxhw_ch1(n,=block_ch1(n,.*(hw./hw_scale)';
end;
%plot(t_t,blockxhw_ch1(:,)
df = fs/Nf;
f=(0(Nf)-1))*df;
fn = fs/2;
fneu=0:df:fn-1;
for n=1:30;
CH1(n,=fft(block_ch1(n,);
end;
%plot(f,CH1(:,)
for n=1:30;
CH1_abs(n,=abs(CH1(n,);
end;
%plot(f,CH1_abs(:,)
for n=1:Nf;
mitteln(:,n)=mean(CH1_abs(:,n));
end;
%semilogx(f,20*log10(mitteln)/2e-05)
fcheck=df:df:(fs/2);
for n=2:4095;
mitteln_neu(:,1:Nf/2)=mitteln(:,1:Nf/2);
mitteln_neu(:,n:Nf/2-1)=2*mitteln(:,n:Nf/2-1);
mitteln_neu(:,Nf/2)=mitteln(:,Nf/2);
end;
semilogx(fneu,20*log10(mitteln_neu)/2e-05)
[code]
|
|
|
Fourier |
Forum-Guru
|
|
Beiträge: 329
|
|
|
|
Anmeldedatum: 05.04.10
|
|
|
|
Wohnort: Karlsruhe
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 30.07.2010, 06:40
Titel:
|
|
Paar Anmerkungen:
die 2 schleifen :
kannst du zusammenfassen:
du sagtest du nimmt 30 Blöcke und den letzten schmeisst du weg,
in deinem Programm nimmst aber 31 (1 und dann 30) Blöcke was zu fehler führt: " matrix exceed dimension ". und zwar :
und zuletzt die mittelung geht auch einfacher mit:
was du mit mitteln_neu machen willst verstehe ich erstmal nicht.
PS: das nächte mal bitte mit Vorschau prüfen ob Code formatierung richtig war, und Smilies desaktivieren.
gruss
_________________
Ein schlechter General ist besser als zwei gute.
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|