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 Plot aus Matrix

 

toooooobi
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 03.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2015, 20:10     Titel: FFT Plot aus Matrix
  Antworten mit Zitat      
Hallo liebe Leute,

ich habe Echtzeitdaten aufgezeichnet und in einer Matrix gespeichert, wobei in der ersten Zeile die x-Werte stehen und in der 2. Zeile die y-Werte der Messung. Plot haut ohne weiteres hin.
Wie kann ich aus der Matrix mit Berücksichtigung der x-Werte eine FFT Analyse erstellen?

Bin ein ziemlicher Matlab Neuling.
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.08.2015, 20:30     Titel:
  Antworten mit Zitat      
Hallo,

dieses Skript bietet alles was du benötigst für die Darstellung des Amplitudenspektrums: http://www.gomatlab.de/fft-umfassendes-beispiel-t777.html
Private Nachricht senden Benutzer-Profile anzeigen
 
toooooobi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 03.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2015, 20:40     Titel:
  Antworten mit Zitat      
Danke DSP, ich hab den Thread schon gefunden, steige aber da nicht ganz dahinter.
Bin relativ neu in Matlab und suche eine einfache Möglichkeit, meine Messwerte darzustellen.

Zeile 1 x: 0,0499987585228610 0,0509988926023652 0,0519986956212506 usw.
Zeile 2 y: -0,0304870910339660 0 -0,0609741820679321 -0,0914612731018981 usw.

Was ist da die Abtastfrequenz? Kann mir jemand einfach erklären, wie ich das ganze auf die Frequenz umrechne? Das ganze muss ja mit der x-Achse zusammenstimmen, einfach Syntax spektrum=fft(y) bringt mir ja nichts, da es dann die Frequenz in Hz nicht kennt?
Ich steig da nicht dahinter...

Ich möchte aus den Daten einen Plot mit x (Frequenz in Hz) und y (Amplitude).

Die Matrix hat eine Dimension von 2x87235.

Danke im Voraus!!!! Crying or Very sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Maxx_BMT
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 75
Anmeldedatum: 09.10.13
Wohnort: Ilmenau
Version: R2011a, R2016a
     Beitrag Verfasst am: 06.08.2015, 08:17     Titel:
  Antworten mit Zitat      
Hallo,

dazu wäre es jetzt mal interessant zu wissen, was das für Werte sind. Was sagen deine x und was sagen deine y Werte?

Ohne Zeitstempel oder ohne Wissen über deine Aufzeichnung wird es schwierig eine Abtastfrequenz herauszubekommen. Schau dir mal die Fourertransformation genau an und dann schaue was du für Größen brauchst. Das Problem ist, dass du für eine Transformation die Größe t brauchst, denn was nützen dir Werte, wenn du nicht weißt wann sie aufgenommen wurden. Der zweite Wert deiner Aufzeichnung kann nach einer Stunde oder nach einer Sekunde augenommen worden sein und genau das hat Einfluss auf die aufgenommen Frequenzen bzw. natürlich dann auch auf deine Abtastfrequenz.

Nehmen wir an die x Werte wären deine Abtastzeitpunkte, kannst durch eine einfache Differenzbildung herausfinden wie der zeitliche Abstand zwischen zwei Abtastungen ist und das Reziprok davon ist dann deine Abtastfrequenz. Aber ich denke, dass ist für dich eher weniger hilfreich?

Was meinst du genau mit auf Frequenz umrechnen? Das ist doch genau das was die Fouriertransformation macht, sie transformiert deine Werte vom Zeit in den Frequenzbereich.

Sag bescheid wenn du noch Hilfe brauchst Smile

Liebe Grüße
Maxx_BMT
_________________

Mathematik ist ein geistreicher Luxus. - Friedrich der Große
Private Nachricht senden Benutzer-Profile anzeigen
 
toooooobi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 03.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2015, 08:29     Titel:
  Antworten mit Zitat      
Hi Maxx,
danke für deine Antwort.

In der ersten Zeile stehen die Zeitwerte mit konstantem Abstand. Insgesamt 87235 Werte und in der zweiten Zeile die Amplitude eines Sensors. Auch 87235.

