lektrotehnički fakultet - podgorica rad - prezentacija danilo jankovic.pdf · univerzitet crne...
TRANSCRIPT
Univerzitet Crne Gore Elektrotehnički fakultet - Podgorica
Specijalistički rad:
PRILOG O RAZVOJU FLEKSIBILNIH ALGORITAMA ZA DETEKCIJU KARAKTERISTIČNIH TAČAKA
EKG I PPG SIGNALA
Kandidat: Mentor:
Danilo Janković Prof. dr Radovan Stojanović
12/15
Zahvalnica:
Sadržaj
• Problem
• Uobičajena rješenja
• Predlog rješenja
• Rezultati testiranja
• Zaključak
Problem
• Fleksibilno rješenje za ekstrakciju karakterističnih tačaka EKG i PPG signala u cilju određivanja peak-to-peak intervala i varijabilnosti srčanog ritma.
EKG – mjerenje
I = VR – VL; II = VR – VF; III = VL – VF
EKG signal
Karakteristični izgled jedne periode EKG signala
EKG signal - nastavak
Detaljniji prikaz PQRST segmenta EKG signala
RR – ritam kontrakcija komora PP – ritam kontrakcija pretkomora PQ ili PR – 160 ms, 120-200 ms QRS kompleks – gornje granice 100 ili 110 ms ST segment – 200 ms, vrijeme provođenja miokarda (mišićnog tkiva srca) QT – 350 ms, vrijeme trajanja kontrakcije komora
PPG - mjerenje
PPG signal
PPG signal i njegove karakteristične tačke
PPG signal – nastavak
Talasni oblik PPG signala i njegove važne komponente
Zajedničke karakteristike EKG i PPG signala
Periodičnost: (a) PPG i (b) ECG signala
Uobičajena rešenja - Zongov algoritam
Dijagram toka Zongovog algoritma
Zongov algoritam - transfer funkcija
• Transfer funkcija niskopropusnog filtra
𝐻 𝑧 = (1 − 𝑧−5)2
(1 − 𝑧−1)2
Iz transfer funkcije može se izvesti diferencna jednačina:
𝐻 𝑧 = 1 − 𝑧−5 2
1 − 𝑧−1 2=𝑌 𝑧
𝑋 𝑧 ⇒
⇒ 𝑦 𝑛 = 2𝑦 𝑛 − 1 − 𝑦 𝑛 − 2 + 𝑥 𝑛 − 2𝑥 𝑛 − 5 + 𝑥 𝑛 − 10
Zongov algoritam – Sum Slope Function
• Sum Slope Function – SSF
𝑧𝑖 = 𝛥𝑢𝑘,
𝑁
𝑘=𝑖−𝜔
𝛥𝑢𝑘 = 𝛥𝑦𝑘 ∶ 𝛥𝑦𝑘 > 0 0 ∶ 𝛥𝑦𝑘 ≤ 0
gdje je 𝒊 vremenski trenutak, 𝝎 dužina analizirajućeg prozora; 𝟏 + 𝝎 ≤ 𝒊 ≤ 𝑵 , N je ukupni broj odbiraka u ABP zapisu; 𝜟𝒚𝒌 = 𝒚𝒌 −𝒚𝒌−𝟏 , a yk je ABP signal koji je filtriran niskopropusnim filtrom.
Zongov algoritam – pravilo odlučivanja
• Adaptivni thresholding
• Lokalno pretraživanje oko tačke detekcije radi njenog potvrđivanja
• 150 ms širok prozor, razlika maksimuma i minimuma i njeno poređenje sa zadatom vrijednošću
Zongov algoritam - rezultat
Zongov algoritam – predlog rješenja
• Za analizu i testiranje koriščeni su snimljeni PPG i EKG signali u trajanju od 8 minuta sa frekvencijom odabiranja fs=300 Hz u .mat formatu u vidu strukture. Za razliku od Zongovog algoritma koji uzima ABP za polazni signal, ovdje je uzet PPG signal sa vrha prsta.
• (load(ime_fajla.mat'))
SFresults: [1x1 struct]
labels: [1x1 struct]
meta: [1x1 struct]
param: [1x1 struct]
reference: [1x1 struct]
signal: [1x1 struct].
Zongov algoritam – predlog rješenja
• Sam signal nalazi se u dijelu signal: co2: [1x1 struct] pleth: [1x1 struct] % PPG signal ecg: [1x1 struct]% EKG signal id: '0015_8min'. ppg_org=signal.pleth.y; % originalni ppg signal iz structure ili ecg_org=signal.ecg.y; % originalni ekg signal iz strukture brojilac=[1 0 0 0 0 -2 0 0 0 0 1];%koeficijenti brojioca Zongove transfer funkcije imenilac=[1 -2 1];%koeficijenti imenioca Zongove transfer funkcije ppg_filt=filter(brojilac,imenilac,ppg_org);%filter funkcija ili ecg_filt=filter(brojilac,imenilac,ecg_org);%filter funkcija
Zongov algoritam - predlog rješenja
Rezultat filtriranja
Zongov algoritam – predlog rješenja
• U sljedećih nekoliko linija koda se postiže kreiranje SSF funkcije
• for k=(i-w):kraj
if (ppg_filt(k)-ppg_filt(k-1)>0)%provjera uslova razlike izmedju dva odbirka
delta_ppg_filt(k)=ppg_filt(k)-ppg_filt(k-1);%ako je veca od nule
smjestamo u delta
else
delta_ppg_filt(k)=0; %ostalo postavimo na nulu
end
end
Zongov algoritam – SSF PPG
Zongov algoritam – SSF EKG
Zongov algoritam – predlog rješenja sa peakdet
• detekcija preko funkcije peakdet.
signal=delta_ppg_filt(pocetak:kraj); % SSF ppg signal
ili
signal=delta_ecg_filt(pocetak:kraj); % SSF ecg signal
x_signal=(pocetak:1:kraj)/fs; % x osu dijelimo sa fs da bi dobili vrijeme
[maxtab, mintab]=peakdet(signal, delta); %nalazimo pozicije maksimuma i njihove vrijednosti
x1=maxtab(:,1)/fs; %pozicije maksimuma dijelimo sa fs da bi dobili vremensku osu
y1=maxtab(:,2); %vrijednosti maksimuma u tim pozicijama
„međupeak“
Situacija kada imamo “međupeak” tj. detektovanje ekstremuma koji nije maksimum SSF pulsa
„međupeak“ - rješenje j=1; ind=0; for i=2:duzina_x1 ibip=x1(i)-x1(i-1);%racunamo IBI(inter bit interval) sto predstavlja vremensku razliku izmedju pozicije dva sudsjedna maksimuma i smjestamo u niz ibi if(ibip<fak)% ukoliko je izracunati interval manji od fakt dodatak=ibip;% smjestamo u promjenljivu dodatak ind=1;% signalizira da postoji vrijednost koja je manja od fakt end if(ibip>fak)%ukoliko je izracunati interval veci od fakt if(ind==1)%i ukoliko je prethodni bio manji od fakt ibi(j)=ibip+dodatak;% izracunatu vrijednost sabiramo sa dodatakom i tu vrijednost smatramo IBI xibi(j)=x1(i);% indeksiranje ibi vektora j=j+1; ind=0;%vracamo ponovo na nulu dodatak=0;%vracamo ponovo na nulu else ibi(j)=ibip;% a ukoliko nismo imali prethodno vrijednost manju od fakt, onda je trenutna izracunata vrijednost pravi IBI xibi(j)=x1(i); j=j+1; end end end Na kraj računamo puls: • mean_heart_rate=60/mean(ibi);% racunamo puls
SSF signal sa markiranjem maksimuma pulseva, IBI raspodjela i izračunati broj otkucaja u minuti za PPG
SSF signal sa markiranjem maksimuma pulseva, IBI raspodjela i izračunati broj otkucaja u minuti za EKG
Pan Tompkinov algoritam: Izlazni signal iz algoritma, IBI raspodjela i broj otkucaja u minuti
Praktična realizacija predloženog rješenja - mjerenje pulsa
Pulse Sensor Amped
Arduino UNO R3
Praktična realizacija predloženog rješenja - mjerenje pulsa – Arduino kod
//ARDUINO PPG int sensorValue; int i; void setup(){ // pokreće se samo jednom, kada se skeč startuje Serial.begin(19200); // postavlja Serial biblioteku na brzinu 19200 bps } void loop() // petlja{ for (int i=0; i <= 511; i++){ // uzima jedan frejm od 512 odbiraka sensorValue = analogRead(A0); //čita analogni signal sa A0, tj. sa senzora Serial.print(sensorValue);//šalje podatke na serijski port kao ASCII tekst Serial.print(" "); // šalje sa space-om npr. 324 564 567 .... delay(10); //frekvencija odabiranja oko 100 Hz f=100 Hz // (f = 1/T = 1/(10*10-3 s)). } Serial.println(""); //postavlja CR/LF terminator na kraju svakog frejma }
Praktična realizacija predloženog rješenja - mjerenje pulsa – MATLAB GUI COMM_P=serial('COM5','BaudRate',19200,'InputBufferSize',8096);
Izgled MATLAB korisničkog interfejsa
Praktična realizacija predloženog rješenja - mjerenje pulsa – MATLAB GUI
Prikaz originalnog, filtriranog i SSF signala (opcija 1)
Praktična realizacija predloženog rješenja - mjerenje pulsa – MATLAB GUI
Prikaz SSF signala sa markiranim maksimumima, SSF signala sa markiranim počecima uspona pulsa i IBI raspodjele (opcija 2)
Rezultati testiranja
Rezultati testiranja
Rezultati testiranja
Rezultati testiranja
Rezultati testiranja
Rezultati testiranja
Rezultati testiranja - analiza
MSE: 0.000003628318584
RMSE: 0.001904814579971
MSE: 0.002636823992134
RMSE: 0.051350014529051
MSE: 0.002615181907571
RMSE: 0.051138849298467
• Srednje kvadratne greške koje se javljaju su uglavnom ispod 100 ms
• Uzimajući za analizu ukupnu bazu podataka koju sam testirao, vrijednost srčanog ritma je varirala manje od 5 otkucaja/minuti kod 32 poređenja (od ukupno 35), tj. 91.43%, dok su kod ostalih signala vrijednosti varirale iznad 5 otkucaja/minuti. Srednja kvadratna greška je u 92/105 (87.62%) poređenja bila ispod 100 ms.
Originalni PPG signal, filtrirani PPG signal i SSF signal u mirovanju
SSF signal sa markiranim maksimumima, SSF signal sa
markiranim počecima uspona pulsa, IBI raspodjela i trenutna vrijednost srčanog ritma u mirovanju
Uticaj ambijentalne svjetlosti
Uticaj fizičkog napora
Pomjeranje senzora
Nepotpuna pokrivenost površine
senzora kožom
Preveliki pritisak kože na senzor
Zaključak
• Na bazi rečenog, iz prethodnih simulacija se može izvesti zaključak da postoji visok stepen korelacije između izračunatih i analiziranih karakteristika EKG i PPG signala dobijenih preko predložene modifikacije Zongovog algoritma i Pan-Tompkinovog algoritma. Primjenjivost predloženog algoritma je pokazana kroz praktičnu realizaciju pomoću senzora i mikrokontrolera.
Pitanja?
HVALA NA PAŽNJI !