EKG TIMELINE 5.0 MAGYAR FELHASZNÁLÓI ÚTMUTATÓ
A MATLAB programot és a leírást készítette: Benyovszky Máté
[email protected] MTA Pszichofiziológiai Kutatóintézet, Kék labor, 2009 Szabadon felhasználható és módosítható non-profit kutatási célokra
TARTALOM A program képességei .................................................................................................................................... 4 Futtatási környezet .................................................................................................................................... 4 Feldolgozandó adat ................................................................................................................................... 4 Működési elv .................................................................................................................................................. 5 Végrehajtás lépésekben ............................................................................................................................. 6 Fontosabb változók a forráskódban (programozóknak) ............................................................................ 6 Paraméterezési lehetőségek .......................................................................................................................... 7 Helyzetenként változó paraméterek ......................................................................................................... 7 Fő paraméterek ......................................................................................................................................... 7 Részletes beállítások .................................................................................................................................. 8 PEAKEKGCELL ............................................................................................................................................. 9 Kimenetek..................................................................................................................................................... 10 Változók átadása ...................................................................................................................................... 10 Visszajelzések a képernyőre .................................................................................................................... 10 Mentések külső file-ba............................................................................................................................. 11 Ábrázolás grafikonon ............................................................................................................................... 12 Példa adatfeldolgozó batch file-ra................................................................................................................ 13 Hibakezelés ................................................................................................................................................... 14 Hibaüzenetek ........................................................................................................................................... 14 Paraméter ellenőrzés .......................................................................................................................... 14 PEAKEKGCELL paraméter ellenőrzés ................................................................................................... 15 Feldolgozás közben előforduló hibák.................................................................................................. 15 DEBUG (Adathibák kezelése) ................................................................................................................... 16 DEBUGCELL ......................................................................................................................................... 17 Verziótörténet .............................................................................................................................................. 19 EKG RD ..................................................................................................................................................... 19 EKG Timeline 2.0 ...................................................................................................................................... 20
EKG Timline 3.x ........................................................................................................................................ 21 EKG Timeline 4.x ...................................................................................................................................... 22 EKG Timeline 5.0 ...................................................................................................................................... 22 EKG Timeline 6.0 – Tervek ....................................................................................................................... 22 Szómagyarázat .............................................................................................................................................. 23 Idézett forrásmunkák ................................................................................................................................... 23
A PROGRAM KÉPESSÉGEI Az EKG Timeline 5.0 feladathelyzetek alatti szívfrekvencia mérésére és ábrázolására alkalmas program. Képes figyelembe venni a szakadási helyeket, kísérletet tesz a hibás jelek és adatok kiszűrésére. Az elvetett epoch-okat a .egg file alapján képes kiszűrni. Kijelölhetünk a feladathelyzeteken belül vizsgált szakaszokat, melyekről részletes adatokat kaphatunk a későbbi elemzéshez, statisztikához. Jelentéseket kapunk a futtatás végén (átlag adatokat, alap statisztikák) illetve grafikonon ábrázolható a szívritmus változása az időben. A további feldolgozáshoz a kimenet importálható statisztikai programokba, illetve a kifejezetten erre a célra készült MATLAB Statistics Toolbox-ot használó DATSTAT.m programba.
FUTTATÁSI KÖRNYEZET MATLAB 2007a és 2008b [1] alatt fejlesztett program, futtatása ezekben a keretrendszerekben lehetséges. Szükségeges hozzá továbbá a filedet.m (saját fejlesztés) és az accepteeg.m [2] script, melyekkel együtt célszerű hozzáadni a MATLAB elérési útjaihoz (Matlab path).
FELDOLGOZANDÓ ADAT Működéséhez a NeuroScan [3] által előállított Event File-ok formátumában adhatjuk meg az adatokat. Ezek előállítására alkalmas például az ekg_event.tcl NeuroScan batch file, amivel a teljes regisztrátumból (.cnt file) kiszűrhetjük csak a szükséges információkat. Ennek a kimeneti formátumát a következő táblázat demonstrálja, melyben rendre a bejegyzés sorszáma, a trigger azonosító száma, 3 figyelmen kívül hagyott oszlop és végül a mérés kezdetétől eltelt idő milliszekundumok száma (valójában ez a mintavételezésnél felvett pont sorszáma, a program ezredmásodpercenkénti mintavételezést feltételez) szerepel: 1 2 3 4 5 6 7
99 99 1 99 2 99 2
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
1 1013 1651 1666 2302 2352 2952
A szívverések helyzetét (R csúcs időpontját) rendszerint 99-es triggerrel jelöljük, melynek kijelölése az ekg_event.tcl batch-ben például a VoltageThreshold NeuroScan függvénnyel történik, amivel kijelöljük a bizonyos feszültségszintet meghaladó EKG hullám csúcsokat, feltételezve azt, hogy azok az R csúcsok lesznek.
Fontos megjegyezni, hogy a szakadási helyeket a NeuroScan SS triggerrel jelöli az Event File-ban, de az EKG Timeline 5.0 csak numerikus adatokat tud beolvasni, értelmezni. Manuálisan ki kell cserélni az SS karaktersort például 98-ra, mely már egy értelmezhető triggerazonosító jel a program számára.
MŰKÖDÉSI ELV A program alapelve az, hogy a beállított mintavételezési frekvencia alapján adott szabályos időközönként (pl. 100 msec) feljegyezzük, hogy az adott X időpontban mennyi az X időpont körüli, X előtt és után feljegyzett legközelebbi R csúcsok időbeli távolsága. Ezzel minden mintavételezési időpontra lesz egy az adott időpontra vonatkozó szívverés-távolság mérőszámunk (1. ábra: Szívritmus mérés technikája1. ábra). Ez már könnyen átszámolható pulzusszámmá, melyből már felrajzolható a szívritmus-változás görbéje. Minden személynél ugyanazokban az időpontokban veszünk mintát a feladathelyzet kezdőtriggeréhez képest, így pontos és átlagolható információt kapunk.
1. ábra: Szívritmus mérés technikája
Szürke vonalak jelzik azokat az időpontokat, amiben megmérjük és eltároljuk az időponttól balra és jobbra lévő R csúcsok távolságát (színes nyilak)
Hasonlóan a hangok digitalizálásához, bizonyos időközönként vett mintát tárolunk el. Ha megfelelő mintavételezési frekvenciát választunk, megfelelően sűrűn mérjük le az adott időpillanatban az szívverések közötti időt, akkor ez elég ahhoz, hogy a pulzusszám változás görbét veszteségmentesen reprodukálni tudjuk. A Nyquist-Shannon tétel alapján a mintavételezési frekvenciának legalább kétszer olyan gyorsnak kell lennie, mint a előforduló legnagyobb frekvencia, hogy tökéletesen vissza lehessen nyerni az eredeti görbét. Ezt a következő példán próbálom világossá tenni: Tegyük fel, hogy a vizsgált személy pulzusszáma 150 / perc, az azt jelenti, hogy 400 msec-enként van egy szívverés (ami már igen magas értéknek számít). A tétel szerint ezt legalább 200 msec-es (5 Hz) felbontással kell mintavételeznünk a veszteségmentes visszaállításhoz. A programban a mintavételezési sűrűség tetszőlegesen állítható. (Megjegyzés: mi a méréseket jellemzően 100 msec-es (10 Hz) felbontással hajtottuk végre, mely már bő tartalékkal elegendő a pulzus vizsgálatához.) Az algoritmus tesztelésére a felhasználtunk különféle szimulált EKG jeleket is, melyeket az eventgen.m programmal készítettem.
VÉGREHAJTÁS LÉPÉSEKBEN A program első felében bekéri az adatokat, illetve ellenőrzi azokat. Esetlegesen pótolja alapként beállított paraméterekkel a hiányzóakat, illetve figyelmeztet a hibás bemenetre. Utána egy ciklus kezdődik, mely annyiszor hajtunk végre, ahány input file van. 1. 2.
3.
4. 5. 6.
Kikeresi a vizsgált triggerek helyét, szakadási helyeket illetve a szívveréseket is kigyűjti egy külön változóba. Később ezekkel dolgozunk. Ha be van kapcsolva a .eeg file-okkal való szinkronizálás, akkor a nem elfogadott (rejected) epoch-oknak megfelelő triggereket törli a vizsgált triggerek közül. Ugyanígy kiiktatja a szakadási helyek környékét is. A paraméterek alapján most már összegyűjthetjük azokat a helyeket, ahol a valódi mérések kezdődni fognak. Itt még lefut egy sor ellenőrzés, melyekkel a kiküszöböljük az esetleges anomáliákat (pl. túl rövid az adatsor) Mérés és a túl nagy pulzusugrások ellenőrzése PEAKEKGCELL szakaszok vizsgálata Átlagok elkészítése, kimenetek
FONTOSABB VÁLTOZÓK A FORRÁSKÓDBAN (PROGRAMOZÓKNAK) Ezek a változók a program működését, forráskódját tanulmányozva kerülnek elő – futtatáshoz és használathoz nem szükségesek. Programkódot érintő testreszabásnál lehetnek fontosak, általános használathoz bőven elegendő a paraméterek beállítása (lásd: paraméterezési lehetőségek fejezet).
SZEMNEV: a vizsgált file-ok nevét (személyek azonosítói jellemzően) tartalmazó tábla TRIGROW: személyenként készül, ez a táblázat tartalmazza a vizsgált triggereket (hányadik sorban vannak az input file-ban o srows: vizsgált triggerek darabszáma TBEAT: személyenként azoknak a soroknak a sorszáma, amiben szívverés van o trows: szívverések száma SSROW: személyenként szakadási helyek sora o ssrows: szakadások száma
MESTIME: mérési kezdőidőpontok a triggereknél RES: mérési felbontást, időpontokat tartalmazó táblázat
TIMEROW: egy személy egy triggerének idősora (vektor) TIMETABLE: egy személy összes triggerének idősora (mátrix) ATLAGSOR: egy személy összes triggeréből készült átlag (vektor) ATLAGTABLA: az összes személy átlagsora külön-külön (mátrix) NATLAGSOR: az összes személy átlagsorából készült „nagyátlag" (vektor)
PARAMÉTEREZÉSI LEHETŐSÉGEK A programban kétszintű paraméterezésre van lehetőség. A korábbi grafikus felületet felváltotta a parancssorból függvényként meghívható futtatás, ahol csak a változó paramétereket kell megadni. Viszonylag egyszerű szerkesztéssel testre szabható az is, hogy mely paramétert kell megadni minden futtatásnál, és mely változó van beépítve a programtörzsbe. A helyzetenként változó paraméterek jellemzően például a vizsgált adatok elérési útja, a vizsgált időintervallum, vagy olyan jellemző, melyet gyakran változtatunk különféle helyzeteket próbálgatva (például az intervallum vagy a mintavételezési frekvencia).
HELYZETENKÉNT VÁLTOZÓ PARAMÉTEREK A függvény definíciójában, a program legelején kell feltűntetni, hogy melyek azok az adatok melyeket minden meghívásnál kérünk. Ezek az egyenlőség jobb oldalán vannak felsorolva. Ha a függvény definíciója például: function [NATLAGSOR, DEBUGCELL] = EKG_timeline5 (ev2path, boh, joh, res, maxallowedpulsejump, trig)
Akkor a megívó parancs például (váltózó paraméterek használatával, egy batch file részeként): nk = EKG_timeline5('D:\arden\memoria\nk\', boh, joh, res, maxallowedpulsejump, trig);
Vagy konkrét konstans adatokkal: temp = EKG_timeline5('D:\arden\DiplomaD\MESZ_temp_alkohol_placebo_EV2\', 500, 4000, 100, 50, 9);
Természetesen szabadon módosítható, hogy mely változókat szeretnénk helyzetenként változónak vagy fixnek (programtörzsben deklarált konstans) használni. Ehhez nem kell komoly programozói tudás: a változó nevét a programot definiáló function függvény sorában kell elhelyezni és kiszedni a fix paraméterek közül.
FŐ PARAMÉTEREK Ezek a jellemzően helyzetenként változó paraméterek. boh joh res maxallowedpulsejump trig eegyes eegpath
= = = = = = =
59344; 12050; 100; 35; 8; 0; ’d:\arden\’;
% % % % % % %
visszalépés, ms előrelépés, ms mintavételezési felbontás, ms megengedett legnagyobb pulzusugrás vizsgálati helyzet kezdőtriggere vizsgáljuk-e az EEG-t EEG file-ok eléréi útja
trig: a vizsgálandó trigger azonosítószáma boh: a mérést ennyi milliszekundummal a kezdjük meg a vizsgált trigger előtt joh: a mérési hossza a vizsgált trigger után milliszekundumban res: mintavételezési frekvencia milliszekundumban maxallowedjump: a megengedett legnagyobb pulzusugrás. Azaz a pulzusszám nem változhat meg egyik szívverés után a másik szívverésig ennél nagyobb számmal. Ezzel a kimaradó vagy hibásan megjelölt R csúcsokat szűrhetjük ki. eegyes: vizsgáljuk-e az EEG file-ok epoch elfogadottsági értékeit (Accept / Reject) eegpath: az EEG file-ok elérési útja ev2path: az Eseménynapló file-ok elérési útja
RÉSZLETES BEÁLLÍTÁSO K Adott esetben szükség lehet más alapértékeket is módosítani. A programban felhasznált többi konstans leírása olvasható az alábbiakban. ev2mask eegmask
= ’*.ev2’; = ’*.eeg’;
% Event file mask % EEG file mask
szivveres_triggere = 99; % szívverés triggere, ezt az event file készítésekor állítottuk be, másik scriptnél módosítandó!!! sstrig = 98; % szakadás triggere savedata = 0; % mentsük-e az adatokat file-ba (1:igen, vagy 0:nem) grafikon = 0; % kirajzoljuk-e az adatokat grafikonra (1:igen, vagy 0:nem) debug = 0; % debug level: 0:semmi, 1:hibás fileok, 2:mindent kiír if (debug>=2); warning off all; end; % Matlab Warningokat sem mutatja peakekg = 1; % személyenkénti csúcsadatok minimumpulsedelay = 1300; % minimum pulzus (msec) a hibás file-ok kiszűrésére ( 60000/1100 = 55 ) maxtbeat = 5000; % maximum hány szívverés van a vizsgálandó fileban defpath = cd; % Alap elérési út
ev2mask: a bemenetet tartalmazó Eseménynapló (Event File) maszkja. A filedet.m szűrői alapján lehet kijelölni, hogy az adott könyvtáron belül mely adatokat vegyünk figyelembe. eegmask: a bemenetekhez tartozó .eeg file-ok kiválasztásához tartozó filenév szűrő. szivveres_triggere: az azonosító szám, melyekkel az R csúcsokat jelöljük sstrig: szakadásokat jelölő trigger, ez is csak szám lehet! savedata: paraméter, mellyel a külső file-ba mentést kapcsolhatjuk be (0: ki; 1:be) grafikon: paraméter, mellyel a program futása végén megjelenő grafikon kapcsolhatjuk be (0: ki; 1:be) debug: lásd a részletes leírást a Hibakezelés fejezetben
PEAKEKGCELL Ezzel a funkcióval lehetőség van a vizsgált intervallumon belül kiválasztani szakaszokat, melyeken külön méréseket hajthatunk végre. Bekapcsolásához a peakekg paramétert kell engedélyezni (lásd Részletes beállítások fejezet). Tetszőleges számú szakasz kiválasztható, melyek az INPUTPEAKCELL cella típusú változó egy-egy soraként definiálhatók. A sorszámra ügyelve meg kell adni egy azonosítót a kiválasztott szakaszhoz (varname), majd a szakaszon végrehajtott műveletet (searchtype), végül a vizsgált időintervallum kezdő (from) és végpontját (to). % INPUTPEAKCELL(1,:) = {'varname','searchtype','from','to'}; % INPUTPEAKCELL(1,:) = {'N1110nál','min','1000','1500'}; INPUTPEAKCELL(1,:) = {'1stN100','mean','70','170'}; INPUTPEAKCELL(2,:) = {'1stP200','mean','150','350'}; INPUTPEAKCELL(3,:) = {'CNVN100','mean','2600','2800'}; %INPUTPEAKCELL(4,:) = {'xCNVPRE','mean','2060','4108'}; %INPUTPEAKCELL(5,:) = {'szint','mean','-1900','-1800'}; %INPUTPEAKCELL(6,:) = {'atlag','mean','-1900','6000'};
A fenti ábrán néhány példasor is látható. Figyeljünk a következőkre (természetesen ezekhez a paraméterekhez is van hibaellenőrzés):
Ne adjunk meg nullát, az intervallum időértékeinél Az időpontokat a vizsgált triggerhez képest kell megadni A megadott intervallumok a teljes vizsgált szakaszon belül legyenek (az egyenlőséget se engedjük meg)
Műveletként eddig a mean, max, min függvényeket teszteltük, de minden MATLAB funkciónak működnie kell, ami értelmezhető egy vektor adott szakaszán (átlagok, szórás, etc.). A kimenetet egy változót átadva kapjuk meg, amit a paraméterezésnél definiálhatunk (lásd Paraméterezési lehetőségek fejezet). A cella típusú eredmény formátuma a NeuroScan PEAKDETECTION_EX szabványával lesz kompatibilis. A program futásának végeztével egy váltózóként kapjuk meg az adatokat, aminek tartalmát kimásolhatjuk és elmenthetjük külön file-ban (az idézőjeleket érdemes kiszedni). Részlet egy vizsgálat eredményeiből: Source File Sweep Number 15_cnv1_1_EKG.ev2 1 15_cnv1_1_EKG.ev2 1 15_cnv1_1_EKG.ev2 1 15_cnv1_1_EKG.ev2 2 15_cnv1_1_EKG.ev2 2 15_cnv1_1_EKG.ev2 2
Channel Marker Latency Amplitude EKG 1stN100 0 70,6713780918728 EKG 1stP200 50 70,6713780918728 EKG CNVN100 2500 81,4997369368371 EKG 1stN100 0 70,0116686114352 EKG 1stP200 50 70,0116686114352 EKG CNVN100 2500 73,7100737100737
Megjegyzés: az eredményt a peakdet2.m programmal rendezhetjük és a DATSTAT.m keretfelülettel statisztikai elemzésnek vethetjük alá.
KIMENETEK A kimeneteknek főbb típusai:
Változók átadása (adatokkal feltöltve) Visszajelzések a képernyőre a program futása közben Mentések file-ba Eredmények ábrázolása grafikonon
VÁLTOZÓK ÁTADÁSA Ez az output (kimenet) típus a helyzetenként változó paraméterekhez hasonlít. Ebben az esetben azonban az egyenlőségjel bal oldaláról beszélünk, ahol azokat a változóneveket soroljuk fel, melyeket a program futása végén átadunk. Ezek új változóként jelennek meg a MATLAB munkaterületen. Például a függvény definíciójában bal oldalon most az NATLAGSOR, PEAKEKGCELL, és a DEBUGCELL változókat adtuk meg, ezeket szeretnénk átmenteni és később felhasználni: function [NATLAGSOR, PEAKEKGCELL, DEBUGCELL] = EKG_timeline5 ( ev2path, eegyes, eegpath, boh, joh, res, maxallowedpulsejump, trig )
Ebben az esetben a program meghívásánál az x0akontroll változóba kerül az aktuális futtatás NATLAGSOR eredménye (ami a nagy átlag vektor az egész helyzetre nézve az időben), az x0akontroll_peak pedig egy cell típusú változó, melyben a későbbi statisztikai elemzéshez szükséges formátumban kapjuk meg kijelölt elemzett szakaszok eredményeit (lásd PEAKEKGCELL fejezet): [x0akontroll, x0akontroll_peak, x0akontroll_debug] = EKG_timeline5('D:\arden\onlab2_alkohol\0a-kontroll.avg', 0, '', 100, 3500, 100, 60, 9);
Szintén nem kötelező kimenetként felhasználni a fenti példában x0akontroll_debug -nak nevezett hibaellenőrzést segítő változót. Ebben a program futása közben keletkezett változókról és információkról kapunk részletes tájékoztatást, hibaüzeneteket (lásd Hibakezelés fejezet).
VISSZAJELZÉSEK A KÉPERNYŐRE Alaphelyzetben program futása alatt egy folyamatjelzőt látunk, végül az eredményekről kapunk némi tájékoztatást.
2. ábra: Folyamatjelző sáv
Egyszerű jelentésre példa: -----------------------------------| EKG Timeline 5.0 Végeredmények | -----------------------------------Vizsgált könyvtár: D:\arden\onlab2_alkohol\0a-kontroll.avg Elfogadott file-ok száma: 30 Átlagsor: 73.332991,73.330255,73.166641,73.234173,73.247048,73.112675,73.266814,73.149760,73 .318489,73.377298,73.457071,73.521561,73.650467,73.658240,73.799510,73.907527,74.038125 ,73.889593,73.972311,74.197585,74.356361,74.424131,74.281141,74.326214,74.457211,74.510 826,74.452637,74.386815,74.536518,74.501783,74.481069,74.377626,74.490354,74.540223,74. 651747,74.646942 Maximum érték: 74.651747 Minumum érték: 73.112675 Átlag érték: 73.945826 Amplitúdó (max-min): 1.539073 Amplitúdó (max-mean): 0.705921
Ebben kézenfekvő és közérthető adatokat kapunk:
Vizsgált könyvtár: ahol a bemeneti file-ok találhatóak Elfogadott file-ok száma: ami a könyvtárban emészthető volt a program számára Átlagsor: a „nagyátlag” az összes személy személyenkénti átlagából. A következő kiemelt értékek mind ebből a nagyátlagból vannak kiszámolva Maximum érték: legmagasabb pulzusszám érték Minimum érték: legalacsonyabb pulzusszám érték Átlag érték: átlagos pulzusszám Amplitúdó (max-min): legnagyobb eltérés a maximum és a minimum között Amplitúdó (max-mean): az átlag és a maximum közötti eltérés
Természetesen a program a kivételes eseményeket és hibákat is kezeli és meg tudja jeleníteni, de alapesetben csak a legfontosabb anomáliákra hívja fel a figyelmet. Ha ilyenek előjönnek, vagy részletesebb vizsgálatra van szükség sok hibás adat miatt, esetleg a program valamilyen furcsa viselkedésére keresünk magyarázatot, akkor jön szóba a debug mód (lásd Hibakezelés fejezet).
MENTÉSEK KÜLSŐ FILE-BA A savedata paraméter bekapcsolásával állítható be, hogy a program lefutása végén az eredményeket ne (csak) a képernyőre írja ki, hanem akár részletes adatokat is automatikusan elmentsen a merevlemezre. Ebben az esetben futás után felugrik egy ablak, melyben kiválaszthatjuk a mentendő file elérési útját és nevét is beállíthatjuk. A kimenet egy egyszerű szöveg file lesz (.txt, unix sortörés kódolással). Alap esetben ugyanazt menti ki, amint végeredményként kiírna: a személyenkénti átlagot, illetve a vizsgálati helyzet nagyátlagát (minden személy) menti ki a maximum, minimum és az átlagtól való eltérések mellett. Ha speciális igények merülnek fel, könnyen módosítható a forráskód egyéni változók.
A személyenkénti átlagok mentése elő van készítve: az alábbi programszakaszt kell futtatni (letörölni a sorok elejéről a % jelet. Kivéve az első sort, ami csk megjegyzés.) % Egyes személyek adatai % fprintf(fid,'\nÁtlagtába:\n'); % for sorszam = 1:num_file % fprintf(fid,'%s,\n',SZEMNEV(sorszam,:)); % A fileneveket is elrakja % dlmwrite(filename, ATLAGTABLA(sorszam,:), '-append'); % end
ÁBRÁZOLÁS GRAFIKONON A grafikon változó 1-es értékre állításával program lefutása után automatikusan egy felugró ablakban megjelennek az egyéni átlagok és az összesített nagyátlag (vastag fekete vonallal). A koordinátatengelyekről leolvashatóak az idő és pulzusszám értékek, a szürke függőleges vonal pedig azt jelzi, hogy hol volt a 0 időpillanat, azaz az a trigger, amit viszonyítási alapnak választottunk.
3. ábra: Az EKG Timeline 5.0 kimeneti grafikonjára példa
PÉLDA ADATFELDOLGOZÓ BATCH FILE-RA A program azért lett ilyen paraméterezhető függvény formátumú, hogy több vizsgálati helyzetből álló feladatsorokat is gyorsan össze lehessen vetni: batch file-ban csokorként összefogva az összehasonlítandó elemeket. Ehhez tulajdonképpen le kell futtatni az EKG_timeline5.m-et többször a megfelelő paraméterezéssel, a kimeneteket elmenteni majd ábrázolni tetszés szerint. Erre példaként az EKG_CNVauto.m, EKG_szamauto.m és EKG_memauto.m mellékelt, melyekben a vizsgálati helyzetek nagyátlaggal való összegzésén és új jelölővonalak megjelenítésén túl úgynevezett alapvonal-igazításra (baseline) is lehetőség van megadott szakaszhossz alapján.
4. ábra: Minta adatfeldolgozó batch kimenetére
HIBAKEZELÉS Kifinomult hibakeresési és azonosítási technikák kerültek a programba a fejlesztés során. Élő szervezeteket vizsgálunk, melyek nem feltétlenül szabályos kimenteket adnak a mérések során. Minden mérés, megfigyelés hibát hordoz magában, ezt próbáljuk minél jobban felismerni és kiszűrni a legpontosabb eredmények érdekében. Fel kell készülnünk a felhasználók téves paraméterezésére is, mely talán a fentieknél még gyakrabban előforduló probléma lehet. Erre részletes paraméterellenőrzéssel és pontos hibajelzésekkel válaszol a program.
HIBAÜZENETEK A hibaüzenetek megjelenítéséhez a debug paramétert 1-es vagy 2-es módba kell kapcsolni. A visszajelzések második, pontosító sora csak a 2-es, részletező módban jelenik meg.
PARAMÉTER ELLENŐRZÉS Missing parameters. For help type: help EKG_timeline5
Hiányzó paraméter. A program meghívásánál nincs minden paraméterhez érték rendelve (lásd Paraméterezési lehetőségek fejezet). Invalid event file path
Az Eseménynapló file-ok elérési útja érvénytelen. Invalid event file mask
Az Eseménynapló file-ok kijelölési maszkja érvénytelen. Invalid eeg file path
A .eeg file-ok elérési útja érvénytelen. Invalid eeg file mask
A .eeg file-ok kijelölési maszkja érvénytelen. No source event files
Bár az elérési út és a maszk szintaxisa helyes, de nincs feldolgozható file a kijelölt tartományon.
No source eeg files
Bár az elérési út és a maszk szintaxisa helyes, de nincs feldolgozható .eeg file a kijelölt tartományon. Number of selected event and eeg files must be the same!
Amennyiben felhasználjuk a .eeg file-okat az epoch elfogadottsági állapotok forrásának, számuknak meg kell egyeznie az Eseménynapló file-okszámával. A hibaüzenet szerint ez a feltétel nem teljesül.
PEAKEKGCELL PARAMÉTER ELLENŐRZÉS Hiba! Csúcskeresés vége túl a kezdőidőponton a %s -nél! :O! Utolsó mérési időpont %d\t nem lehet nagyobb mint a kezdő %d !
A from és a to paraméterek között mindig a from legyen a kisebb (lásd PEAKEKGCELL fejezet). Hiba! Csúcskeresés túl a vizsgált időponton a %s -nél!! Az első mérési időpont %d\t De a kezdő mérési hely %d -ig menne, tehát növelendő az INPUPEAKCELL-ben
A PEAKEKGCELL tartománya a vizsgált szakaszon belül kell hogy essenek. Itt a kezdőidőpont lóg ki. Hiba! Csúcskeresés túl a vizsgált időponton a %s -nél! Utolsó mérési időpont %d\t És a mérési hely %d -ig menne, tehát to csökkentendő
A PEAKEKGCELL tartománya a vizsgált szakaszon belül kell hogy essenek. Itt a záró időpont lóg ki.
FELDOLGOZÁS KÖZBEN ELŐFORDULÓ HIBÁK Hiba! Filenév: %s. --- Nincs használható trigger!
Az adatfile-ban nincs a kiválasztott triggerből. Hiba! Filenév: %s. --- Nincs megfelelő mennyiségű minta, eleje rövid) Első mérési időpont %d\t Első szívverés pedig csak %d, tehát a boh csökkentendő
A kiválasztott triggerhez kijelölt szakasz bal oldala túl hosszú (vagy az adatsor túl rövid negatív irányban). Hiba! Filenév: %s. --- Nincs megfelelő mennyiségű minta, vége rövid) Utolsó mérési időpont %d\t És a szívverés csak %d -ig megy, tehát joh csökkentendő
A kiválasztott triggerhez kijelölt szakasz jobb oldala túl hosszú (vagy az adatsor túl rövid pozitív irányban). Hiba! Filenév: %s, %u.-ik trigger. Túl nagy pulzusugrás: %d szívverés/perc
Az adott file megjelölt triggerében a pulzusszám változás nagyobb, mint a megengedett maxallowedjump (lásd Paraméterezési lehetőségek fejezet).
DEBUG (ADATHIBÁK KEZELÉSE) Többszintű hibakeresésre illetve kijelzésre van lehetőség a programban (debug mód), melyet különböző érzékenységi szintekre lehet beállítani (debug level), hogy milyen részletességgel jelezze vissza az adatsorokban fellelhető anomáliákat. Fontos megjegyezni, hogy a hibakezelés minden esetben megtörténik. 0.
szint esetén (debug = 0;) az alapbeállítások érvényesek, nem kapunk visszajelzéseket. (Sőt, a MATLAB hibaüzenetei is rejtve maradnak).
1.
szint esetén (debug = 1;) a legfontosabb hibaüzeneteken kívül az indításnál a beállított paraméterekről és alap adatokról is kapunk egy összefoglalót: -----------------------------------| EKG Timeline 5.0 Inicializálás | -----------------------------------Általános paraméterek: Vizsgálati helyzet kezdőtriggere: Szívverés triggere: Szakadás triggere: Balra (előtte): Jobbra (utána): Összes kijelölt idő: Felbontás: Minták száma: EEG Vizsgálat: Megengedett legnagyobb pulzusugrás: Megengedett minimum pulzus: Vizsgált file-ok száma
9 99 98 100 ms 3500 ms 3600 ms 100 ms 36.00 db, 0 60 46.15 31 db
Kerekítve:
36
A MATLAB hibaüzenetei megjelennek, és az alábbiakhoz hasonló hibaüzeneteket kaphatunk a nem megfelelő feldolgozandó file-okról: Hiba! Filenév: 24_cnv1_1_EKG2.ev2. --- Nincs megfelelő mennyiségű minta, vége rövid) Hiba! Filenév: 26_cnv1_1_EKG2.ev2, 10.-ik trigger. Túl nagy pulzusugrás: 62 szívverés/perc
2.
szint (debug = 2;) a legrészletesebb visszajelzéseket adja. A hibaüzenetek a hibák pontosabb helyét vagy jellegét is tartalmazzák, legtöbbször megoldási javaslattal. Például:
Hiba! Filenév: 24_cnv1_1_EKG2.ev2. --- Nincs megfelelő mennyiségű minta, vége rövid) Utolsó mérési időpont 246034 És a szívverés csak 244460 -ig megy, tehát joh csökkentendő
DEBUGCELL A debug = 2 módban készül egy úgynevezett debug cell is. Ez egy táblázat MATLAB cella típusban tárolva, amiben az egyes file-okról és a feldolgozási folyamatról részletes információkat gyűjtünk. Ha a hibakezelés nem elég hatékony, vagy túl kevés felhasználható adat marad a szűrés után, ezzel könnyedén ellenőrizhető válik, hogy hol s miért akad el a program (melyik file lehet hibás, hol áll le a futás, mi miatt kapunk rossz eredményeket).
5. ábra: Debug cell helyzetjelentés
Az oszlopok tartalma rendre:
Filenév: a vizsgált file neve Összes sor: a file-ban lévő összes sor (minden trigger) Vizsgálandó triggerek: a kiválasztott (feladathelyzet) trigger hányszor szerepel Szívverések száma: 99-es (vagy egyéb kiválasztott szívverés trigger) hányszor szerepel Trigger helyek: mely sorokban szerepel a kiválasztott feladathelyzet trigger Mérési helyek (idő) kezdés és vég: az egyes feladathelyzet triggerek körülötti vizsgált szakasz kezdőidőpontja és vége miliszekundumban Első és utolsó szívverés: sor MESTIME: aktuális, a vizsgált file-on belül legutoljára mért időszakasz TBEAT: eredetileg a teljes TBEAT változó, jelenleg első és utolsó szívverés sor Időtábla: eredetileg a teljese TIMETABLE, most a vizsgált file-on belül legutoljára mért szakasz Átlagsor: a vizsgált file (személy) átlagsora az adott szakaszon
Egyes cellák nem csak egy adatot, vagy egy egyszerű vektort, hanem hosszabb adatsort tartalmaznak. Ezeket dupla kattintással meg lehet nyitni. Példa Átlagsorra a debug cell –ből:
6. ábra: Debug cell egy cellája kibontva
A debug cell meghívására a Részletes beállítások fejezetben található példa.
VERZIÓTÖRTÉNET
EKG RD Elsőként az EKG_RD_event.m MATLAB scriptet készítettem el (7. ábra), mely a szívritmusváltozást hivatott ábrázolni, minél pontosabban. Működési elve egyszerű volt: az Event File-ból kiszámította, mennyi idő telt el két R csúcs között, majd az eltelt idő helyénél bejelölte a távolságot. Így nagyon pontos görbét kaptunk, csak nem lehetett pontosan átlagolni az időeltolódások miatt: mindenkinek máskor dobbant a szíve. Mivel csak a szívveréseket számoljuk, így a mért intervallum sem ugyanannyi személyenként: nagyobb pulzusszám mellett gyorsabb 10 szívverés. Mindezek mellett, már ezen is látszott a szívverés-csökkenés, ahogy a közeledünk az esetleges gombnyomások időpontjához, CNV csúcshoz (5-6.-ik szívverés környékén)(8. ábra).
7. ábra: EKG_RD_event.m program kezelőfelülete
92 90 88 86 Pulzusszám
84 82 80 78 76 74 72
1
2
3
4
5
6
7
8
9
10
R csúcs sorszáma 8. ábra: Az EKG_RD_event.m kimenete
A feladat kezdetét jelző trigger előtt két szívverésnyivel kezdtük meg a mérést.
EKG TIMELINE 2.0 Az EEG vizsgálata viszont szigorúan időkeretekhez kötött, és mivel az EKG-nál is szükségünk volt átlagolásra, ezért egy új szívritmus elemzőt kellett készíteni. Az EKG_timeline.m elve már az, hogy a megadott intervallumon belül bizonyos időnként („mintavételezési idő”) megnézi, hogy az adott időpont körül milyen messze van a két szívdobbanás, azaz a mintavételezés pillanatában mennyi a pulzusszám (9. ábra). Ez az alapelgondolás él a későbbi verziókban is. Részletes leírás a Működési elv fejezetben.
9. ábra: Az EKG_timeline.m program kezelőfelülete
EKG TIMLINE 3.X Az EKG-elemzés feldolgozásának fejlesztése azonban itt még nem ért véget, mert a felvételek hibái miatt további feldolgozásra van szükség. Az EEG jeleknél ugyanis a műtermékszűrés során egyes epochokat eldobtunk. Felmerült, hogy akkor az átlagokba nem bekerülő részeket a triggereket és szívverést tartalmazó Event File-ok elemzésénél, azaz a szívritmus elemzésénél sem kellene felhasználni. Kiderült az is, hogy a felvétel során néha szakadások keletkeztek, melyeket a feladat elején összefűztünk, de néha a szakadás pont egy vizsgált epoch közepén történt – s ezt a jelzést is később tettem csak bele az eseményeket leíró Event File-okba. Az EKG_timeline3.m lett az alapoktól újraírt verzió, melyben a sebességet is optimalizáltam, és az .ev2 szívritmus, trigger és szakadás adatokon kívül az EEG-t és accept/reject adatokat tartalmazó .eeg adatokat is felhasználja. Felhasználja, és már az elején eldobja azokat az epochokat, amik műtermékesnek jelöltettek, vagy a szakadást jelölő Start-Stop szakadási jeleket tartalmaznak, s nem veszi bele őket az átlagba. Az EKG_timeline35.m verzió a grafikus felületen túl (mint a korábbi verziók) már parancssorból paraméterezve is futtatható. Az átlagokon és grafikonokon túl az amplitúdó-változást is megjeleníti. (10. ábra)
10. ábra: Az EKG_timeline3.m program kezelőfelülete
EKG TIMELINE 4.X A tavalyi félév méréseihez készített 4-es verzió a hatékonyság érdekében újraírt maggal már előfeldolgozott adatokat ad, melyek statisztikai feldolgozásra alkalmasak. Grafikus felület nem készült hozzá, mert ez egész program egy meghívható függvényként dolgozik, kimenetét a képernyőre, adatfileba, vagy MATLAB váltózóként adja. Megjelent az „automatikus műtermék-szűrés” funkció, mely kiszűri a túl magas vagy túl alacsony pulzusszámú epoch-okat. Az tavalyi végső mérésekhez használt EKGtimeline45.m függvény nagy előnye a hibatűrés és felismerés. Képes részletes adatokat feljegyezni az elemzett file-okról, illetve pontosan kijelezni a hibák jellegét: a méréshez képest melyik file vagy epoch túl rövid, hol sok a hibás adat – ez a Debug cell funkcióhalmaz.
EKG TIMELINE 5.0 A program továbbfejlődött, immár az ötös verzió, EKG_timeline5.m alkalmas arra, hogy a vizsgált EKG-ból az EEG-hez teljesen hasonlóan, személyenként, epochonként elemezve készítsen a Neuroscan PeakDetection .dat file-jával kompatibilis kimenetet, azaz az EKG csúcsok ugyanolyan formátumban megkaphatóak, mint az EEG-nél már ismert megoldás. Ebből következően ugyanúgy elemezhetőek (peakdet2.m-el)! A kimeneti cella (lásd PEAKEKGCELL fejezet) még egy munkakörnyezeten belüli változó, melyet kézzel kell kimenteni. A MATLAB Profiler segítségével sikerült kielemezni a szűk keresztmetszeteket, és mintegy felére csökkenteni a futási időt. A mintahalmazon az ACCEPTEEG és PEAKEKGCELL funkciók használata mellett a kezdeti 17,9 s-ról sikerült mindössze 9,9 s-ra csökkenteni a feldolgozáshoz szükséges időt. Legtöbbet a PEAKEKGCELL parancsainak optimalizálásán nyertem: ezek futnak le esetenként több ezerszer egy összetettebb vizsgálat során.
EKG TIMELINE 6.0 – TERVEK
A PEAKEKGCELL adatok automatikus kimentése .dat file-ba További elemzési és statisztikai lehetőségek implementálása Heart Rate Variability (Szívritmus Variabilitás, HRV) számítás [4] R hullám csúcsok felismerésre neurális hálózatokkal Angol nyelvű dokumentáció
SZÓMAGYARÁZAT Batch
-
Script keretrendszer elvégzi.
Egy parancs végrehajtási lista, amelyben leírt utasításokat a program elvégzi. Egy egyszerű program, parancs végrehajtási lista, amelyben leírt utasításokat a
Trigger A különböző időpontokhoz tartozó eseményeknek adunk egy azonosító számot, mely alapján visszakereshető. Egy trigger jelzi mondjuk minden feladathelyzet kezdetét vagy a vizsgált személy által adott visszajelzést a regisztrátumban. Event file Eseménynapló. Az az adatsor, melyben a triggerek sorrendjét és időpontját tároljuk, tulajdonképpen követjük a megfigyelni kívánt folyamatokat. Debug
-
Program futási hiba javítás.
Peak
-
Csúcs. Peakdetection: csúcskeresés. A hullámok lokális szélsőértéke.
Path
-
Elérési út.
IDÉZETT FORRÁSMUNKÁK
[1] MathWorks. (2008) MATLAB - The Language http://www.mathworks.com/products/matlab/
of
Technical
Computing.
[Online].
[2] S. Makeig and A. Delorme. (2007) EEGLAB Open Source Matlab Toolbox for Electrophysiological Research. [Online]. http://sccn.ucsd.edu/eeglab/
[3] Compumedics. (2008) Neuroscan. [Online]. http://www.neuroscan.com
[4] D. Kaplan and P. Staffin. Heart http://www.macalester.edu/~kaplan/hrv/doc/
Rate
Variability
Software.
[Online].