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

 

clem35
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 23.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.01.2008, 12:08     Titel: fft
  Antworten mit Zitat      
hi leute

hat schon wer mal eine vernünftige fft in matlab gmacht?

so mit allem drum und dran

wie zum beispiel fft, abs

wie funktioniert das mit der abtastfrequenz und den messwerten die ich habe? wo muss ich die berücksichtigen?

lg cle
Private Nachricht senden Benutzer-Profile anzeigen


Nils
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.01.2008, 14:34     Titel: Komplettes Beispiel
  Antworten mit Zitat      
Hallo,

ich habe dir hier mal ein komplettes Beispiel. Ich hoffe du kommst damit klar.

Code:

% Zeitbereich
% ----------------------------------

fa = 8000; % Abtastfrequenz
fn = fa/2; % Nyquistfrequenz
N = 1024; % gewünschte FFT-Länge (N=2^x, sonst wird der DFT-Algorithmus verwendet!)
df = fa/N; % Frequenzauflösung
% Erzeugung eines Datensatzes mit N Abtastwerten
% ----------------------------------------------
t = 0 : 1/fa : (N-1)/fa; % x-Vektor
% Frequenzvorgabe in Hz als ganzzahlig Vielfaches der Frequenzauflösung der DFT/FFT:
f1 = df*100; % bei fa = 8000 Hz und N = 1024 beträgt df = 7,8125 Hz und
% f1 damit 781,25 Hz
 f1 = 784;
 f1 = df;
 phase = pi/2;

a1 = 1; % Amplitudenvorgabe
y = a1*sin(2*pi*f1*t); % y-Vektor
y = [y(1:N/2) zeros(1, N/2)];
% Graphische Darstellung
% ----------------------
% max. Amplitude zur Skalierung der graphischen Darstellung feststellen:
max_y = max(abs(y))*1.1;
fig = figure(1);
plot(y)
axis([0 N -max_y max_y])
title('Datensatz')
ylabel('Amplitude')
xlabel('N Stützstellen')
grid


% Frequenzbereich
% ----------------------------------

% Berechnung der FFT
% ------------------
H = fft(y, N);
% Berechnung des Amplitudengangs aus dem komplexen Frequenzvektor H:
amplH = abs(H);
% Amplitudenskalierung (Normierung auf N) und verschieben der Elemente des
% Amplitudenvektors, so dass die Darstellung des Amplitudengangs von -fn...0...fn
% erfolgen kann:
amplitudengang = fftshift(amplH/N);
% Graphische Darstellung
% ----------------------
% Frequenzvektoren (werden bei der graphischen Darstellung benötigt):
x_fn = 0 : df : fn-df;
x_fa = 0 : df : fa-df;
% max. Amplitude zur Skalierung der graphischen Darstellung feststellen:
%a = max([a1, a2, a3, a4, a5]); % wird später benötigt
a = a1;
fig = figure(fig+1);
stem(x_fa-fn, amplitudengang, 'b.-')
axis([-fn fn 0 a/2*1.1])
title('Amplitudengang')
ylabel('Amplitude')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid

% Ausgabe in dB
% ------------------
fig = figure(fig+1);
plot(x_fa-fn, 20*log10(amplitudengang))
%axis([-fn fn -100 20*log10(a/2)+3])
axis([-fn fn -100 3])
title('Amplitudengang')
ylabel('Amplitude in dB')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid

% Darstellung des interessierenden Frequenzbereichs des
% Amplitudengangs (0...fn) und
% daran angepasste Amplitudenskalierung (Normierung auf N/2):
amplitudengang = [amplH(1)/N amplH(2:N/2)/(N/2)]; % DC-Bin auf N normieren!
fig = figure(fig+1);
stem(x_fn, amplitudengang, 'b.-')
axis([0 fn 0 a*1.1])
title('Amplitudengang')
ylabel('Amplitude')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid

% Ausgabe in dB
% ------------------
fig = figure(fig+1);
plot(x_fn, 20*log10(amplitudengang))
axis([0 fn -100 20*log10(a)+3])
title('Amplitudengang')
ylabel('Amplitude in dB')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid
 


Gruß Nils
Private Nachricht senden Benutzer-Profile anzeigen
 
clem35
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 23.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.01.2008, 16:45     Titel:
  Antworten mit Zitat      
danke,

nach sowas ähnlichem habe ich die ganze zeit gesucht

grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 31.01.2008, 10:51     Titel:
  Antworten mit Zitat      
Hallo Nils,

das ist ja ein tolles Beispiel. Hättest Du Lust, das auch in die Skript-Ecke zu stellen? (Kann ich auch machen, wenn Du zustimmst.)


Herzliche Grüße
Bijick

-------------------------------------------------------------------------------
Danke!
_________________

>> why

Zuletzt bearbeitet von Bijick am 31.01.2008, 13:41, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Nils
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2008, 13:41     Titel: Ergänztes Beispiel in Skriptecke
  Antworten mit Zitat      
Hallo,

ich habe das Beispiel noch um eine Fenterung ergänzt. Es ist jetzt in der Skriptecke zu finden

Gruß
Nils
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2009, 15:32     Titel: Vielen Dank
  Antworten mit Zitat      
vielen Dank für die Anregungen - ich habe das Script auch gleich als Gerüst weiterverwendet
 
Nati

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2010, 07:59     Titel:
  Antworten mit Zitat      
Bei der Ausgabe in des Pegels in [dB] fehlt der Referenzwert von 2e5 Pa
 
derbene

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.11.2011, 11:09     Titel:
  Antworten mit Zitat      
Hi!
Funktioniert das ganze auch mit gegebenen Werten? Habe folgendes "Problem":

Ein Datenlogger zeichnet mir Beschleunigung (in allen drei Achsen) über die Zeit auf - mit einem festen Intervall von 0,5ms. Diese fasst er zu sog. Events zusammen, die aber unterschiedlich lang sind (min. 30ms, max. 900ms - mit 30ms-Intervallen dazwischen).
So habe ich z.B. ein Event, das 90ms insgesamt dauert und dazu je 180 gemessene Werte der Beschleunigung in g für X, Y und Z Achse.
Kann ich daraus jetzt mit möglichst einfachen Mitteln die Frequenzen ermitteln? Bisher scheitert es ja schon daran, dass Excel bei einer fft Datensätze mit einer Anzahl einer 2er-Potenz fordert, was bei 180 ja schon nicht geht - oder stehe ich bereits hier auf dem Schlauch?
Ein zweiter Schritt wäre dann, eine Art Analyseverfahren zu erstellen, mit dem man dann mehrere (oder viele) Events hinsichtlich bestimmter Merkmale (Frequenz oder max. g-Ausschlag) filtern kann.
Ist sowas mit Excel möglich oder braucht es dazu andere Programme?

Vielen Dank vorab für erste Hilfen!

Zudem möchte ich das ganze mit einer freien Software wie freemat machen.

Geht das?
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 29.11.2011, 13:11     Titel:
  Antworten mit Zitat      
Hallo,

dir ist schon klar, dass dies hier ein Forum vor allem für Matlab ist Wink

Die FFT kann man selbstverständlich statt mit Testsignalen auch mit eigenen Messwerten durchführen. Ist die Anzahl der Messwerte keine 2er Potenz, gibt es 2 Möglichkeiten:

- Zeropadding: Die Signallänge wird auf die nächste 2er Potenz durch Anhängen von Nullen am Ende erweitert.

- eine langsamere DFT durchführen, wobei hier die Anzahl der Messwerte beliebig ist
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.