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

Mit Matlab EKG auswerten!

 

Mr.Bubbles

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2008, 16:48     Titel: Mit Matlab EKG auswerten!
  Antworten mit Zitat      
Hallo!
Ich sitze heute das erstmal vor Matlab und habe ein(zwei) Programm(e) was mir Daten, die in form einer Text-Datei vorliegen, von einem EKG-Gerät auswerten soll. Eigentlich sollte es funktionieren, nur bekomme ich leider eine Fehlermeldung und weiß damit nix anzufangen. Hab das nicht selber geschrieben. Es geht mir mehr um die Anzeige die ich zusehen bekommen sollte.

Die Meldung ist:
Zitat:
Undefined function or method 'max_t_EKG' for input arguments of type 'double'.


der code des programms:
Code:

clear;
Laenge = length(dlmread('Nr1','\t'))-1;
EKG_Spalte = [1 2 Laenge 2];
EKG = dlmread('Nr1','\t',EKG_Spalte);
Trig_Spalte = [1 0 Laenge 0];
Trig = dlmread('Nr1','\t',Trig_Spalte);
t = 0:(1/300):((Laenge-1)/300);
% k : Gesamtzahl der R-Zacken
% max_y_EKG: maximaler EKG-Ausschlag/R-Zacke
% max_t_EKG: Zugehörige Zeit der R-Zacke
k=1;
RRT(1)=0.9; % RRT: R-Zacken-Intervall
Fenster = 80;
Schwelle = 1; % Höhendifferenz-Schwelle
i=1;
while i <(Laenge-Fenster-1)
    if ((EKG(i+6)-EKG(i)) > Schwelle)
    [maximum,index]=max(EKG(i:i+Fenster));
    max_y_EKG(k)=maximum;
    max_t_EKG(k)=(i+index-1)/300;
    if (k > 1)
        RRT(k) = max_t_EKG(k) - max_t_EKG(k-1);
    end;
    k=k+1;
    i=i+Fenster-1;
    end;
    i=i+1;
end;
% Berechnung des Minimums vom RRT
[min_RRT,ind_RRT]=min(RRT);
min_t_RRT = max_t_EKG(ind_RRT);
%EKG-Darstellung
subplot(2,1,1);
plot(t,EKG,'r-',max_t_EKG,max_y_EKG,'b.');
AXIS([0 200 -1 2]);
xlabel('Zeit [sek]');
ylabel('EKG-Ausschlag [mV]');
title('EKG-Verlauf');
legend('EKG','Maxima(EKG)',3);
%RRT-Darstellung
subplot(2,1,2);
plot(max_t_EKG,RRT,'b-',t,Trig,'r-',min_t_RRT,min_RRT,'mp');
AXIS([0 200 0.4 0.9]);
xlabel('Zeit [sek]');
ylabel('RRT [sek]');
title('RRT-Verlauf');
legend('RRT','Trigger','Minimum(RRT)',4);


bzw:
Code:

clear;
Laenge = length(dlmread('Nr1','\t'))-1;
Puls_Spalte = [1 1 Laenge 1];
Puls = dlmread('Nr1','\t',Puls_Spalte);
EKG_Spalte = [1 2 Laenge 2];
EKG = dlmread('Nr1','\t',EKG_Spalte);
Trig_Spalte = [1 0 Laenge 0];
Trig = dlmread('Nr1','\t',Trig_Spalte);
t = 0:(1/300):((Laenge-1)/300);
% k : Gesamtzahl der Puls-Maxmima
% max_y_Puls_Puls: maximaler Puls-Ausschlag
% max_t_Puls: Zugehörige Zeit der Puls-Maxmima
k=1; i=1;
Fenster = 80;
Schwelle = 0.18; % Höhendifferenz-Schwelle
while i <(Laenge-Fenster-1)
    if ((Puls(i+6)-Puls(i)) > Schwelle)
        [maximum,index]=max(Puls(i:i+Fenster));
        max_y_Puls(k)= maximum;
        max_t_Puls(k)= (i+index-1)/300;
        k=k+1;
        i=i+Fenster-1;
    end;
    i=i+1;
