Orvosbiológiai számítógépes gyakorlatok Vérnyomás és pulzusmérés
Mérésvezető: Dr. Jobbágy Ákos Készítették: Balla Petra – YWF2A4 Eigner György – GXDBIF
Budapest, 2012. április 16.
A mérés célja: Élettani paraméterek vizsgálata. A légzés hatása az EKG és PPG jelekre, valamint a vérnyomásmérés jeltorzító hatásának vizsgálata. 1. feladat – Adatok betöltése és átalakítása Elsőként a vizsgálatokhoz használt adatok kerültek rögzítésre a HHMD készülék segítségével. A követelményeknek megfelelően mindkettőnkről készültek felvételek. Az alábbi táblázat tartalmazza, hogy melyik feladathoz, kiről, milyen nevű állományból használtunk fel adatokat. A későbbiekben erre hivatkozva adjuk meg a felvételek teljes körülményeit.
1. 2.
Feladat (feladat száma/rész száma) 1/1 1/2
3.
2/1
Eigner György
4. 5. 6.
2/2 2/3 2/4
Eigner György Eigner György Eigner György
7.
3/1-2
Eigner György
Nr.
Kiről készült
Állomány neve
Balla Petra Balla Petra
ballapetra1_nyugodt_100_.mat ballapetra2_legzesmod_100.mat eignergyorgy2_100_PPG1.mat
1. táblázat
eignergyorgy3_150_PPG2.mat eignergyorgy4_100_PPG3.mat eignergyorgy5_100_PPG4.mat eignergyorgy6_100_vernyomas1_.mat
2, Készítsenek a HHMD-t felhasználva egy 100 másodperc hosszú regisztrátumot a mérőcsoport minden tagjáról, nyugalmi helyzetben, a mandzsetta felfújást kikapcsolva. Vizsgálják meg: • a légzés hatását a szívfrekvenciára, • a légzésfrekvencia illetve a szívfrekvencia állandóságát. A, Elsőként egy 100 mp hosszú regisztrátumot készítettünk (Nr. 1.). A jel lassú, nyugodt légzés mellett került felvételre, amit 60 sec-nél egy mély, és 75-85 sec-ig felületes belégzés szakított meg. Elsőként elemeztük a jel frekvenciaspektrumát. Ehhez a Matlab help-jében talált segédletet használtuk fel, ahol fel volt tüntetve a különféle átalakítások a megfelelő felvételi frekvencia, felbontás és beosztás is. A kapott spektrum képe:
1. ábra - EKG spektrum – nyugalmi helyzetben Jól látható a spektrumon a szabályos 50 Hz körüli hálózati zaj és ennek felharmonikusai. Maga a számunkra hasznos jel ez alatti tartományban található. Ezt a zaj negyedrendű Butterworth típusú sávzáró szűrővel leszűrve (hálózati zaj és 3. felharmonikusig a magasabb frekvenciájú komponensei) a következő jelalakot kaptuk:
2. ábra – EKG jel – hálózati zaj szűrve Eredetileg sajnos egy nagyon zajos jelet sikerült rögzítenünk. A szűrések után még mindig viszonylagosan nagymértékű zaj ül a jelen. Mivel a legjelentősebb hálózati zajt leszűrtük, a megmaradó komponenseitől eltekintettünk és feltételeztük, hogy más fajta zaj terheli a jelet. A szűréskor vesztettünk információt, jelentős volt az amplitúdó lemetszés, de ezzel egyelőre nem foglalkoztunk, mert számunkra ebben a feladatban ez nem volt lényeges. A feladat szerinti megállapítást már itt is tehetünk, hiszen, mint fentebb írtuk, a felvételen az alany 60 sec-nél egy mélyet lélegzett, majd 75-85-ig felszínesen, ritmikusan. Ez a moduláció már ezen a jelen is jól láthatóan megjelenik, az EKG (zöld) görbe változását szemlélve ebben a tartományban. Ezután a próbáltuk értelmezni a spektrumon látottakat:
3. ábra – EKG spektrum – alacsony frekvenciás jelek Láthatóan az EKG jel a legtöbb információt 40 Hz alatt szolgáltatja. Általában az izomremegés végett 35 Hz-es alul áteresztő szűrővel szokták szűrni a jelet. Mivel ez a feladat
szempontjából nem releváns, 20 Hz-es alul áteresztő szűrővel szűrtük le. Így, bár információt veszítünk, de jobban vizsgálhatjuk a légzés hatását.
4. ábra – EKG jel – 20 Hz szűrt jel Mint látható, így már egy tisztább jelet kaptunk. Erről azonban még nem vonhattunk le következtetést. Következőleg R hullám detektálást végeztünk a jelen, hogy megállapítsuk, hogy milyen volt szív frekvenciája. Ehhez az előzőekben megírt Pan-Tompkins algoritmust használtuk fel. Az első és utolsó jelet nem értékeltük, hiszen a mérés indítása és leállítása torzította ezeket.
5. ábra – R hullám detektálás EKG jelen Az így kapott átlagos RR távolság és ennek szórása: Á
á
á : 613.9939
ó á : 49.9483 Az ebből számított ütések száma és a pulzusszám: Üé
á : 164
1 á : 99 !"
Az átlagos szívfrekvencia – amit az R hullámok alapján számoltunk: í $ %
" ! : 1,6381 '
A következőkben a frekvencia spektrumot szemrevételeztük. Az előzőekből arra következtettünk, hogy a szívfrekvencia az előbb számolt RR frekvencia körül kell, hogy csoportosuljon. Mivel egy egészséges, átlagos felnőtt 15 belégzést produkál egy perc alatt, maga a légzés egy alacsony frekvenciájú jel kell, hogy legyen.
6. ábra – Szűrt EKG spektrum A spektrum felbontását 0,1 Hz-re vettük. A legalacsonyabb, még elkülöníthető komponens 0,056 Hz-nél van. Mivel a légzés alacsony frekvenciatartományú és ezek a komponensek is okozhatják az EKG alapvonal vándorlását, ezért valószínűsítettük, hogy ezek a jelek nagyrészt a légzéshez köthetők. Ennek megállapítására további vizsgálatokat végeztünk el. Elsőként leszűrtük a jelet egy 0,2 Hz-es felül áteresztő szűrővel, így eltávolítva a legalacsonyabb frekvenciájú komponenseket, de benne hagyva azokat, amik valószínűsíthetőleg a légzésnek az alapvonal vándorlásával álltak kapcsolatban. Ezután leszűrtük ugyanezt a jelet egy 10 Hz-es felül áteresztő szűrővel is, hogy megnézzük, sikerült e ezt a zavart eltávolítani belőle, és tényleg az alacsonyabb frekvenciájú komponensek voltak felelősek a légzésért. Ábrázolásunkkor a 0,2 Hz-től szűrt jelet, a jobb láthatóság kedvéért eltoltuk 2 mV-al. Mindkét jelre ráillesztettünk egy fedővonalat, aminek alapja az R hullámok detektálása volt.
7. ábra – Nyugalmi EKG, szűrt jelek Ebből már teljesen nyilvánvaló volt, hogy a légzés jelentősen befolyásolja az EKG görbe változását. Azt vártuk, hogy az alacsonyabb frekvenciájú, légzéssel terhelt EKG (piros), a légzésnek megfelelő alapvonal vándorlást mutatni fogja, valamint az ettől leszűrt jel (zöld) egyenletes lesz és a kapott ábra megfelelt a várakozásainknak. Ezen túl, előtanulmányainkból már tudtuk, hogy a légzés úgy modulálja a szívfrekvenciát, a központok anatómiai elhelyezkedése végett (a légzésközpont és a szívfrekvenciát beállító központ is a nyúltvelőben helyezkedik el, részben fedve egymást), hogy belégzésnél a szívfrekvencia gyorsul, majd kilégzésnél lassul. Ennek felderítése a későbbi feladatok része, egyelőre elértük ezen feladat követelményeit és bizonyítottuk, hogy a légzésnek a szívfrekvenciára kifejtett egyik hatása, hogy jelentősen modulálja az alapvonalat. Megszemlélve a 7. ábrát látható, hogy a „légzésmentes” (zöld) jel mennyivel egyenletesebb, mint a légzési komponenseket tartalmazó vörös jel. Mint korábban említettük, az alany 60 sec-nél mély belégzést végzett. Ez mindkét jelen jól megfigyelhető. Az megállapítottuk, hogy ez a hosszanti belégzés 10 Hz feletti komponenseket is tartalmazott, hiszen megjelent a szűrt jelünkben is. A 75-től 85 sec-ig tartó felületes, ritmikus légzés a fentebbi, vörös jelen még jól látszik, de ennek úgy tűnik, minimális 10 Hz feletti komponense volt. Továbbá az is látszik, hogy a mély, hosszú belégzés az EKG jel amplitúdóját csökkentette, ez mindkét jelen megfigyelhető. B, Mint az előzőekben megállapítottuk a szívfrekvencia nem állandó. Természetesen itt a szívfrekvenciát az R hullámokból kalkuláltuk. Ezen a mintán (Nr. 1.) az átlagos R távolságból számolt szívfrekvencia: í $ % " ! : 1.6381 ' Ennek a szórása ó á : 0.1177 ' Ebből az adatból látható, hogy a szívfrekvencia nem állandó. A légzési frekvencia jellemzésére legszemléletesebben egy másik regisztrátumon mutathatjuk be. Készült egy olyan felvétel, ahol az alany különbözőképpen vett levegőt, meghatározott
időpontokban. A légzési frekvencia változásának jellemzése az EKG jelből nem egyszerű. Sokkal jobb eredményt étünk volna el, ha rendelkezésünkre áll spirometriás jel. Ennek hiányában a légzési frekvencia változását úgy tudtuk szemléletesen jellemezni, hogy megfigyeltük a légzésnek az EKG görbe alapvonal vándorlást okozó jellegét. Feltételeztük, hogy a légzésre legjellemzőbb frekvenciakomponensek, mint azt már említettük, a spektrumban alacsony értékűek, hiszen a normál légzési frekvencia 0,25 Hz körüli. Azt feltételeztük, hogy az e körüli jelek, amik az EKG-ra rakódnak, jól jellemzik ezt a jelenséget. Elsőként 20 Hz-es alul áteresztő szűrővel szűrtük a jelet. A jellemzéshez ez előzőekben ismertetett módszert használtuk fel. Leszűrtük a jelet egy 0,3 Hz-es alul és egy 10 Hz-es felül áteresztő szűrőn. A következő ábra is hasonló eredményt hozott, mint az előzők, de talán még szemléletesebb:
8. ábra – EKG jel Jól látható, hogy a légzéssel azonosított alacsony frekvencián a különböző légzési feladatoknak (0-20 sec: mély, lassú légzés, 40-60 sec: kapkodó, szapora légzés, 70-80 sec: hiperventilláció) megfelelően változik a jel. „+é
é , ” ó á
: 0,1742 /
Használt Matlab kódok: %%%%%%%%%%%%%%%%%%%%%%%%%OSG mérés%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all, close all, clc; %% % 1. Légzés hatása a szívfrekvenciára % % A, % % load('ballapetra1_nyugodt_100_.mat'); % % % Értékek u [mV] szerint % u=(a.ecg1-4096)*(3.3/2048);
M1.
% % Nullnívóra tolás % ecg=u-mean(u); % % %Első 2,6 (egy P hullám előtt) és utolsó 2 másodperc levágása % % ecg=ecg(2000:end); % % ecg=ecg(1:end-2000); % % % Adatok % fs=1015; %Mintavételi frekvencia % T = 1/fs; %Mintavételi idő % Hossz=length(ecg); %Jel hossza % % %Szűrések % ecg2=savszuro(ecg,49,53); % ecg3=savszuro(ecg2,150,155); % ecg4=savszuro(ecg3,250,255); % ecg5=savszuro(ecg4,350,355); % ecg6=alulszuro(ecg5,20); % % % % plot((1:length(ecg))/fs,ecg) % % hold on % % % plot((1:length(ecg))/fs,ecg5,'g'); % % plot((1:length(ecg6))/fs,ecg6,'b'); % % title('Nyugalmi EKG') % % xlabel('T [sec]') % % ylabel('U [mV]') % % axis([0 100 -5 5]) % % hold off % % %Frekvenciaspektrum - Matlab help alapján % % N=fs*1000; %Felbontás % % Y = abs(fft(ecg6,N)); % Pyy =sqrt( Y.* conj(Y))/ N; % f = fs*(0:N/2)/N; % % figure % % plot(f,Pyy(1:N/2+1)) % % grid % % title('Nyugalmi EKG spektruma') % % xlabel('Frekvencia [Hz]') % % ylabel('|Y(f)|') % % %R detektálás % [R_max_hely,R_max_ertek]=pan_tompkins(ecg6); % % ciklushossz=R_max_hely(2:end)-R_max_hely(1:end-1); % atlagos_ciklushossz=mean(R_max_hely(2:end)-R_max_hely(1:end-1)); % ciklushosszszoras=std(R_max_hely(2:end)-R_max_hely(1:end-1)); % % utesszam=length(R_max_ertek); % pulzusszam=utesszam/(length(ecg)/fs)*60; % % szivfrekvencia=1./(ciklushossz./1000); % szivfrek=mean(szivfrekvencia); % szivfrekszoras=std(szivfrekvencia); % % % plot((1:length(ecg6))/fs,ecg6) % % hold on % % plot(R_max_hely/fs,R_max_ertek,'r')
% % title('Nyugalmi EKG'); % % xlabel('T [sec]'); % % ylabel('U [mV]'); % % axis([0 96 -3 3]) % % hold off % % fleg=0.2; % fecg=10; % [B1,A1]=butter(4,2*fleg/fs,'high'); % [B2,A2]=butter(4,2*fecg/fs,'high'); % E1=filtfilt(B1,A1,ecg6); % E2=filtfilt(B2,A2,ecg6); % [Rh1,Rm1]=pan_tompkins(E1); % [Rh2,Rm2]=pan_tompkins(E2); % % hold on % % plot((1:length(E1))/fs,E1+2,'r') % % plot(Rh1/fs,Rm1+2,'b') % % plot((1:length(E2))/fs,E2,'g') % % plot(Rh2/fs,Rm2,'b') % % axis([0 100 -1 4]) % % title('Szűrt EKG jelek'); % % xlabel('T [sec]'); % % ylabel('U [mV]'); % % legend('EKG 0,2 Hz HPF','R csúcsokra fektetett vonal','EKG 10 Hz HPF',... % % 'R csúcsokra fektetett vonal'); % % hold off % B, % fs=1015; % % load('ballapetra3_100_legzesmod.mat'); % % % Értékek u [mV] szerint % u=(a.ecg1-4096)*(3.3/2048); % % Nullnívóra tolás % ekg=u-mean(u); % % ekg1=alulszuro(ekg,20); % ekg2=alulszuro(ekg1,0.3); % ekg3=felulszuro(ekg1,10); % % [Rmh1,Rme1]=pan_tompkins(ekg2); % [Rmh2,Rme2]=pan_tompkins(ekg3); % % Legzszor=std(ekg2); % % % hold on % % plot((1:length(ekg3))/fs,ekg3,'g') % % plot((1:length(ekg2))/fs,ekg2,'b') % % xlabel('T [sec]'); % % ylabel('U [mV]'); % % legend('EKG 10 Hz HPF + 20 Hz LPF','EKG 0,3 Hz LPF + 20 Hz LPF'); % % hold off
3, Vizsgálják meg a PPG jel frekvenciatartalmát • normál nyugalmi helyzetben, • rövid fizikai igénybevételt (pl. 30 guggolás vagy 2 perc helyben futás) követően, • visszatartott lélegzet mellett (legfeljebb 30 másodpercre), • ütemezett légzés mellett (a vizsgált személy ütemező jelre – pl. 4 másodpercenként - kezdi el a belégzést) Értékeljék a kapott eredményeket. A, Normál, nyugalmi helyzet A felhasznált forrás a Nr. 3-as számú volt. A felvétel hossza 100 másodperc volt, normál, nyugalmi helyzetben. A feldolgozáshoz a jobb oldali infravörös LED-es fotopletizmográfiás PPG jelet választottuk. Az összehasonlítás kedvéért ezután végig ezzel dolgoztunk a továbbiakban is.
9. ábra – Nyugalmi PPG jel, jobb oldal Sajnos ez volt a legszebb alakú jel ebből a sorozatból. Következőkben megvizsgáltuk a jel frekvenciaspektrumát.
10. ábra - Nyugalmi PPG frekvenciaspektrum, jobb oldal Jól láthatóan a spektrumban alacsony frekvenciás jelek vannak.
11. ábra - Nyugalmi PPG frekvenciaspektrum, jobb oldal Azt mondhatjuk, hogy gyakorlatilag a jelnek 25 Hz felett nincs értékelhető komponense. Ez nem meglepő, hiszen itt is az EKG-nak megfelelő frekvenciatartományú jeleket kell kapnunk. A szívciklusok hossza nagyjából meg kell hogy egyezzen az EKG-ból detektált hosszakkal, emiatt mondhatjuk, hogy a spektrumban hasonló jelek kell, hogy legyenek. Feltételeztük, hogy itt is megjelenik a légzés, mint egyfajta alapvonal modulátor, bár talán nem annyira jelentősen, mint az EKG-nál, hiszen más módszerrel került a jel rögzítésre. Ez az oka annak is, hogy itt a hálózati zaj illetve mindenféle elektromos zavar nincs jelen – a fotopletizmográfiós felvételi módszer miatt.
Ezen feltételezés megerősítése végett ábrázoltuk a teljesítményspektrumot is. Ebből bebizonyosodott, hogy kb. 50 Hz felett nincs „energia” a spektrumban – vagyis hasznos jel -, eltekintve egy kis kiugrástól 63 Hz környékén.
12. ábra – Teljesítménysűrűség spektrum, jobb PPG Következő lépésként megvizsgáltuk, hogy szűrők alkalmazásával javítottuk a jelet, amire a ciklushossz kiszámítása miatt volt szükség. Itt a feltételezéseinknek megfelelő frekvenciatartományokat használtunk fel (0.5 Hz alul áteresztő – légzés miatt, 5 Hz felül áteresztő – e felett nincs számunkra ehhez a vizsgálathoz releváns jel).
13. ábra – Eredeti és szűrt PPG jel A szűrés itt is segített, látható, hogy a jel elején a légzés az eredeti jelen jelentős alapvonal vándorlást indukált (az alany ásított ebben a tartományban), amit a szűrés csökkentett. 0!%
ℎ
: 799,6992
ó á : 110.8042 í $ %
≈ 13,86 %
" ! : 1,2692 ' á : 76,1536
1 !"
Ezeket az értékeket úgy kaptuk meg, hogy eltávolítottuk a felvétel első 2 másodpercét, mert egy hosszabb szakaszon konstans jel volt található, emiatt az algoritmusunk nem adott megbízható, reális eredményt. A számoláshoz a Matlab saját példafüggvényét (localMaximum) használtuk fel. Ez az érték (1,2692 Hz) a frekvenciaspektrumban is jól látható, egy nagy kiugró tüske képében. B, Rövid fizikai igénybevétel A felhasznált forrás a Nr. 4-es számú volt. A felvétel hossza 150 másodperc volt, rövid, erős fizikai igénybevétel esetén. Itt azt tudtuk megvizsgálni, hogy hogyan áll vissza az alany pulzusa normál tartományba. Az előzetes elvárásunk az volt, hogy a jelek magasabb frekvenciatartományba tolódtak el, valamint hogy a légzés nagyobb mértékű alapjel vándorlást okozott. Ezekkel a feltételezésekkel kezdtünk neki az elemzésnek.
14. ábra – Rövid igénybevétel – jobb PPG jel A jelet szemrevételezve azt vettünk észre, hogy jóval sűrűbb, mint az előző, vagyis nagyobb frekvenciájú. A mérés kezdetétől számítva folyamatosan „mélyült” a pulzus, vagyis nőtt az amplitúdója. Ennek magyarázata, hogy az igénybevétel megszűntével még egy ideig a szervezet, - felkészülve a megpróbáltatásokra – tovább növelte a fizikai aktivitáshoz való alkalmazkodást (pulzus mélyítés), de láthatóan a frekvencia némileg csökkent. 135 másodpercnél a jelben nagymértékű változás állt be. Ennek oka lehet, hogy az alany szervezet
a pulzus amplitúdóját lecsökkentette, de elképzelhető, hogy mérési pontatlanság történt, mert szemrevételezve az ábrát, a változás elég hirtelen történt. Következőkben ismét a frekvenciatartományt vizsgáltuk meg. Itt, bár választhattunk volna más ábrázolási módot is (MSD,PSD), ismét a teljesítménysűrűséget (Welch szerinti) ábrázoltuk.
15. ábra – Rövid igénybevétel – jobb PPG frekvenciaspektrum
16 ábra - Teljesítménysűrűség spektrum, jobb PPG Ahogy vártuk, a frekvenciaspektrumban látszik, hogy a jelek magasabb tartományba kerültek és némileg jobban szétoszlanak, mint az előbb. Ez abból adódhat, hogy a szív frekvencia növelése nem folyamatos volt, hanem szakaszosan, az igénybevételnek megfelelően következett be. A 16. ábrán továbbá látható, hogy itt is hasonló a tendencia, mint nyugalmi helyzetben, vagyis 50 Hz felett nincs jelentős tartalom. Azonban sokkal kisebb a szórása a jelnek, sűrűbb.
0!%
ℎ
: 507,0512 ó á : 64,8569 ≈ 12,79 % í $ % " ! : 2,0018 ' 1 á : 120,1026 !" A fenti értékek kiszámításához ugyanazon módszereket alkalmaztuk, mint az előzőekben. Ezen értékek is pontosan a várakozásainknak megfelelőek voltak, a pulzus frekvencia a spektrumban 2 Hz körüli kiemelkedő értékben jelentkezett. Sajnos, az előző, nyugalmi állapot jele nem volt a „legszebb”, ezért bár jelentős, de nem drámai mértékű az eltérés a fenti értékek között. Az előző nyugalmi pulzushoz képest itt az alany szervezete az igénybevételnél megszokott, átlagos 120 körüli pulzust produkálta. Azért, hogy valamivel pontosabb felbontásban is elvégezzük az elemzést, a teljes jelet öt részre osztva is meghatároztuk a vitál értékeket és az alábbi táblázatban rögzítettük azokat.
Ciklushossz [ms] Szórás [%] Szívfrekvencia [Hz] Pulzusszám [1/min]
1. 2-30 mp
2. 30-60 mp
3. 60-90 mp
4. 90-120 mp
5. 120-150 mp
386,965
428,766
461,300
493,866
550,724
2,66
4,78
2,39
3,56
6,15
2,620
2,367
2,200
2,055
1,843
157,3784
142,0353
132,0182
123,3126
110,5817
2. táblázat Ezzel a felbontással még pontosabban láthatjuk, hogy az alany pulzusa kezdetben, a megerőltetés miatt 150 1/min körüli volt, majd fokozatosan csökkent az igénybevétel megszűntével. Ezek a pontosabb összetevők a spektrumban tökéletesen kivehetők. Az előzőhöz hasonlóan itt is szerettük volna kimutatni a légzés hatását. Ugyanazon frekvenciaértékű szűrőkkel szűrtünk, mégis látszik, hogy a légzés magasabb tartományba tolódása miatt a szűrt jelben jobban megjelenik a légzésnek az alapvonal vándorlásra kifejtett hatása. Az ábrázolásnál a jel elején lévő torzulás miatt az első két másodpercet elhagytuk.
17. ábra - Szűrt jelek C, Lélegzet visszatartása A felhasznált forrás a Nr. 5-es számú volt. A felvétel hossza 100 másodperc volt. Sajnos a felvétel készítésénél elkövettük azt a hibát, hogy mind a négy vizsgálni kívánt jelet egy személyről vettük fel. Ez nem lett volna probléma, de mivel ugyanarról készült a felvétel, aki a fizikai terhelést is végezte, nem voltunk biztosak benne, hogy biztos következtetést tudunk levonni a jelből, hiszen még nem normál, nyugalmi pulzus mellett történt a jelfelvétel, hanem a fizikai igénybevételnek, a szervezetre kifejtett hatásának lecsengése mellett.
18. ábra – Visszatartott lélegzet – jobb PPG jel Megfigyelhető, hogy a jel nagymértékben modulált. 35 másodpercig nem történ légzés, mégis, nagymértékű a moduláció. Ezt annak tudtuk be, hogy az alany szervezete a „megrázkódtatás” után „alaphelyzetbe” állt vissza, ezért volt ez a szakaszos ingadozás.
A frekvenciaspektrum elemzésekor azt vártuk, hogy, mivel légzés nem történt 35 másodpercig a légzés alacsony frekvenciájú jeleit nem fogjuk megtalálni. Ahhoz, hogy ezt szemléltessük, a jelet két részletben elemeztük, 1-től 35 másodpercig, majd 36-tól 100 másodpercig.
19. ábra –Visszatartott légzés, jobb PPG frekvenciaspektrum A spektrumban nem egészen azt láttuk, amit elvártunk volna – ez lehetséges, hogy a nem túl körültekintően megválasztott jelfelvételből eredt. Visszatartott légzés mellett is voltak általunk a légzéshez sorolt alacsonyabb frekvenciájú jelek, de nem akkora amplitúdóval, mint az előző két esetben. A szívfrekvencia fő komponensei mindkét esetben 1,5 Hz körül csoportosultak. Normál légzési tartományban a légzés komponensei elmosódotabbakká váltak. Ezt azzal magyaráztuk, hogy a szapora, kapkodó légzés miatt nőtt a légzési frekvencia. A szívfrekvencia, bár nem változott, de amplitúdója jelentősen nőtt. Vagyis a szervezet növelte a vérszállítási volument.
20 ábra - Teljesítménysűrűség spektrum, jobb PPG, visszatartott és normál légzés
A 20. ábrán jól látszik, hogy visszatartott légzésnél nincs nagy amplitúdó ingadozás, vagyis egyenletesebben oszlott el az „energia” a spektrumon, ez nagy valószínűséggel a levegő visszatartásának következménye volt. Második esetben Jelentős amplitúdó ingadozások vannak a teljesítménysűrűségben. Látható, hogy jel frekvenciakomponensei közeledtek egymáshoz, nincsenek lelapítva, mint első esetben, emiatt az amplitúdójuk, vagyis „energiájuk” növekedett. Ez is a vértérfogat volumen növelésének következménye. A két részre bontott jel fő paramétereit táblázatban közöltük:
Ciklushossz [ms] Szórás [%] Szívfrekvencia [Hz] Pulzusszám [1/min]
1. 1-35 mp
2. 36-100 mp
719,470
666,595
18,12
12,41
1,4108
1,5227
84,6456
91,3599
3. táblázat A táblázat értékei alátámasztják a megfigyelésünket, miszerint, a szervezet, hogy kompenzálja az oxigén hiányát és hasznosítsa a vérben lévő még felhasználható oxigént, növelte a szívfrekvenciát, vagyis növelte a pulzust. Hosszabb ideig tartó légvétel szüneteltetésekor valószínűleg folytatódott volna ez a tendencia, a pulzus egyre nőtt volna egy kritikus szintig. Elvégeztük a teljes jelen az eddig alkalmazott szűréseket, hogy lássuk, hogy modulálja a légzés a jelet. Sajnos, a szerencsétlen felvétel miatt ebből nem tudtunk következtetést levonni. Az jól látszik, hogy a légzés visszatartásának megszűnte után a jel amplitúdója növekedett. Ez az előbbiekben felsoroltak miatt következett be.
21. ábra - Szűrt jelek
D, 4 másodperces ütemezett légzés vizsgálata A felhasznált forrás a Nr. 6-es számú volt. A felvétel hossza 100 másodperc volt. Az alany 4 másodpercenként ütemezetten lélegzett, próbálva tartani a 2 másodperc be, illetve két másodperc kilégzési időt. Előzetes várakozásunk az volt, hogy mind a jelünk alapvonal vándorlásának modulációjában, mind pedig a spektrumban ki tudjuk mutatni ezt az ütemes, ritmikus jelet.
22. ábra – Ritmikus légzés – jobb PPG jel A jelet szemrevételezve látható benne, főleg az első részen egy nagyfokú periodicitás. Ez később elmosódik, valamint félbeszakítja néhány nagy „tüske”, amiket valószínűleg a ritmustól való eltérés, valamint egy hiperventilláltabb állapot okozhatott. A jel amplitúdója 30 másodperctől kezdve folyamatosan nő.
23. ábra – Ütemezett légzés, jobb PPG spektrum
Mivel a belégzés 4 másodpercenként történt, vagyis 0,25 Hz-es frekvenciával, azt várhattuk, hogy ez megjelenik kiemelve a spektrumban is. Ezt a komponenst meg is találtuk, jól látszik. Azért, mert az alany nem mindig tudta tartani az ütemet, néha kibillent belőle, illetve a 2 másodperc be és kilégzés a felvétel vége felé már kellemetlenséget okozott neki, nem kaptunk akkora kiugró értéket, mint amire számítottunk. De a légzési komponensek így is koncentráltabbak, mint az eddigi esetekben, a 0,25 Hz környékére esnek.
24. ábra - Teljesítménysűrűség spektrum, jobb PPG, ütemezett légzés A 24. ábrán az látszik, hogy a spektrum „energiája” alacsonyabb komponensek felé tolódott el, szinte már csak zajt találunk 20 Hz felett. Itt is megjelent 63 Hz környékén a tüske, amire korábban utaltunk. Ezt a mérés sajátságának tudtuk be. Alább láthatók a főbb paraméterek: 0!%
ℎ
: 678,9931 ó á : 98,1107 ≈ 14,45 % í $ % " ! : 1,4949 ' 1 á : 89,6916 !" Az adatok a várakozásinkat tükrözték. Mivel folyamatos, ritmikus belégzés történt, ezért várható volt egy magasabb pulzusszám az állandó légzési „ingerlés” miatt. A spektrumban szépen látszik a szívfrekvencia és komponensei. A szűréseket, természetesen itt is elvégeztük, ugyanazokat a paramétereket használva, az összehasonlíthatóság kedvéért.
25. ábra – Szűrt jelek Az ábrán jól látszik, hogy az alacsonyabb frekvenciájú komponensek (mivel, mint megállapítottuk magasabb frekvenciájú komponensek nem számottevőek) hogyan változtatták a jelet. Ez főként a kiemelkedésekben jelenik meg, mint például 30-40 másodperc között, illetve a negatív tartományú kiugrásokon látszik jól. Használt Matlab kódok: % 2. PPG jel frekvenciatartalma % % A, % % fs=1015; % % load('eignergyorgy2_100_PPG1.mat'); % % ppgl=a.ppgl_red; % ppgli=a.ppgl_nir; % ppgr=a.ppgr_nir; % % hold on % plot((1:length(ppgl))/fs,ppgr); % title('Jobb PPG jel'); % xlabel('T [sec]'); % ylabel('Data'); % hold off % % % Értékek u [mV] szerint % u=(a.ecg1-4096)*(3.3/2048); % % Nullnívóra tolás % ecg=u-mean(u); % % % Adatok % fs=1015; %Mintavételi frekvencia % T = 1/fs; %Mintavételi idő % Hossz=length(ecg); %Jel hossza % % % Frekvenciaspektrum - Matlab help alapján
% % N=fs*1000; %Felbontás % % % ppgrn=ppgr-mean(ppgr); % x=ppgrn; % % Y = abs(fft(x,N)); % Pyy =sqrt( Y.* conj(Y))/ N; % f = fs*(0:N/2)/N; % % plot(f,Pyy(1:N/2+1)) % % grid % % title('Nyugalmi PPG spektruma') % % xlabel('Frekvencia [Hz]') % % ylabel('|Y(f)|') % % x_=x(2000:end); %első 2 mp eltávolítva % % % pwelch(x_,[],[],[],fs); % % x_1=alulszuro(x_,5); % x_2=felulszuro(x_1,0.5); %% % % % plot((1:length(x_))/fs,x_) % % % hold on % % % plot((1:length(x_))/fs,x_2,'r') % % % title('Nyugalmi PPG'); % % % xlabel('T [sec]'); % % % ylabel('Data'); % % % legend('PPG jel','Szűrt PPG - 0.5 Hz HPF + 5 Hz LPF'); % % % axis([0 96 -3000 3000]) % % % hold off %% % Pmax =localMaximum(x_2,550); % % % plot(x_2) % % % hold on % % % plot(Pmax, x_2(Pmax), 'rX') % % ciklushossz=Pmax(2:end)-Pmax(1:end-1); % ciklhossz_atl=mean(ciklushossz) % szoras=std(ciklushossz); % szaz_szor=szoras/ciklhossz_atl; % fsziv=(1/(ciklhossz_atl/fs)); % pulzus=(1/(ciklhossz_atl/fs))*60;
% B, % fs=1015; % % load('eignergyorgy3_150_PPG2.mat'); % % ppgr=a.ppgr_nir; % x=ppgr; % % % hold on % % plot((1:length(ppgr))/fs,ppgr); % % title('Jobb PPG jel'); % % title('Jobb PPG jel - rövid fizikai igénybevétel'); % % xlabel('T [sec]');
% % ylabel('Data'); % % hold off % % % Értékek u [mV] szerint % u=(a.ecg1-4096)*(3.3/2048); % % Nullnívóra tolás % ecg=u-mean(u); % % % Adatok % fs=1015; %Mintavételi frekvencia % T = 1/fs; %Mintavételi idő % Hossz=length(ecg); %Jel hossza % % % Frekvenciaspektrum - Matlab help alapján % % N=fs*1000; %Felbontás % % % ppgrn=ppgr-mean(ppgr); % x=ppgrn; % % Y = abs(fft(x,N)); % Pyy =sqrt( Y.* conj(Y))/ N; % f = fs*(0:N/2)/N; % % plot(f,Pyy(1:N/2+1)) % % grid % % title('Nyugalmi PPG spektruma') % % xlabel('Frekvencia [Hz]') % % ylabel('|Y(f)|') % % % pwelch(x,[],[],[],fs); % % x_=x(2000:end); %első 2 mp eltávolítva % % x_1=alulszuro(x_,5); % x_2=felulszuro(x_1,0.5); % % % plot((1:length(x_))/fs,x_) % % hold on % % plot((1:length(x_))/fs,x_2,'r') % % title('Nyugalmi PPG'); % % xlabel('T [sec]'); % % ylabel('Data'); % % legend('PPG jel','Szűrt PPG - 0.5 Hz HPF + 5 Hz LPF'); % % axis([0 96 -3000 3000]) % % hold off % % Pmax =localMaximum(x_2,550); % % plot(x_2) % % hold on % % plot(Pmax, x_2(Pmax), 'rX') % % % ciklushossz=Pmax(2:end)-Pmax(1:end-1); % % ciklhossz_atl=mean(ciklushossz) % % szoras=std(ciklushossz) % % szaz_szor=szoras/ciklhossz_atl % % fsziv=(1/(ciklhossz_atl/fs)) % % pulzus=(1/(ciklhossz_atl/fs))*60 % % %5 részre bontás
% cikl1=Pmax(2:30)-Pmax(1:30-1); % cikl2=Pmax(31:60)-Pmax(30:60-1); % cikl3=Pmax(61:90)-Pmax(60:90-1); % cikl4=Pmax(91:120)-Pmax(90:120-1); % cikl5=Pmax(121:end)-Pmax(120:end-1); % ciklatl1=mean(cikl1) % ciklatl2=mean(cikl2) % ciklatl3=mean(cikl3) % ciklatl4=mean(cikl4) % ciklatl5=mean(cikl5) % szoras1=std(cikl1) % szoras2=std(cikl2) % szoras3=std(cikl3) % szoras4=std(cikl4) % szoras5=std(cikl5) % szaz_szor1=szoras1/ciklatl1 % szaz_szor2=szoras2/ciklatl2 % szaz_szor3=szoras3/ciklatl3 % szaz_szor4=szoras4/ciklatl4 % szaz_szor5=szoras5/ciklatl5 % fsziv1=(1/(ciklatl1/fs)) % fsziv2=(1/(ciklatl2/fs)) % fsziv3=(1/(ciklatl3/fs)) % fsziv4=(1/(ciklatl4/fs)) % fsziv5=(1/(ciklatl5/fs)) % pulzus1=(1/(ciklatl1/fs))*60 % pulzus2=(1/(ciklatl2/fs))*60 % pulzus3=(1/(ciklatl3/fs))*60 % pulzus4=(1/(ciklatl4/fs))*60 % pulzus5=(1/(ciklatl5/fs))*60
% % C, % % fs=1015; % % load('eignergyorgy4_100_PPG3_.mat'); % % ppgr=a.ppgr_nir; % x=ppgr; % % hold on % plot((1:length(ppgr))/fs,ppgr); % title('Jobb PPG jel'); % title('Jobb PPG jel - légzés visszatartása'); % xlabel('T [sec]'); % ylabel('Data'); % hold off % % % Értékek u [mV] szerint % u=(a.ecg1-4096)*(3.3/2048); % % Nullnívóra tolás % ecg=u-mean(u); % % % Adatok % fs=1015; %Mintavételi frekvencia % T = 1/fs; %Mintavételi idő % Hossz=length(ecg); %Jel hossza % % % Frekvenciaspektrum - Matlab help alapján
% % N=fs*1000; %Felbontás % % % ppgrn=ppgr-mean(ppgr); % x=ppgrn; % % Y1 = abs(fft(x(1:35000),N)); % Y2 = abs(fft(x(36000:end),N)); % Pyy1 =sqrt( Y1.* conj(Y1))/ N; % Pyy2 =sqrt( Y2.* conj(Y2))/ N; % f1 = fs*(0:N/2)/N; % f2 = fs*(0:N/2)/N; % % hold on % % plot(f1,Pyy1(1:N/2+1),'g'); % % plot(f2,Pyy2(1:N/2+1),'r'); % % grid % % title('PPG spektrum') % % xlabel('Frekvencia [Hz]') % % ylabel('|Y(f)|') % % legend('Visszatartott légzés','Normál légzés'); % % hold off % % % hold on % % subplot(2,1,1); % % pwelch(x(1:35000),[],[],[],fs); % % legend('Légzés visszatartva') % % subplot(2,1,2); % % pwelch(x(36000:end),[],[],[],fs); % % legend('Normál légzés') % % hold off % % x_=x(2000:end); %első 2 mp eltávolítva %% % x_1=alulszuro(x_,5); % x_2=felulszuro(x_1,0.5); % % % plot((1:length(x_))/fs,x_) % % hold on % % plot((1:length(x_))/fs,x_2,'r') % % title('Nyugalmi PPG'); % % xlabel('T [sec]'); % % ylabel('Data'); % % legend('PPG jel','Szűrt PPG - 0.5 Hz HPF + 5 Hz LPF'); % % axis([0 96 -3000 3000]) % % hold off % % Pmax =localMaximum(x_2,550); % plot(x_2) % hold on % plot(Pmax, x_2(Pmax), 'rX') % % % ciklushossz=Pmax(2:end)-Pmax(1:end-1); % % ciklhossz_atl=mean(ciklushossz) % % szoras=std(ciklushossz) % % szaz_szor=szoras/ciklhossz_atl % % fsziv=(1/(ciklhossz_atl/fs)) % % pulzus=(1/(ciklhossz_atl/fs))*60 % % % 2 részre bontás
% cikl1=Pmax(2:35)-Pmax(1:35-1); % cikl2=Pmax(36:end)-Pmax(35:end-1); % ciklatl1=mean(cikl1) % ciklatl2=mean(cikl2) % szoras1=std(cikl1) % szoras2=std(cikl2) % szaz_szor1=szoras1/ciklatl1 % szaz_szor2=szoras2/ciklatl2 % fsziv1=(1/(ciklatl1/fs)) % fsziv2=(1/(ciklatl2/fs)) % pulzus1=(1/(ciklatl1/fs))*60 % pulzus2=(1/(ciklatl2/fs))*60
% D, % fs=1015; % % load('eignergyorgy4_100_PPG3_.mat'); % % ppgr=a.ppgr_nir; % x=ppgr; % hold on % plot((1:length(ppgr))/fs,ppgr); % title('Jobb PPG jel'); % title('Jobb PPG jel - Ritmikus légzés'); % xlabel('T [sec]'); % ylabel('Data'); % hold off % Értékek u [mV] szerint % u=(a.ecg1-4096)*(3.3/2048); % % Nullnívóra tolás % ecg=u-mean(u); % % % Adatok % fs=1015; %Mintavételi frekvencia % T = 1/fs; %Mintavételi idő % Hossz=length(ecg); %Jel hossza % % % Frekvenciaspektrum - Matlab help alapján % % N=fs*1000; %Felbontás % % % ppgrn=ppgr-mean(ppgr); % x=ppgrn; % % Y = abs(fft(x,N)); % Pyy =sqrt( Y.* conj(Y))/ N; % f = fs*(0:N/2)/N; % plot(f,Pyy(1:N/2+1)) % grid % title('Ütemezett légzés') % xlabel('Frekvencia [Hz]') % ylabel('|Y(f)|')
% pwelch(x,[],[],[],fs); % x_=x(2000:end); %első 2 mp eltávolítva % % x_1=alulszuro(x_,5); % x_2=felulszuro(x_1,0.5); % % plot((1:length(x_))/fs,x_) % hold on % plot((1:length(x_))/fs,x_2,'r') % title('Nyugalmi PPG'); % xlabel('T [sec]'); % ylabel('Data'); % legend('PPG jel','Szűrt PPG - 0.5 Hz HPF + 5 Hz LPF'); % axis([0 96 -3000 3000]) % hold off %% % Pmax =localMaximum(x_2,550); % plot(x_2) % hold on % plot(Pmax, x_2(Pmax), 'rX') % % ciklushossz=Pmax(2:end)-Pmax(1:end-1); % ciklhossz_atl=mean(ciklushossz) % szoras=std(ciklushossz) % szaz_szor=szoras/ciklhossz_atl % fsziv=(1/(ciklhossz_atl/fs)) % pulzus=(1/(ciklhossz_atl/fs))*60
4, A mérőcsoport minden tagjáról készítsenek felvételt, a HHMD készülék vérnyomásmérő üzemmódjában (HHM ablak bejelölve). Értékeljék a mérést: • hogyan változik az EKG és a PPG közti késleltetés a mandzsettanyomás emelkedésekor, • hogyan változik a PPG jel, amikor a mandzsettanyomás megközelíti a szisztolés nyomást. A jel elején lévő torzulás miatt 2 sec-et levágtunk mindegyik jel elejéből.
26. ábra – A három jel együtt Az ábrán látható, hogy az EKG végig egyenletes volt, eltekintve egy két kisebb kiugrástól. A mandzsetta nyomásának emelkedésével az átlagosan 400 ms-os késleltetés az EKG és PPG jel között némileg nőtt. (A későbbiekben pontosabb, számolt értékekkel is szolgálunk). Nyomásmentes időszakban kb. 20-30 ms-al ingadozott a csúszás. Jól látható, hogy a mandzsetta nyomás fokozódásával a PPG jel egyre inkább ellaposodott, elvesztette a periodicitását, frekventált lett. Egy bizonyos ponton pedig a csökkenése már egyenletes volt. Arra következtettünk, hogy itt érte el a mandzsetta nyomása azt a kritikus értéket, ahol már teljesen elszorította az artériát, vagyis ez volt a szisztolés nyomás értéke. A PPG jelünk körülbelül 61 másodpercnél nyerte vissza a periodicitását, tehát ez volt az az érték, ahol már a pulzushullám maximum át tudott jutni az elszorított artériákban. A görbén jól látszik, hogy 71 másodperc környékén hirtelen negatív csúcsba vált át a PPG jel. Valószínűleg ez volt a diasztolés érték, itt már a teljes elszorított szakasz jól átjárható volt. A hirtelen esés oka lehetett a megnövekedett nyomású vért többé nem fogta vissza akadály, ezért egy nagyobb mennyiség áramlott le a bal karba, rövid idő alatt. A számolt vérnyomásértékek: ! 5!
é: 118,8387 ' é: 78,1935 '
Ezeket az értékeket hihetőnek találtuk. A kritikus tartományt a jobb szemléltetés érdekében felnagyítva is ábrázoltuk:
27. ábra Kritikus tartomány Sajnos a PPG csúcsdetektáló algoritmusunk beragadt a nyomásesés utáni szakaszon, mert a csúcsok detektálásánál 550 ms széles ablakot választottunk, ez pedig egy kb. 2500 ms-es konstans szakasz volt. Így csak az ez előtti részeken tudtunk mérést végezni az átlagos csúszásra ( EKG – PPG) vonatkozóan. Nyomásmentes időszakban: 678 –
8 ú á : 361,5
A nyomás fokozódásának időszakában: 678 – 8 ú á : 651,5 Használt Matlab kód: % 3. feladat % A, fs=1015; load('eignergyorgy6_100_vernyomas1_.mat'); % Adatok betöltése % ecg=(a.ecg1-4096)*(3.3/2048); % ppgl=(a.ppgl_nir-4096)*(3.3/2048); % p=(a.press-175)/(15.5*10); ecg=a.ecg1; ppgl=a.ppgl_nir; p=a.press; % Nullnívóra tolás % ecg=ecg-mean(ecg);
% ppgl=ppgl-mean(ppgl); % p=p-mean(p); %A jobb minőség miatti levágás ecg=ecg(2000:end); ppgl=ppgl(2000:end); p=p(2000:end); %EKG jel kezelése %Szűrés - 20 Hz LPF ecg1=alulszuro(ecg,20); [Rh,Rm]=pan_tompkins((ecg1-mean(ecg1))); % S_ciklushossz=Rh(2:end)-Rh(1:end-1); % S_ciklhossz_atl=mean(S_ciklushossz); % S_szoras=std(S_ciklushossz); % S_szaz_szor=S_szoras/S_ciklhossz_atl; % S_fsziv=(1/(S_ciklhossz_atl/fs)); % S_pulzus=(1/(S_ciklhossz_atl/fs))*60; S_ciklushossz=Rh(60:90)-Rh(59:90-1); S_ciklhossz_atl=mean(S_ciklushossz) S_szoras=std(S_ciklushossz); S_szaz_szor=S_szoras/S_ciklhossz_atl; S_fsziv=(1/(S_ciklhossz_atl/fs)); S_pulzus=(1/(S_ciklhossz_atl/fs))*60; %Bal PPG jel kezelése %Szűrés % x_2=smooth(ppgl,50); x_2=ppgl;
Pmax =localMaximum(x_2,550); % plot(x_2) % hold on % plot(Pmax, x_2(Pmax), 'rX') % hold off for i=1:length(Pmax)-1 if Pmax(i)+300 > Pmax(i+1) Pmax2(i)=Pmax(i); else Pmax2(i)=Pmax(i+1); end end for j=1:length(Pmax2)-1 if Pmax(j)==Pmax(j+1) Pmax2(j)=Pmax(j+1); else Pmax2(j)=Pmax(j); end end
% P_ciklushossz=Pmax(2:end)-Pmax(1:end-1); % P_ciklhossz_atl=mean(P_ciklushossz);
% P_szoras=std(P_ciklushossz); % P_szaz_szor=P_szoras/P_ciklhossz_atl; % P_fsziv=(1/(P_ciklhossz_atl/fs)); % P_pulzus=(1/(P_ciklhossz_atl/fs))*60; P_ciklushossz=Pmax(61:90)-Pmax(60:90-1); P_ciklhossz_atl=mean(P_ciklushossz) P_szoras=std(P_ciklushossz); P_szaz_szor=P_szoras/P_ciklhossz_atl; P_fsziv=(1/(P_ciklhossz_atl/fs)); P_pulzus=(1/(P_ciklhossz_atl/fs))*60; %Nyomásérték % plot(pn) %Ábrázolás % hold on % plot((1:length(ecg1))/fs,ecg1,'c') % plot(Rh/fs,ecg1(Rh),'ro') % plot((1:length(x_2))/fs,x_2,'g') % plot(Pmax2/fs,x_2(Pmax2),'rX') % plot((1:length(p))/fs,p,'r') % xlabel('T [sec]'); % ylabel('Data'); % title('EKG+PPGL+P'); % legend('EKG','EKG R csúcs','PPGL','PPG csúcs','P') % hold off p2=(a.press-175)/15.5; p2(61030); p2(70040); for i=1:6 Valt(i)=Pmax2(i+1)-Rh(i); end mean(Valt); ecgx=ecg1-mean(ecg1); ppgx=ppgl-mean(ppgl); ppg5=ppgx(60000:end); ecg5=ecgx(60000:end); Pmax5=localMaximum(ppg5,550); [Rh5,Rm5]=pan_tompkins(ecg5); for i=1:10 Valt5(i)=Pmax5(i+3)-Rh5(i); end mean(Valt5);