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

[Schwingung] Maxima einer Schwingung zählen mit MATLAB

 

SR66
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 07.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2012, 11:05     Titel:
  Antworten mit Zitat      
Sorry, ich brauche natürlich auch die dazwischen liegenden Maxima der Schwingungen zwischen z.B. 100mm/s und 10mm/s. Wenn z.B. das letzte Maxima bei 8,5mm/s liegt, dann soll halt dies genommen werden. Jedoch immer das Maxima, ist klar. Ich versuchs heut mal mit ner if-Schleife, dass ich zumindest mal meinen Wertebereich eingeben kann. Aber wie komm ich nun auf die Anzahl der Maxima? Scheint unlösbar..
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: 27.07.2012, 11:22     Titel:
  Antworten mit Zitat      
Die Festlegung eines gewünschten Bereiches könnte so erfolgen...

Code:

% Amplituden-Bereich festlegen
% Begrenzung des Signals im Bereich sig_max und sig_min
sig_max = ...;
sig_min = ...;
idx1 = find(signal > sig_max,1,'last');
idx2 = find(signal > sig_min,1,'last');
% gewünschten Bereich herausnehmen
signal = signal(idx1:idx2);
T = T(idx1:idx2);
 


Danach kannst du den vorherigen Code auf signal anwenden. Die Anzahl der Maxima ergibt sich doch einfach aus length(maxima). Allerdings muss hier noch in der else Anweisung unter "Suche beendet", noch jeweils das letzte Element aus maxima und minima gelöscht werden. Ebenfalls stimmt der Algorithmus noch nicht ganz, in Bezug auf das erste und letzte Maximum, bei Verwendung des oberen Codes. Hier werden dann Punkte als Maximum genommen, die eigentlich keine sind. Der Algorithmus funktioniert momentan nur einwandfrei, wenn das Signal, wie das Testsignal bei 0 beginnt. Dies ist bei der Bereichsfestlegung ja aber dann nicht mehr der Fall. Da solltest du jetzt aber selber mal drüber nachdenken, wie man das Lösen kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
SR66
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 07.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2012, 21:08     Titel:
  Antworten mit Zitat      
Ich werd mein Bestes versuchen.

Vielen vielen Dank für deine Hilfe und Mühe! Kann dir gar nicht sagen, wie ich das schätze! Smile

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
SR66
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 07.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2012, 20:06     Titel:
  Antworten mit Zitat      
Hey Leute, ich nochmal.

Ich hab jetz bisschen recherchiert. Und da gibts ja auch ne spezielle MATLAB Funktion: findpeaks(Messdaten)

Leider hab ich hiermit auch Probleme, aber die Funktion wäre genau das, was ich bräuchte!

Bisher behandle ich mein Signal mit:
Code:

fid=fopen('Daten'); % Messsignal einlesen.
data=textscan(fid,'%f%f',51200*2,'headerlines',51207); % 1 Messsekunde entsprechen 51200 Messwerte. Einschwingzeit liegt bei 1 Sekunde: 51207 Messwerte überspringen.
t=data{1}; % Zeitvektor aus Signal.
v=data{2}; % Geschwindigkeitsvektor aus Signal (eigentliches Messsignal).
plot (t,v); % Verlauf v über t plotten.
[pks, locs]=findpeaks(v,'minpeakheight',0.02); % Peaks und deren Indizes finden, die eine Mindesthöhe von v=0.02 überschreiten.
 




Wenn ich nun das Ergebnis plotte, wird mir das v-Signal jedoch nicht über der Zeit ausgegeben sondern über der Anzahl der Messwerte. Wie kann ich das ändern?
Wie kann ich die Anzahl der Peaks berechnen? Ist das noch ein großer Aufwand?

Dann hätte ich alles was ich bräuchte:

1. Minimal- und Maximalwert des Signals
2. zugehörige Zeitdaten
3. Anzahl der Peaks

Kann man eventuell die Peaks in einer Tabelle ausgeben lassen, die mir den Signalpeak mit zugehöriger Zeit anzeigt?

Sorry DSP, das ich deinen MÜhe nicht weiter verfolgt habe. Ich habe bisschen gesucht und bin auf das findpeaks() gestossen und habe das erst mal weiter untersucht... bzw bin auf dem Weg dahin.

