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

Frequenz diskreter Messpunkte berechnen (mittels FFT)

 

Peter159

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2014, 20:24     Titel: Frequenz diskreter Messpunkte berechnen (mittels FFT)
  Antworten mit Zitat      
Hallo,
ich habe nachfolgendes Problem bereits in das Octave-Forum gestellt. Da sich dort aber keine Antwort finden lässt, möchte ich gerne die Matlab-User um Rat fragen. Lieber Admin, ich hoffe das geht in Ordnung? Embarassed Embarassed Embarassed

Folgendes Problem: ich habe eine Messreihe von 1024 (diskreten) Punkten und möchte aus dieser eine Frequenz berechnen. Ich kann mich noch schwach daran erinnern, dass dies mittels fft möglich sein sollte, bin aber auf diesem Gebiet eher Ahnungslos und benötige darum eure Hilfe. Das "umfassende Beispiel" habe ich mir schon angesehen, doch leider vertsehe ich nur -Bahnhof- Embarassed

So wie ich das verstehe, erzeugt mir die fft aus den diskreten Punkten eine Funktionsreihe aus Sin und Cos. Und daraus sollte irgendwie die Frequenz berechenbar sein. Aber wie?

Folgenden Code habe ich:

Code:
pkg load signal

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

fa = 5000; % Abtastfrequenz
fn = fa/2; % Nyquistfrequenz: halbe Abtastfrequenz
N = 1024; % gewünschte FFT-Länge
df = fa/N; % Frequenzauflösung
a1 = 1; % Amplitudenvorgabe



w = load("daten.txt"); #Datei einlesen
y = detrend(w(:,3)); #Signal


% 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
 


Wie ihr im 2.Plot sehen könnt, kann ich daraus keine (eindeutige) Frequenz ablesen. Warum?
Der ertse Plot zeigt die Messdaten. Da diese alle positiv sind, habe ich sie mit 'detrend' eingelesen. Mach das Sinn?

Ich hoffe ihr könnt mir weiterhelfen. Vielen Dank...


Viele Grüße,
der Peter

Unbenannt.png
 Beschreibung:
Alle 6 Plots aus dem "umfassenden Beispiel". Plot1: Original Messdaten, Plot2: fft

Download
 Dateiname:  Unbenannt.png
 Dateigröße:  122.29 KB
 Heruntergeladen:  322 mal


SkyRazor
Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 07.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2014, 17:18     Titel:
  Antworten mit Zitat      
Hallo,

kannst du die Dateien posten?
die folgende linke könnte dir helfen.

http://www.gomatlab.de/fft-eines-sinus-t33932.html
http://www.gomatlab.de/viewtopic,p,135552.html#135552

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Peter159

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2014, 11:55     Titel:
  Antworten mit Zitat      
Hallo,
hier die Messdaten.

Danke Smile

daten.txt
 Beschreibung:
Messdaten in Spalte 3

Download
 Dateiname:  daten.txt
 Dateigröße:  13.37 KB
 Heruntergeladen:  384 mal
 
SkyRazor
Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 07.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2014, 13:01     Titel:
  Antworten mit Zitat      
Hallo,

der folgender Code könnte dir helfen.

Code:
Fs = 5000;
L = 1024;
T = 1/Fs;
t = (0:L-1)*T;
w = load('daten.txt');
y = w(:,3);
Y = fft(y)/L;
plot(Fs/2*linspace(0,1,L/2+1),2*abs(Y(1:L/2+1)))


Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Peter159

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2014, 13:09     Titel:
  Antworten mit Zitat      
Danke...allerdings bekomme ich so eine Frequenz von 0 Hz.
Erwarten würde ich eigentlich etwas um die 1kHz Crying or Very sad

Woran liegt das?
 
SkyRazor
Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 07.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2014, 13:24     Titel:
  Antworten mit Zitat      
d.h. es gibt ein größer dc Komponent und viele kleine ac komponente, mit plot(w(:,3)) ist es besser zu sehen.
da die Dateien ganz schlecht aussehen, wenn du fft einmal guck möchtest, kannst du den folgender Code testen.

