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-Analyse Messdaten

 

TheFinger
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 14.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2013, 13:13     Titel: FFT-Analyse Messdaten
  Antworten mit Zitat      
Hallo zusammen,

ich habe Messdaten (Spalte 1 ist Zeit, Spalte 2 ist Geschwindigkeit). Der Messwert ist nicht konstant über die Zeit und ich möchte raus finden ob es sich um Rauschen, Schwankung oder Turbulenz oder was auch immer handelt. Hierfür dachte ich an FFT, was in Matlab eingebaut ist.
Leider verstehe ich nicht wie ich daraus folgende Daten extrahiern kann:
- im Signal vorkommende Frenquenzen.
- einzelne Amplitude zu diesen Frequenzen. bzw. wie oft die Frequenzen auftreten.

Ich habe dazu das geschrieben:

Code:

fs = 100;                    % Sample frequency (Hz)
fn = fs/2;                   % Nyquistfrequenz
t=Geschw(:,1);           % Time vector
x=u;
m =length(x);             % Window length
n = pow2(nextpow2(m)-1);       % gewünschte FFT-Länge (n=2^x,)
y=fft(x,n);                
 


Eine Beispieldatei meine Messdaten habe ich angehängt.
Ich wäre sehr dankbar, wenn jemand mir helfen würde zu verstehen wie das funktioniert und das zu progammieren

Viele Grüße
Miriam

Daten_.xls
 Beschreibung:

Download
 Dateiname:  Daten_.xls
 Dateigröße:  585 KB
 Heruntergeladen:  870 mal
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



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

es gibt hier unzählige Beiträge zu diesem Thema, wo dir mit Sicherheit schon ein fast fertiger Code dazu geliefert wird. Ich empfehle dir erstmal dieses Skript hier:

http://www.gomatlab.de/fft-umfassendes-beispiel-t777.html

Damit kannst du dir erstmal das Frequenzspektrum richtig darstellen. Außerdem musst du noch deine Daten aus dem xls file einlesen um sie in Matlab verwenden zu können. Auch dazu gibt es sehr viele Beträge, u.a. mit dem Befehl
Code:


Als letztes kommt dann die Analyse deines Frequenzspektrums...aber dazu solltest du erst Fragen stellen, wenn du einen vernüftigen Plot deines Frequenzspektrums hier angehängt hast. Das macht die Hilfe deutlich einfacher.
Private Nachricht senden Benutzer-Profile anzeigen
 
TheFinger
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 14.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2013, 14:08     Titel:
  Antworten mit Zitat      
Hallo DSP,

es ist ein Missverständnis passiert. Ich kann meine Daten mit xlsread schon importieren und darstellen. Es hackt bei mir nur an FFt. Ich habe den link schon vor meinem Beitrag gesehen und gelesen. Aber ich habe trotzdem nicht verstanden wie ich das auf meinem Fall anwende. Ich verstehe nicht wie ich aus der fft-Funktion von Matlab die Frequenzen, die in meinem Signal vohanden sind und deren Häufigkeit extrahieren kann.

trotdem vielen Dank!

Test_FFT.m
 Beschreibung:

Download
 Dateiname:  Test_FFT.m
 Dateigröße:  1.12 KB
 Heruntergeladen:  745 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 31.01.2013, 14:25     Titel:
  Antworten mit Zitat      
Ok...aber in deinem Code fehlt doch vollkommen die Darstellung des Spektrums. Das ist ganz klar in den Skript beschrieben.

Code:

fs = 100;                    % Sample frequency (Hz)
fn = fs/2;                   % Nyquistfrequenz
t=Geschw(:,1);           % Time vector
x=u;
m =length(x);             % Window length
n = pow2(nextpow2(m)-1);       % gewünschte FFT-Länge (n=2^x,)
y=fft(x,n);
 


Code:

df = fs/n; % diskrete Frequenzschrittweite = Auflösung des Spektrums
f = 0:df:fn; % Frequenzvektor in Hz nur positiver Freq.-bereich

% Nun nur den positiven Frequenzbereich verwenden, Betrag bilden und Magnitude richtig skalieren
k = (n/2) + 1;

%   Betrag - nur positives Freq.spektrum  
Fy_pos0 = abs(y(1:k));
 
%   Skalierung  
mag = [Fy_pos0(1)/n ;Fy_pos0(2:k-1)/(n/2);Fy_pos0(k)/n];

% Umrechnung in dB falls erwünscht
mag_dB = 20*log10(mag + eps); % eps = kleine Konstante zur Vermeidung von log(0)
 


Hiermit hast du nun den Frequenzvektor, wobei die FFT zu jeder diskreten Frequenz in f den jeweiligen Real- und Imaginärteil berechnet. Daraus bildet man den Betrag = Magnitude. Nun könntest du mag der Größe nach sortieren:

Code:

[wert, index] = sort(mag,'descend'); % Amplitude sortiert, beginnend mit der Höchsten
freq_sort = f(index); % hier steht nun in z.B. freq_sort(1) die Frequenz, welche die höchste Amplitude hat
 


Wenn das nicht passt, musst du mal genauer beschreiben, was du analysieren möchtest. Wie gesagt, ein Bild des Frequenzspektrums wäre sehr hilfreich. Ganz einfach mit...

Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
TheFinger
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 14.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2013, 09:28     Titel:
  Antworten mit Zitat      
das hat geholfen! vielen Dank! Noch eine Frage wie bestimmt man die Häufigkeit mit der die Frequenzen auftreten. Die mAmplitude gibt ja im Grunde genommen nur wie stark die Frenquenz auftritt. Wie bekomme ich die Häufigeit einer Frequenz in meinem Signal?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 05.02.2013, 09:57     Titel:
  Antworten mit Zitat      
Was meinst du mit Häufigkeit genau? Jede Frequenz tritt in dem Spektrum nur 1 mal auf. Sollten in deinem Signal z.B. mehrere Sinus der gleichen Frequenz enthalten sein, addiert sich deren Amplitude.

Code:

% siehe Beispiel
T=0:0.001:1;
f = 100; % Frequenz des Sinus = 100 Hz
x1 = sin(2*pi*f * T);
x2 = 10*sin(2*pi*f * T);
y = x1 + x2; % beide Sinus werden addiert
plot(T,x1,T,y);
 


y stellt die FFT dann dar...sie kann hier aber nicht unterscheiden, ob das aus zwei Signalen gleicher Frequenz zusammengesetzt worden ist. Wie ich schon sagt...jede diskrete Frequenz aus dem Vektor f wird untersucht und kommt dann auch nur einmal vor. In so fern ist die doch für jede Frequenz gleich, bzw. wenn die Amplitude = 0 ist, kommt die Frequenz in dem Signal nicht vor.
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.