Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Ingenierumathematik mit MATLAB

Studierende:
weitere Angebote

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Signale von Trends befreien

 

emre5494
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 13.12.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.12.2021, 16:00     Titel: Signale von Trends befreien
  Antworten mit Zitat      
Guten Tag,

ich habe im Rahmen einer Spirometrie (Lungenfunktionsdiagnose) folgende Zeit-Volumen Kurve die ich laut Aufgabenstellungen "von etwaigen Trends befreien soll, so dass die Start- und Endpunkte auf einem Punkt liegen".



Ich habe mich bereits etwas durchgelesen und bin auf den "detrend" befehl gestoßen, allerdings liegen die Start- und Endpunkte auch danach nicht auf dem selben Punkt.
Daher weiß ich leider nicht wie ich weiter vorgehen sollte.



Des weiteren habe ich eine ähnliche Aufgabenstellung wo ich einzelne Atemzüge segmentieren soll und diese dann als eine überlagerte Fluss-Volumen-Kurve darstellen soll, dabei sollen die Atemzüge auch von etwaigen Trends befreit werde, sodass die Start- und Endpunkte jedes Atemzyklus auf einem Punkt liegen.
Leider habe ich da echt keine Ahnung wie ich vorgehen soll.



Ich hoffe ihr könnt mir hier weiter helfe.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 23.689
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2021, 10:00     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
von etwaigen Trends befreien soll, so dass die Start- und Endpunkte auf einem Punkt liegen

Ist das denn sinnvoll, wenn das Signal mit einem Tiefpunkt startet und mit einem Hochpunkt endet?

So oder so: aus der Doku von detrend geht ja klar hervor, dass die Funktion nicht dafür sorgt, dass Start- und Endpunkte auf dem selben Punkt liegen. Dann brauchst du also entweder eine andere Funktion oder musst dir selbst eine schreiben:
1. Punkte identifizieren.
2. Gerade durchlegen (polyfit)
3. Gerade auswerten und abziehen (polyval)

Bei den unteren beiden Bildern ist mir der Zusammenhang nicht klar. Wie soll aus etwas rauschfreiem etwas verrauschtes werden?!
Bitte auch bedenken, dass sich hier sehr wahrscheinlich niemand befindet, der sich mit deiner speziellen Anwendung auskennt - und somit nichts mit Begriffen wie "überlagerte Fluss-Volumen-Kurve" anfangen kann.

Grüße,
Harald

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
 
emre5494
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 13.12.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.12.2021, 15:33     Titel:
  Antworten mit Zitat      
Hallo,

erstmal Danke für dein Antwort.

also die beiden messungen unten stehen soweit im zusammenhang, dass das messgerät zunächst nur den Atemfluss erfassen kann.
Durch numerische Integration (integrator eingebaut im Messgerät) kann dann durch den atemfluss das atemvolumen erfasst werden.

ich könnte mir vorstellen das während dieses Prozesses das Signal dann gleichzeitig gefiltert/geglättet wird, weswegen nur das ursprüngliche Signal Rauschverhältnisse aufweist.

Zu den Atemzyklen kann ich sagen, dass jede positive steigung der Inspiration (einatumung) und jede negative Steigung der Exspiration (ausatmung) entspricht,
demnach steht jeder Hochpunkt im Signal für ein Atemzyklus, welche es nun zu separieren gilt.

Das Fluss-Volumen-Diagramm stellt dann Die Atemfluss änderungen über das Atemvolumen da. Es sollte ungefähr wie folgt aussehen:



Dabei steht jeder Bogen unterhalb von 0 auf der x-Achse für die Einatmung und jeder Bogen überhalb von 0 für die Ausatmung.
Man kann sich also vorstellen wenn die Atmung periodisch immer gleich wäre wie ein Sinus hätte man in dem Diagram ein sich ständig wiederholenden Kreis.

Aber wie gesagt mein eigentlich problem jetzt ist es Die atemzyklen zu separiere und sie dann so zu Überlagern das die Start- und Endpunkte bei Null liegen.

Ich habe aus vergangen Semester ein Beispiel dafür anhand eines EKG-Signals wie es aussehen müsste, aber leider ohne Programmcode an dem ich mich orientieren könnte.



Ich hoffe ihr könnt mir dabei irgendwie behilflich sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

hast du denn die bisherige Anregung ausprobiert?
Wie trennt man denn zwei Atemzüge in dem Signal? Anders gefragt: was trennt Ende eines Atemzugs vom Beginn des nächsten? Falls es lokale Minima sind: islocalmin .

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
 
emre5494
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 13.12.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.12.2021, 17:00     Titel:
  Antworten mit Zitat      
Hallo,

ich muss mich korrigieren, jede negative steigung entspricht dem einatmen und jede positive steigung dem ausatmen also ja der zeitliche abstand zu jedem lokalen minimum enspricht einem atemzyklus.

wie kann ich diese nun überlagert darstellen ?

und noch eine andere frage, wie könnte ich bei einer abtastfrequenz von 2kHZ das signalrauschen entfernen ?

Gruß,
Emre
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.689
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2021, 17:17     Titel:
  Antworten mit Zitat      
Hallo,

die Signale voneinander trennen (eben mit islocalmin) und dann die Teilstücke extrahieren, dann plotten. Mehr lässt sich ohne Beispieldatensatz nicht wirklich dazu sagen.

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
 
emre5494
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 13.12.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.12.2021, 18:12     Titel:
  Antworten mit Zitat      
okay also wie ich die Atemzyklen bestimme ist mir klar, aber wie genau würde man die jetzt die Teilstücke extrahieren ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

dann schreib doch mal den entsprechenden Code hin.
Wenn du die Startstellen eines (neuen) Teilstücks ermittelt hast, ist unter der Annahme von Zeilenvektoren
Code:
start = [1, start]
ende = [start-1, length(x)]

und darüber kannst du dann z.B. eine for-Schleife über
x(start(k):ende(k))
laufen lassen.

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
 
emre5494
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 13.12.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.12.2021, 21:38     Titel:
  Antworten mit Zitat      
[Y,X] = findpeaks(RegularB_volumen, 'minPeakDistance', 6000);
figure;

for i = 1:length(X)-1
start = X(i);
Abstand_Index = X(i+1)-X(i);
ende = start + Abstand_Index;

Trend = linspace(RegularB_volumen(start), RegularB_volumen(ende),Abstand_Index)';
detrend_vol = RegularB_volumen(start:ende-1)-Trend;

Trend = linspace(RegularB_flow(start), RegularB_flow(ende),Abstand_Index)';
detrend_flow = RegularB_flow(start:ende-1)-Trend;

plot(detrend_vol,detrend_flow);
title('Regular Breathing Fluss-Volumen-Kurve');
xlabel('Volumen in L');
ylabel('Flow in L/s');
grid on;
hold on
end



hab es mal so versucht, so liegt der Start- und Endpunkt jedes Zyklus bei 0.



Noch eine Idee wie ich das Rauschen aus dem Atemfluss entfernen kann ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.689
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2021, 21:49     Titel:
  Antworten mit Zitat      
Hallo,

z.B. mit smoothdata .

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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2022 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.