end;
% k : Gesamtzahl der R-Zacken
% max_y_EKG: maximaler EKG-Ausschlag/R-Zacke
% max_t_EKG: Zugehörige Zeit der R-Zacke
k=1;
Fenster = 80;
Schwelle = 0.5; % Höhendifferenz-Schwelle
i=1;
while i <(Laenge-Fenster-1)
    if ((EKG(i+6)-EKG(i)) > Schwelle)
        [maximum,index]=max(EKG(i:i+Fenster));
        max_y_EKG(k)=maximum;
        max_t_EKG(k)=(i+index-1)/300;
        k=k+1;
        i=i+Fenster-1;
    end;
    i=i+1;
end;
%Berechnung der Puls-Transit-Zeit PTT
PTT = max_t_Puls - max_t_EKG;
% Berechnung des Minimums vom PTT
[min_PTT,ind_PTT]=min(PTT);
min_t_PTT = max_t_Puls(ind_PTT);
%Puls/EKG-Darstellung
subplot(2,1,1);
plot(t,Puls,'r-',max_t_Puls,max_y_Puls,'b.',t,EKG,'k-',max_t_EKG,max_y_EKG,'b.');
AXIS([0 200 -1.5 2]);
xlabel('Zeit [sek]');
ylabel('Puls/EKG-Ausschlag [mV]');
title('Puls/EKG-Verlauf');
legend('Puls','Maxima(Puls)','EKG','Maxima(EKG)',3);
%PTT-Darstellung
subplot(2,1,2);
plot(max_t_EKG,PTT,'b-',t,Trig,'r-',min_t_PTT,min_PTT,'mp');
AXIS([0 200 0.22 0.27]);
xlabel('Zeit [sek]');
ylabel('PTT [sek]');
title('Puls-Transit-Verlauf');
legend('PTT','Trigger','Minimum(PTT)',4);


die textdatei ist 70 MB groß kann sie also nicht ganz hier posten, aber mal einen kleinen ausschnitt:
Zitat:

0.083 0.579 0.984 0.002 0.002
0.084 0.580 0.969 0.002 0.002
0.084 0.579 0.949 0.002 0.002
0.084 0.580 0.924 0.002 0.002
0.084 0.579 0.895 0.002 0.002
0.084 0.580 0.860 0.002 0.002
0.083 0.579 0.821 0.002 0.002
0.084 0.580 0.780 0.002 0.002
0.083 0.579 0.739 0.002 0.002
0.084 0.579 0.701 0.002 0.002


wäre echt super wenn mir jemand sagen könnte wo der fehler liegt!


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.03.2008, 17:40     Titel:
  Antworten mit Zitat      
Hallo,

das Array max_t_EKG wird bei dir in der Schleife initialisiert
und leider wird diese Stelle nicht erreicht. Ich vermute einfach die IF-Bedingung in der Schleife wird nie erfüllt.
Vielleicht ist die Schwelle=1 einfach zu groß ?
Versuch einfach andere Schwelle?

Code:

Schwelle = 1; % Höhendifferenz-Schwelle
.
.
while i <(Laenge-Fenster-1)
%
%
%die Bedienung ist wohl nie erfüllt
    if ((EKG(i+6)-EKG(i)) > Schwelle)
    [maximum,index]=max(EKG(i:i+Fenster));
    max_y_EKG(k)=maximum;
    max_t_EKG(k)=(i+index-1)/300;
    if (k > 1)
        RRT(k) = max_t_EKG(k) - max_t_EKG(k-1);
    end;
    k=k+1;
    i=i+Fenster-1;
    end;
    i=i+1;
end;
.
.
%und hier kracht es dann
min_t_RRT = max_t_EKG(ind_RRT);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr.Bubbles

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2008, 17:59     Titel:
  Antworten mit Zitat      
hatte es jetzt mit 0.1 getestet. siehe da es funktioniert, aber leider kann da immer noch nicht was ganz so stimmen. sonst hätte ich nur 6 herzschläge in der minute.
in der datei steht in der 3. spalte der ekg-wert(in der 2. puls). wenn ich den code richtig verstanden habe, wird zb. der 7.-wert minus dem ersten gerechnet und dann mit der schwelle verglichen. oder?
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.03.2008, 18:44     Titel:
  Antworten mit Zitat      
