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

Epochen extrahieren

 

Tigerente
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 28.03.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2022, 15:44     Titel: Epochen extrahieren
  Antworten mit Zitat      
Hallo zusammen,

vorab Danke für Eure Hilfe.
Ich bin Anfänger.

Mein Anliegen - ich möchte aus einem Datensatz Epochen extrahieren. Zu sehen in dem beigefügten Plot. Ich möchte aus dem oberen Graph 5 separate Epochen kreieren.

Die EpochenMarker sind in dem unteren Subplot zu sehen. Eine Epoche soll jeweils zwischen zwei Peaks extrahiert werden.

Ich habe keine Idee wie ich das umsetzen kann. Hat jemand eine Idee? Ich bin um jeden Hinweis mehr als dankbar.

untitled.png
 Beschreibung:

Download
 Dateiname:  untitled.png
 Dateigröße:  25.78 KB
 Heruntergeladen:  133 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.03.2022, 18:30     Titel:
  Antworten mit Zitat      
Hallo,

die Peaks sehen mir nach Plateaus aus. Was genau ist also beispielsweise die erste "Epoche"? Mitte erster Peak bis Mitte zweiter Peak? Oder Ende erster Peak bis Beginn zweiter Peak? Oder was ganz anderes?
Irritierend finde ich, dass etwa in der Mitte eines Peaks ein Ausreißer nach unten zu sein scheint?

Eine Möglichkeit Peaks zu finden ist islocalmax . Wie sich das bei solchen "Plateau-Peaks" verhält, müsste man ausprobieren. Hier könnte man auch y2>5 als "Peak-Detektor" verwenden.

Zum Ausprobieren wären Beispieldatensätze hilfreicher als Bilder davon.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Tigerente
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 28.03.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.03.2022, 15:42     Titel:
  Antworten mit Zitat      
Hey Harald,

Danke für dein Feedback! Absolut richtig. Du hast natürlich vollkommen recht. Das ist mir jetzt auch aufgefallen. Und mir ist noch mehr aufgefallen. Nämlich, dass ich vorher Quatsch geschrieben habe. Die Epochen erstrecken sich nicht von Peak zu Peak sondern für die Dauer der dazwischen liegenden Plateaus. Wie man der Grafik entnehmen kann, liegen zwischen den jeweiligen Peaks jeweils niedrige Plateauwerte. Die zu extrahierenden Daten müssen dann entsprechend so lang sein wie das jeweilige Plateau. Ich habe dazu noch einmal einen Screenshot angehängt. Zudem habe ich auch einen Datensatz beigefügt. Darin sind die notwendigen Daten in einer Matrix.

Danke an Euch vorab für die Hilfe.
Tigerente

Test.mat
 Beschreibung:

Download
 Dateiname:  Test.mat
 Dateigröße:  449.4 KB
 Heruntergeladen:  113 mal
matlabforum.png
 Beschreibung:

Download
 Dateiname:  matlabforum.png
 Dateigröße:  10.49 KB
 Heruntergeladen:  117 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.03.2022, 09:14     Titel:
  Antworten mit Zitat      
Hallo,

du kannst das "Plateau-Gebiet" so extrahieren:
Code:
isPlateau = data(:,2) > 0.1 & data(:,2) < 5;


Anschließend kannst du z.B. ein Cell Array mit den jeweils zugehörigen Daten erstellen:
Code:
beginPlateau = find(diff(isPlateau) > 0)+1;
endPlateau = find(diff(isPlateau) < 0);
epochen = cell(size(beginPlateau));
for k = 1:numel(epochen)
    epochen{k} = data(beginPlateau(k):endPlateau(k), 1);
end


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Tigerente
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 28.03.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2022, 11:45     Titel:
  Antworten mit Zitat      
Harald,

Du bist ja der Wahnsinn. Klasse. Ich danke Dir vielmals. Das sieht richtig gut aus. Und der Code sieht so einfach aus, wenn man weiß wie es geht.
Mir war nicht klar, dass ich so den Beginn und das Ende der Epochen definieren kann.
Da habe ich etwas gelernt. Klasse. Ich danke Dir sehr.

Darf ich noch eine ergänzende Frage abfeuern, die sich mir stellt?
Ich habe jetzt verschiedene Datensätze dieser Art und die Abfolge der Plateaus sind randomisiert. Um diese vergleichbar zu machen, muss ich natürlich die Epochen in die gleiche Abfolge bringen. Anbei zur Orientierung nochmal ein Screenshot, was ich meine. Jeder Plateauwert von 0,7 bis 1,89 spiegelt eine andere Bedingung wieder. Man könnte auch A bis E sagen, anstatt der Zahlen. Wie kann ich dies als Info noch entsprechend dazu "speichern" , bspw. in das cell array, so dass ich immer weiß, zu welcher Bedingung die jeweilige Epoche gehört?

Danke nochmal Tigerente

offsets.PNG
 Beschreibung:

Download
 Dateiname:  offsets.PNG
 Dateigröße:  20.52 KB
 Heruntergeladen:  114 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.03.2022, 12:51     Titel:
  Antworten mit Zitat      
Hallo,

Anpassungen:
Code:
epochen = cell(length(beginPlateau),2); % 2 Spalten
for k = 1:numel(beginPlateau)
    epochen{k,1} = data(beginPlateau(k):endPlateau(k), 1); % in die erste Spalte
    epochen{k,2} = data(beginPlateau(k), 2);                       % neu: in die zweite Spalte
end


Das Cell Array könnte man auch als Table mit Überschriften aufhübschen:
Code:
epochen = cell2table(epochen, "VariableNames", ["Signal", "Wert"]);


Was ich noch dazu sagen sollte: wenn du das auf mehrere Datensätze anwendest, musst du schauen, ob die Schwellwerte 0.1 und 5 immer sinnvoll sind.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Tigerente
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 28.03.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2022, 13:48     Titel:
  Antworten mit Zitat      
Ich kann es nicht glauben. Genauso habe ich mir das vorgestellt. Danke, Harald.
Du sollest Kurse geben oder so etwas. Ich würde mich sofort anmelden.
Fantastisch. Vielen Dank. Tigerente
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.03.2022, 16:03     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich kann es nicht glauben. Genauso habe ich mir das vorgestellt. Danke, Harald.

Danke für die positive Rückmeldung, das freut mich! Smile

Zitat:
Du sollest Kurse geben oder so etwas. Ich würde mich sofort anmelden.

Du wirst lachen, ich bin Schulungsleiter bei MathWorks. Wenn du "MATLAB Schulungen" googelst, findest du eine Vielzahl von Schulungsangeboten.
Wenn du mehr zu einer Schulung erfahren möchtest oder ich dir helfen kann, die für dich richtige Schulung zu finden, schicke mir gerne eine PN. Vielleicht sehen wir uns ja demnächst. Smile Die Kolleg*innen machen aber auch sehr gute Schulungen. Wink

Für den Einstieg gibt es auch kostenlose "Onramps" zum Selbststudium:
https://matlabacademy.mathworks.com/#getting-started

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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 - 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.