Ich möchte damit die Resonanzfrequenz herausfinden, welche sich um 3Hz bewegen sollte.
Ich kommen mit dem C Code nicht zurecht. Bzw scheiterts an den Variablendef. am Anfang, die müssen ja auf meine Werte angepasst werden?
Private Nachricht senden Benutzer-Profile anzeigen
 
Maxx_BMT
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 75
Anmeldedatum: 09.10.13
Wohnort: Ilmenau
Version: R2011a, R2016a
     Beitrag Verfasst am: 06.08.2015, 10:49     Titel:
  Antworten mit Zitat      
Kannst du die Daten vielleicht einfach mal hochladen, damit ich mir diese mal anschauen kann?

Liebe Grüße
Maxx_BMT
_________________

Mathematik ist ein geistreicher Luxus. - Friedrich der Große
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: 06.08.2015, 19:46     Titel:
  Antworten mit Zitat      
Die Abtastfrequenz ergibt sich aus deinem Zeitvektor x:

Code:

Ts = x(2)-x(1); % Abtastrate
Fs = 1/Ts; % Abtastfrequenz
 


Das Spektrum erzeugst du nun so:

Code:

Ts = x(2)-x(1); % Abtastrate
Fs = 1/Ts; % Abtastfrequenz in Hz
nfft = length(y); %

[mag, mag_dB, fv] = FFT_betragsspektrum( y, nfft, Fs, 1, 0) ; % Funktionsaufruf

plot(fv,mag_dB,'b'); % Logarithmische Skalierung der Y_Ache in dB
xlabel('Frequenz in Hz');
ylabel('Amplitude dB');
 


Darin wird folgende Funktion verwendet, welche du als m-file mit genau dem Namen der Funktion abspeichert musst.

Code:

function [mag, mag_dB, fv] = FFT_betragsspektrum( signal, nfft, fa, window, scale)
% Input:
% Signal im Zeitbereich
% nfft = Anzahl Messwerte für fft
% wenn nfft > length(sig) -> fft(sig,nfft) führt Zeropadding durch
% fa = Abtastfreq.
% window: Fensterung mit Hann window
% scale: 0 = keine Impulsantwort als Eingang, 1 = Impulsantwort
% Output:
% Magnitude des Spektrums linear und dB skaliert
% Frequenzvektor fv in [Hz] von 0...fa/2

% un-,gerade Anzahl Messwerte?
if mod(nfft,2) == 0;
    k = (nfft/2) + 1;
else
    nfft = nfft + 1;
    k = (nfft/2) + 1;
end

fn = fa/2; % Nyquistfreq.
df = fa/nfft; % Frequenzauflösung des Spektrums
% Frequenzvektor: Darstellung bis Nyquistfreq.
fv = 0: df : fn;

sig = signal(:);

% Fensterung
if window == 1
    win = hann(nfft)'; % Hanning Fensterfunktion
    sig_win = sig .* win * nfft / sum(win); % Fensterung mit Amplitudenkorrektur
    sig = sig_win;
end

% Signal transformieren
Fy = fft(sig,nfft);
 
%   Betrag - nur positives Freq.spektrum
if scale == 0
    Fy_pos0 = abs(Fy(1:k));

    %   Skalierung  
    mag = [Fy_pos0(1)/nfft ;Fy_pos0(2:k-1)/(nfft/2);Fy_pos0(k)/nfft];
else % nicht durch nfft teilen bei Impulsantwort
    mag = abs(Fy(1:k));
end

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


Allerdings wird ein Dezimalpunkt in Matlab durch einen Punkt und nicht durch ein Komma dargestellt! Nutze sonst die Importapp von Matlab um die Daten richtig einzulesen und zu formatieren.

Zeile 1 x: 0,0499987585228610 0,0509988926023652 0,0519986956212506 usw.


x = [ 0.0499987585228610 0.0509988926023652 0.051998695621250 ...]
Private Nachricht senden Benutzer-Profile anzeigen
 
tooooooobi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2015, 22:04     Titel: Danke
  Antworten mit Zitat      
Danke danke danke DSP, hat mir sehr geholfen. Verstehs jetzt auch Smile
 
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.