WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

FFT Anwendung und Funktion

 

Hansi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2010, 12:36     Titel: FFT Anwendung und Funktion
  Antworten mit Zitat      
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

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 29.07.2010, 13:53     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Hansi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2010, 14:06     Titel:
  Antworten mit Zitat      
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

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 29.07.2010, 14:14     Titel:
  Antworten mit Zitat      
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 Wink

gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
Hansi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2010, 14:19     Titel:
  Antworten mit Zitat      
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

Forum-Newbie


Beiträge: 6
Anmeldedatum: 27.07.10
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 29.07.2010, 14:28     Titel:
  Antworten mit Zitat      
Wie Fourier schon sagte kannst du ruhigen Gewissens alles auf einmal bearbeiten lassen.

OT: Hat der Prof. nicht gerade Urlaub???
Private Nachricht senden Benutzer-Profile anzeigen
 
_Fourier

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2010, 14:42     Titel: a
  Antworten mit Zitat      
er checkt seine emails regelmässig.
ausserdem habe ich seine private Email Smile
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 29.07.2010, 16:28     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
flmi
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 27.07.10
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 29.07.2010, 17:00     Titel:
  Antworten mit Zitat      
@ 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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 29.07.2010, 17:13     Titel:
  Antworten mit Zitat      
@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.
Private Nachricht senden Benutzer-Profile anzeigen
 
flmi
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 27.07.10
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 29.07.2010, 17:25     Titel:
  Antworten mit Zitat      
Stimmt natürlich Embarassed
Ist mir schleierhaft was ich manchmal rechne, oder wie...

TO - Thread Opener
OT - Off Topic

Dann sag mal was/wer H. ist!?
Private Nachricht senden Benutzer-Profile anzeigen
 
Hansi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2010, 20:26     Titel:
  Antworten mit Zitat      
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: ---
     Beitrag Verfasst am: 29.07.2010, 20:53     Titel:
  Antworten mit Zitat      
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: ---
     Beitrag Verfasst am: 30.07.2010, 06:01     Titel:
  Antworten mit Zitat      
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,Smile=x(1,1:Nf);

for n=1:30;
block_ch1(n+1,Smile=x(1,(Nf*n)+1:(Nf*(n+1)));
end;

t_t=0:1/fs:(Nf-1)/fs;

plot(t_t,block_ch1(1,Smile)

hw=hanning(Nf);

hw_scale=sqrt(sum(hw.^2)/length(hw));

for n=1:30;
blockxhw_ch1(n,Smile=block_ch1(n,Smile.*(hw./hw_scale)';
end;

%plot(t_t,blockxhw_ch1(:,Smile)

df = fs/Nf;
f=(0Sad(Nf)-1))*df;
fn = fs/2;
fneu=0:df:fn-1;

for n=1:30;
CH1(n,Smile=fft(block_ch1(n,Smile);
end;

%plot(f,CH1(:,Smile)

for n=1:30;
CH1_abs(n,Smile=abs(CH1(n,Smile);
end;

%plot(f,CH1_abs(:,Smile)

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

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 30.07.2010, 06:40     Titel:
  Antworten mit Zitat      
Paar Anmerkungen:

die 2 schleifen :

Code:

for n=1:30
CH1(n,:)=fft(block_ch1(n,:));
end

Code:

for n=1:30
CH1_abs(n,:)=abs(CH1(n,:));
end
 


kannst du zusammenfassen:
Code:

for n=1:30;
    CH1_abs(n,:)=abs(fft(block_ch1(n,:)));
end
 


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 :
Code:

block_ch1(1,:)=x(1:Nf);

for n=1:29
    block_ch1(n+1,:)=x((Nf*n)+1:(Nf*(n+1)));
end


und zuletzt die mittelung geht auch einfacher mit:
Code:

mitteln=mean(CH1_abs);


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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.