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

Abstand vom Anstiegspunkt bis zum Maximum eines Messignals

 

et-cop
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.08.15
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 10.09.2015, 14:27     Titel: Abstand vom Anstiegspunkt bis zum Maximum eines Messignals
  Antworten mit Zitat      
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:

Code:

%%% QRS - Methodde

%%% Sample distance 2.8000e+04, Abtastrate 2.0000e+03

[~,locs_Rwave] = findpeaks(M3,'MinPeakHeight',90,'MinPeakDistance',2.8000e+04);

% 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')

% Signal filtern - Savitzky-Golay

smoothM3 = sgolayfilt(M3,7,21);

figure
plot(t,M3,'b',t,smoothM3,'r'); grid on
axis tight;
xlabel('Samples'); ylabel('Nm');
legend('Noisy M3 Signal','Filtered Signal')
title('Filtering Noisy M3 Signal')

[~,min_locs] = findpeaks(-smoothM3,'MinPeakDistance',2.8000e+04);

% 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));


meanError_Qwave = mean((M3(locs_Qwave) - val_Qwave));
meanError_Rwave = mean((M3(locs_Rwave) - val_Rwave));
%meanError_Swave = mean((M3(locs_Swave) - val_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

figure;
%helperPeakAnalysisPlot % <-- ???
plot(t,smoothM3, locs_Qwave,locs_Rwave(1:10),val_Qwave(1:10),val_Rwave(1:10),avg_riseTime,avg_riseLevel)

 


Das ist so in etwa das, was ich brauche, leider klappt es nicht so wie erhofft.

Da es 1. kein ECG Signal ist, sondern ein ganz anderes und 2. man die MinPeakHeight und MinPeakDistance kennen muss.

Trotzdem habe ich versucht, diese Methode anzuwenden...dabei kam folgendes bei raus (siehe hochgeladene Abbildungen (QRS))


Ich hoffe Ihr könnt mir helfen Sad

2.jpg
 Beschreibung:
orginales und gefiltertes Signal (QRS)

Download
 Dateiname:  2.jpg
 Dateigröße:  57.36 KB
 Heruntergeladen:  342 mal
3.jpg
 Beschreibung:
Stelle der Pgewünschten Peaks (QRS)

Download
 Dateiname:  3.jpg
 Dateigröße:  44.11 KB
 Heruntergeladen:  320 mal
drehmoment rot_ temp blau.PNG
 Beschreibung:
MessreiheA = roter Verlauf

Download
 Dateiname:  drehmoment rot_ temp blau.PNG
 Dateigröße:  46.23 KB
 Heruntergeladen:  274 mal
gezoomt_drehmoment rot_ temp blau - edit.PNG
 Beschreibung:
gezoomter Bereich, zu ermittelnder zeitlicher Abstand (lila, x-Achse)

Download
 Dateiname:  gezoomt_drehmoment rot_ temp blau - edit.PNG
 Dateigröße:  15.39 KB
 Heruntergeladen:  336 mal
MessreiheA.mat
 Beschreibung:
MessreiheA in mat-Datei

Download
 Dateiname:  MessreiheA.mat
 Dateigröße:  13.48 MB
 Heruntergeladen:  478 mal
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.09.2015, 17:53     Titel:
  Antworten mit Zitat      
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
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
daNnyTigA
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 27.05.15
Wohnort: ---
Version: 2014b/2015a
     Beitrag Verfasst am: 10.09.2015, 18:08     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
et-cop
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.08.15
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 10.09.2015, 20:06     Titel:
  Antworten mit Zitat      
Hallo und danke für die schnelle Antwort,

Zitat:
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?

Grüße et-cop

M3_t.mat
 Beschreibung:
M3 = y-Achse (Drehmoment)
und
t = x-Achse (Zeit)

Download
 Dateiname:  M3_t.mat
 Dateigröße:  7.53 MB
 Heruntergeladen:  398 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
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.