Mit freundlichen Grüßen

Hannes
Private Nachricht senden Benutzer-Profile anzeigen
 
SR66
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 07.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2012, 21:47     Titel:
  Antworten mit Zitat      
Ergänzung:

Ich bekomme nach dem Befehl
Code:
[pks, locs]=findpeaks(signal);
plot (locs, pks);

die ursprüngliche Funktion, nur sind die Peaks nun als Art Treppenfunktion dargestellt. Die Anzahl der Stufen zeigt mir die Anzahl der Peaks, was auch übereinstimmt mit dem ursprünglichen Signal. Jedoch, wie gesagt, nicht über der Zeit.

Mit
Code:

bekomme ich zwar die Anzahl der vermeintlichen Peaks, aber das sind viel zu viele, da die alle Werte einer Stufe gleich sind (siehe Anhang plot_signal.png).

Ich hoffe, ihr erkennt mein Problem und könnt mir Hilfe geben... Wie kann ich denn das Problem lösen? Embarassed

plot_signal.png
 Beschreibung:
Plot der Peaks. Die Anzahl der Stufen ist gleich der Anzahl der Peaks des Signals.

Download
 Dateiname:  plot_signal.png
 Dateigröße:  3.91 KB
 Heruntergeladen:  712 mal
plot_signal_1.png
 Beschreibung:
Plot der Peaks, abgeschnitten für kleinste Werte = 0.02 .

Download
 Dateiname:  plot_signal_1.png
 Dateigröße:  3.63 KB
 Heruntergeladen:  722 mal
plot_signal_urspr.png
 Beschreibung:
Ursprüngliches Signal laut Messdaten.

Download
 Dateiname:  plot_signal_urspr.png
 Dateigröße:  4.48 KB
 Heruntergeladen:  727 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
SR66
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 07.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2012, 18:18     Titel:
  Antworten mit Zitat      
So, hab ne Lösung gefunden, die mir sogar mehr bringt als benötigt!

Code:
% Folgendes MATLAB-Script dient zur Erfassung der Anzahl der Maxima,
% Amplituden sowie deren zeitliches Auftreten einer Schwingung;

% Zunaechst wird die Messdatei (im .txt-Format) mittels "File/Import
% Data..." importiert. Dabei ist darauf zu achten, dass die Kopfzeile
% (üblicherweise die ersten 5 Zeilen in der Datei) entfernt wird, so dass
% eine Datei ausschliesslich mit Zahlenwertepaaren vorliegt;

% Üblicherweise wird das Signal anschlieflend mit dem Namen "data" im
% Workspace von MATLAB angezeigt. In diesen Script wird die Messdatei
% jedoch mit "Signal" bezeichnet. Damit MATLAB die richtigen Messdaten
% einliest und verarbeitet ist es deshalb notwendig, die Messdatei mittels
% "Signal=data;" dem Namen "Signal" zuzuweisen;

pks=findpeaks(Signal(:,1), Signal(:,2), 0, 0.0078418, 50, 50, 3); % Lokalisiert die Maxima der vorher eingelesenen Messdaten;
t=Signal(1:1:262000, 1); % Zeitvektor wird aus den Signaldaten (262000 Wertepaare) erfasst;
v=Signal(1:1:262000, 2); % Amplitudenvektor wird aus den Signaldaten erfasst;
plot(t,v); % Graphische Ausgabe des Schwingungsverlaufs;
hold on;
box off;
axis([0 5 -0.3 0.3]);
xlabel('Zeit in s');
ylabel('Amplitude in mm/s');
title('Schwingungsverlauf');
hold on;
disp('          Peak #     Zeit      Amplitude '); % Spaltenaufteilung des Anzahl der Maxima, dem zeitlichen Auftreten und der zugehörigen Amplitude
hold on;
disp (pks);


Bedingung hierfür ist, das angehängte findpeaks.m geladen und in Matlab eingelesen ist.

Dies war übrigens das fehlende Puzzleteil, das mir zur Lösung noch gefehlt hat.

Danke an alle Helfer, speziell DSP!

Grüße,
Hannes

findpeaks.m
 Beschreibung:

Download
 Dateiname:  findpeaks.m
 Dateigröße:  5.93 KB
 Heruntergeladen:  383 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.