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..
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.
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.
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.
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?
plot_signal.png
Beschreibung:
Plot der Peaks. Die Anzahl der Stufen ist gleich der Anzahl der Peaks des Signals.
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([05-0.30.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);
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
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.