Zitat:

hatte es jetzt mit 0.1 getestet. siehe da es funktioniert, aber leider kann da immer noch nicht was ganz so stimmen. sonst hätte ich nur 6 herzschläge in der minute.

Smile Tja, da ist wohl wahr


Welche Bedeutung hat Fenster?
Fenster = 80?


Zitat:

in der datei steht in der 3. spalte der ekg-wert(in der 2. puls). wenn ich den code richtig verstanden habe, wird zb. der 7.-wert minus dem ersten gerechnet und dann mit der schwelle verglichen. oder?


Ja,
7-1
8-2
9-3
usw
wenn über die Schwell

Ich kann mir bloß nicht wirklich erklären, warum immer 6 Stellen entferntes Wert wird genommen? (das kann aber auch ins Auge gehen, wenn Index+6 größer als Anzahl Elemente in EKG wird)
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr.Bubbles

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2008, 18:54     Titel:
  Antworten mit Zitat      
erst mal danke denny!

welche bedeutung fenster hat? weiß ich auch nicht.

hab jetzt auch mehr herzschläge Smile ich hatte die daten mit einer höhren frequenz aufgenommen. im bsp waren es nur 300hz. ich hatte mehr.

nur hab ich jetzt noch ein problem mit dem 2. programm. in der zeile:
Zitat:
PTT = max_t_Puls - max_t_EKG;

die dimensionen der matizen müssen übereinstimmen?!
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.03.2008, 19:47     Titel:
  Antworten mit Zitat      
Zitat:

nur hab ich jetzt noch ein problem mit dem 2. programm. in der zeile:
Zitat:
PTT = max_t_Puls - max_t_EKG;
die dimensionen der matizen müssen übereinstimmen?!


Hier entsteh gleich die Frage, ob 2 Schleifen wirklich nötig sind?
Ist es nicht besser wenn man die Schleifen vereint?

Code:

% k : Gesamtzahl der R-Zacken
% max_y_EKG: maximaler EKG-Ausschlag/R-Zacke
% max_t_EKG: Zugehörige Zeit der R-Zacke
k=1;
Fenster = 80;
SchwelleEkg = 0.5; % Höhendifferenz-Schwelle
SchwellePuls = 0.18; % Höhendifferenz-Schwelle
i=1;
while i <(Laenge-Fenster-1)
    if ((EKG(i+6)-EKG(i)) > SchwelleEkg)&&((Puls(i+6)-Puls(i)) > SchwellePuls)
        [maximum,index]=max(EKG(i:i+Fenster));
        max_y_EKG(k)=maximum;
        max_t_EKG(k)=(i+index-1)/300;
        [maximum,index]=max(Puls(i:i+Fenster));
        max_y_Puls(k)= maximum;
        max_t_Puls(k)= (i+index-1)/300;
        k=k+1;
        i=i+Fenster-1;
    end;
    i=i+1;
end;

 


Ansonsten muss man hat irgendwie auf gleiche Länge bringen,
die Daten aber werden danach nicht synchron
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr.Bubbles

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2008, 20:11     Titel:
  Antworten mit Zitat      
vielen dank noch mal!
das werd ich dann morgen mal testen.
ach übrigens hab ich es mal ohne dieses "fenster" probiert. nach 5 minuten hat sich immer noch nix getan, da hab ich dann abgebrochen.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 26.03.2008, 09:38     Titel:
  Antworten mit Zitat      
Hallo,
was heißt ohne Fenster? Hast du Fenster=0 gesetzt, dann entsteht unendliche Schleife
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2012, 12:53     Titel:
  Antworten mit Zitat      
Hallo Liebe Nutzer,

ich habe dieses Programm benutzt um R-R Intervall aus einer Messreihe zu berechnen, aber bekomme diesen Fehlermeldung:

min_t_RRT = max_t_EKG(ind_RRT);
!--error 4
Undefinierte Variable: max_t_EKG

kann mir bitte jemand dabei helfen?

PS: was bedeutet Fenster?

Gruß
Gast
 
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.