Verfasst am: 10.09.2015, 14:27
Titel: Abstand vom Anstiegspunkt bis zum Maximum eines Messignals
Hallo Liebe Community,
ich schreibe gerade an meiner Bachelorarbeit und habe folgendes Problem:
Ich habe ein Messsignal, aus welchem ich mehrere Zeitabstände herauslesen muss.
Und zwar muss ich die Zeit bestimmen von dem Punkt aus, an dem meine Messreihe beginnt zu steigen bis zum Maximum (siehe Abb. roter Verlauf).
Und in dieser Messreihe habe ich 22 Lastzyklen, in denen dieser Zeitabstand herausgefiltert bzw. ermittelt werden muss.
Mir fällt leider nicht viel ein, was man hierfür machen kann.
Meine Idee wäre es, eine Matrix zu ermitteln, die jeweils den Anfangspunkt und den Endpunkt enthält, so könnte ich dann ggf. den Zeitabstand berechnen, es sei denn es gibt eine bessere Methode dies zu tun.
Nach mehreren Versuchen habe ich folgenden Code geschrieben:
% S Punkt macht keinen Sinn... % M3_inverted = -M3; % [~,locs_Swave] = findpeaks(M3_inverted,'MinPeakHeight',-5,'MinPeakDistance',2.8000e+04);
figure hold on
plot(t, M3);
plot(locs_Rwave,M3(locs_Rwave),'rv','MarkerFaceColor','r');
%plot(locs_Swave,M3(locs_Swave),'rs','MarkerFaceColor','b');
grid on;
legend('M3','R-waves');
xlabel('Time'); ylabel('Nm') title('R-wave and S-wave in Noisy M3 Signal')
% Peaks between 6 and 10
locs_Qwave = min_locs(smoothM3(min_locs)>6 & smoothM3(min_locs)<10);
figure hold on
plot(t,smoothM3);
plot(locs_Qwave,smoothM3(locs_Qwave),'rs','MarkerFaceColor','g');
plot(locs_Rwave,smoothM3(locs_Rwave),'rv','MarkerFaceColor','r');
%plot(locs_Swave,smoothM3(locs_Swave),'rs','MarkerFaceColor','b');
grid on
title('Thresholding Peaks in Signal') xlabel('Samples'); ylabel('Nm') legend('Smooth M3 signal','Q-wave','R-wave');
% Values of the Extrema [val_Qwave, val_Rwave] = deal(smoothM3(locs_Qwave), smoothM3(locs_Rwave));
% mit Swave u.
%[val_Qwave, val_Rwave, val_Swave] = deal(smoothM3(locs_Qwave), smoothM3(locs_Rwave), smoothM3(locs_Swave));
% s.u. Vektoren zum Teil gekürzt, da nicht gleiche Länge...
avg_riseTime = mean(locs_Rwave(1:10)-locs_Qwave); % Average Rise time % avg_fallTime = mean(locs_Swave-locs_Rwave); % Average Fall time
avg_riseLevel = mean(val_Rwave(1:10)-val_Qwave); % Average Rise Level % avg_fallLevel = mean(val_Rwave-val_Swave); % Average Fall Level
hmm ich würde glaube ich veruschen das rauschen rauzufiltern und dann mit
diff
den anstieg berechnen um den unteren punkt zu finden. den oberen hast du ja schon mit
findpeaks
. das wäre jedenfalls mein erster gedanke dazu
grüße
ps. dein code ist so nicht lauffähig. was ist denn m3? in der mat datei ist kein m3
_________________
Den oberen Peak zu finden sollte ja nicht so schwer sein. Ich würde dann bei den Maxima ebenfalls den Index bzw. Zeitpunkt speichern. Dann würde ich alle Minima in dem Signal berechnen lassen und dann jeweils das erste auftretende Minimum vor dem Index des Maximums und danach nehmen. Daraus müsstest du dann eigentlich das Zeitintervall auslesen können. Bisschen fummelig aber machbar denk ich..
Wenn der Wert unten immer so bei 10 rum ist, dann könntest du auch schauen wann der erste Wert vor und nach dem Maximum unter diese Grenze fällt und den zugehörigen Zeitpunkt auslesen.
dein code ist so nicht lauffähig. was ist denn m3? in der mat datei ist kein m3
@Winkow: M3 ist die MessreiheA aus der mat.datei, habe sie in M3 umgeschrieben, aber ich lade noch die dazugehörige Zeit t und auch M3 hoch, damit Ihr es dann evtl. ausführen könnt.
Und ja, ich habe auch schon ans Ausfiltern gedacht, also mein Messsignal zu glätten, habe aber noch kein Filter gefunden, der mir wirklich weiterhilft.
Also mein Gedanke dabei war, es so geglättet zu bekommen, dass man bis zum Anstieg einen nahezu konstanten Verlauf erhält und dann die Ableitung mit null Vergleicht und dort wo die Kurve zum ersten mal ungleich null ist, ist die gesuchte Stelle.
Wie hattest du dir das vorgestellt, wie ich den unteren Punkt finden könnte?
Zitat:
Dann würde ich alle Minima in dem Signal berechnen lassen und dann jeweils das erste auftretende Minimum vor dem Index des Maximums und danach nehmen. Daraus müsstest du dann eigentlich das Zeitintervall auslesen können. Bisschen fummelig aber machbar denk ich..
@daNnyTigA: Ich verstehe nicht ganz, wie die Minima mir dabei helfen sollen, ich hätte dann einen ganz anderen Zeitabstand oder etwa nicht? Hierbei wäre ja noch die Zeit mit drin außerhalb des Messzyklus. Falls du natürlich meinst, ich solle die Minimalstelle vor und nach einem Maxima miteinander subtrahieren?
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.