Code:
Fs = 280*4;
L = 56000/4;
T = 1/Fs;
t = (0:L-1)*T;
y = sin(2*pi*280*t) + sin(2*pi*50*t)+ randn(size(t));
Y = fft(y)/L;
plot(Fs/2*linspace(0,1,L/2+1),2*abs(Y(1:L/2+1)))


Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Peter159

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2014, 13:45     Titel:
  Antworten mit Zitat      
Darum habe ich in meinem Beispiel auch
Code:
detrend(w(:,3))
genutzt. Siehe Plot im Anhang!!

Damit bekomme ich allerdings viele Frequenzen...zu viele Sad

Code:

fa = 5000;
fn = fa/2;
N = 1024;
df = fa/N;
a1 = 1;

w = load("daten.txt");
y = detrend(w(:,3));           #HIER

H = fft(y, N);
amplH = abs(H);
amplitudengang = fftshift(amplH/N);

x_fn = 0 : df : fn-df;
x_fa = 0 : df : fa-df;
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
 


detrend.png
 Beschreibung:
Daten bearbeitet mit detrend(w(:,3))

Download
 Dateiname:  detrend.png
 Dateigröße:  25.4 KB
 Heruntergeladen:  280 mal
 
SkyRazor
Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 07.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2014, 14:29     Titel:
  Antworten mit Zitat      
die Funktion detrend hat einfach die konstant offset gelöscht, plot ohne DC Komponent hat gleiche Ergebnisse.

Code:
y = w(:,3);
Y = fft(y)/L;
plot(Fs/2*linspace(0,1,L/2+1),[0;2*abs(Y(2:L/2+1))],'b*')
hold on
y = detrend(w(:,3));
Y = fft(y)/L;
plot(Fs/2*linspace(0,1,L/2+1),2*abs(Y(1:L/2+1)),'r-');


woher kommen die Dateien, bist du sicher, dass eine Spitze von 1 kHz darin ist?
Private Nachricht senden Benutzer-Profile anzeigen
 
Peter159

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2014, 18:04     Titel:
  Antworten mit Zitat      
Die Daten stammen aus einem (Zeitlupen-)Video einer pulsierenden Flamme. Es wurde die Fläche der Flamme in jedem Einzelbild berechnet und in der Tabelle in Spalte 3 abgelegt. Ich bin mir nicht sicher mit den 1kHz aber die Vermutung liegt nahe.

Kann es sein, dass ich einfach mehrere Frequenzen als Ergebnis habe? Seht euch bitte den Plot im Anhang an. Ich würde aus dem rechten Plot (links sind die Messdaten) ablesen, dass ein "Frequenzband" zwischen 0 Hz und 1 kHz liegt. Also pulsiert die Flamme mit 0Hz bis 1kHz??? Kann das Sinn ergeben Question

2Plots.png
 Beschreibung:
links Messdaten, rechts FFT

Download
 Dateiname:  2Plots.png
 Dateigröße:  51.56 KB
 Heruntergeladen:  301 mal
 
SkyRazor
Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 07.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2014, 18:28     Titel:
  Antworten mit Zitat      
also, dann kann man das FFT Bild erklären.

für ganz viele Signale auf der Welt, spielen die Niederfrequenz Rauschen eine wichtige rolle, deshalb die Ergebnisse sehen noch gut aus. Es muss so sein.

warum machst du die fft für solche Signale? Das macht kein Sinn, gibt es besondere Gründe dafür?
Private Nachricht senden Benutzer-Profile anzeigen
 
Peter159

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2014, 12:23     Titel:
  Antworten mit Zitat      
Ich habe leider von dieser Thematik wenig Ahnung. Mir wurde nahegelgt, dass ich doch die Frequenz des Auf- und Abbauens der Flamme berechnen kann. Die FFT war meiner Meinung nach das probate Mittel dafür. Irgendwie hatte ich die Hoffnung das ich EINEN Wert erhalte, der quasi die gemittelte Frequenz des Flackerns wiedergibt. Confused
 
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 - 2025 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.