-
AKADEMIA GÓRNICZO-HUTNICZA im. St. Staszica w KRAKOWIE
MIĘDZYWYDZIAŁOWA SZKOŁA INŻYNIERII BIOMEDYCZNEJ
Przedmiot: Dedykowane algorytmy diagnostyki medycznej
Numer projektu: Arrh_det
Temat projektu: Detekcja arytmii
Spis treści:
1. ABSTRAKT
.............................................................................................................................................2
2. WSTĘP
.....................................................................................................................................................3
3. KONCEPCJA PROPONOWANEGO ROZWIĄZANIA
..........................................................................
12
4. REZULTATY I
WNIOSKI......................................................................................................................
18
5. PODSUMOWANIE
................................................................................................................................
19
6. LITERATURA
........................................................................................................................................
20
7. DODATEK A: OPIS OPRACOWANYCH NARZĘDZI I METODY POSTĘPOWANIA
........................ 21
8. DODATEK B: REALIZACJA PROPONOWANEGO ROZWIĄZANIA
................................................. 24
9. DODATEK C. OPIS INFORMATYCZNY
PROCEDUR.........................................................................
25
10. DODATEK D. SPIS ZAWARTOŚCI DOŁĄCZONYCH NOŚNIKÓW (DYSKIETEK,
CD ROMU) ....... 38
Wykonali: Magdalena Igras
Jacek Kwaśniak
IV rok IB_EIM
konsultant: prof. dr hab. Piotr Augustyniak
Wersja 1.1.
Kraków, grudzień 2010
-
1. Abstrakt
Wykrywanie i klasyfikacja arytmii pracy serca mogą być
zautomatyzowane dzięki
odpowiedniemu przetworzeniu sygnałów
elektrokardiograficznych.
Realizacja projektu polega na zaimplementowaniu algorytmu
detekcji podstawowych arytmii
na podstawie sekwencji morfologii zespołu QRS. Zaprojektowano i
zaimplementowano algorytm,
pozwalający odnaleźć w przebiegu sygnału holterowskiego
fragmenty wyróżniające się
nieregularnością pracy serca i zidentyfikowanie występujących w
nich typów arytmii.
Zastosowano klasyczną metodę przeglądania rezultatów
przetwarzania zapisanego
elektrokardiogramu pod kątem odszukania oczekiwanej sekwencji
pobudzeń. Znając cechy pobudzeń
występujących przy poszczególnych typach arytmii, wyznacza się
rodzaj występującej arytmii
(algorytm pozwala wykrywać następujące typy arytmii: pojedyncze
przedwczesne pobudzenie
nadkomorowe, napadowy czestoskurcz nadkomorowy PSVT, tachykardia
nadkomorowa, bradykardia,
nadkomorowy rytm nieregularny, pauza, pojedyncze przedwczesne
pobudzenie komorowe,
tachykardia komorowa, zastepczy rytm komorowy IVR , salwa
komorowa, bigeminia, trigeminia,
para pobudzen komorowych), moment jej wystąpienia oraz
następujące cechy ważne z punktu
widzenia diagnostyki: czas trwania, liczbę pobudzeń, częstość
rytmu oraz minimalną/maksymalną
częstość rytmu serca.
W ustalaniu rodzaju wykrytej arytmii kierowano się podziałem
arytmii na grupy istotności z
diagnostycznego punktu widzenia.
Możliwość detekcji arytmii jest istotną zaletą diagnostyczną
metod holterowskich, ponieważ
interpretacja kardiologiczna tych zjawisk prowadzi bezpośrednio
do wykrycia współzależności
automatyzmu komórek rozrusznikowych różnych ośrodków
bodźcotwórczych serca i oceny ryzyka
pojawienia się tachykardii u pacjenta.
Zaimplementowany algorytm jest metodą podstawową, wykrywającą
arytmie tylko na
podstawie morfologii i momentów wystąpienia zespołów QRS.
Wzięcie pod uwagę również innych
cech sygnału holterowskiego doprowadziłoby do polepszenia
skuteczności i niezawodności procesu
detekcji.
-
2. Wstęp
Definicja arytmii
Arytmia serca to stan, w którym skurcze mięśnia sercowego są
nieregularne, a ich
częstotliwość wychodzi poza bezpieczny zakres 60-100 uderzeń na
minutę. Stan taki często stanowić
może zagrożenie dla życia, chociaż nie jest to regułą.
Normalny rytm pracy serca jest wyznaczany przez węzeł zatokowy.
Jeżeli węzeł zatokowo-
przedsionkowy nie funkcjonuje prawidłowo, może to prowadzić do
aktywizacji drugorzędowych
ośrodków pobudzenia i w efekcie do zmiany rytmu pracy serca.
Istotne znaczenie mają też drogi przewodzenia impulsu z ośrodka
pobudzenia: przy ich
nieprawidłowej funkcji lub gdy istnieją dodatkowe drogi
przewodzenia, może dochodzić do zaburzeń
rytmu serca. [3]
Rodzaje arytmii
Wzrost tempa bicia serca ponad 100 uderzeń na minutę nosi nazwę
tachykardii, a spadek
poniżej 50 uderzeń na minutę – bradykardii.
Podział arytmii:
a) Arytmie nadkomorowe:
-pauza
-bradykardia nadkomorowa
-tachykardia nadkomorowa
-napadowy częstoskurcz nadkomorowy
-nadkomorowy rytm nieregularny
b) Arytmie komorowe:
-para
-czynny rytm komór
-salwa
-tachykardia komorowa
-bigeminia
http://pl.wikipedia.org/wiki/Cykl_pracy_sercahttp://pl.wikipedia.org/wiki/Sercehttp://pl.wikipedia.org/wiki/W%C4%99ze%C5%82_zatokowo-przedsionkowy
-
Przyczyny arytmii
1. Przyczyny tachykardii
Najczęściej akcja serca przyspiesza wskutek zdenerwowania lub
wysiłku fizycznego (tachykardia
zatokowa). Inne przyczyny tachykardii to między innymi:
gorączka ( wzrost temperatury o 1° C powoduje wzrost akcji serca
o 10-12 uderzeń /min),
nadmierna nerwowość
działanie kofeiny, alkoholu albo nikotyny
zażywanie narkotyków, np.: amfetaminy
nadczynność tarczycy
zawał lub inne postaci choroby niedokrwiennej serca
niewydolność oddechowa
anemia
reakcja anafilaktyczna
różne choroby serca
niewydolność serca
niedokrwistości pokrwotoczne
przyjmowanie leków zwierających w składzie: atropinę, efedrynę
lub pseudoefedrynę.
niedocukrzenie
odwodnienie
niskie ciśnienie
używki. [3]
2. Przyczyny bradykardii
Bradykardia fizjologiczna występuje:
u sportowców
u osób z wagotonią (nadmierna aktywność nerwu błędnego).
Bradykardia patologiczna:
bradykardia zatokowa – zaburzenia powstawania bodźca w układzie
bodźcotwórczym
bloki przewodzenia – zaburzenia przewodnictwa
http://pl.wikipedia.org/wiki/Gor%C4%85czkahttp://pl.wikipedia.org/wiki/Kofeinahttp://pl.wikipedia.org/wiki/Alkoholhttp://pl.wikipedia.org/wiki/Nikotynahttp://pl.wikipedia.org/wiki/Narkotykhttp://pl.wikipedia.org/wiki/Amfetaminahttp://pl.wikipedia.org/wiki/Tarczycahttp://pl.wikipedia.org/wiki/Zawa%C5%82_mi%C4%99%C5%9Bnia_sercowegohttp://pl.wikipedia.org/wiki/Choroba_niedokrwienna_sercahttp://pl.wikipedia.org/wiki/Niewydolno%C5%9B%C4%87_oddechowahttp://pl.wikipedia.org/wiki/Reakcja_anafilaktycznahttp://pl.wikipedia.org/w/index.php?title=Choroby_serca&action=edit&redlink=1http://pl.wikipedia.org/wiki/Niewydolno%C5%9B%C4%87_sercahttp://pl.wikipedia.org/wiki/Atropinahttp://pl.wikipedia.org/wiki/Efedrynahttp://pl.wikipedia.org/wiki/Pseudoefedrynahttp://pl.wikipedia.org/wiki/Nerw_b%C5%82%C4%99dnyhttp://pl.wikipedia.org/w/index.php?title=Bradykardia_zatokowa&action=edit&redlink=1
-
działanie leków.
Wśród stanów patologicznych powodujących bradykardię można
wymienić:
zmiany zwyrodnieniowe w układzie bodźcoprzewodzącym
choroba niedokrwienna serca
niedoczynność tarczycy
przedawkowanie beta-adrenolityków, glikozydów
hiperkaliemia – nadmierne stężenie potasu we krwi.
Objawy i skutki
Objawy arytmii serca są różnorakie i zależą od rodzaju arytmii
oraz mogą być odczuwane
odmiennie. Najczęściej pacjenci chorzy na arytmie uskarżają się
na szybkie bądź niemiarowe bicie
serca lub na zwolnione alb mocne bicie serca. Jeśli tachykardia
obniża ciśnienie krwi, to może
spowodować zawroty głowy, a nawet omdlenia. Większość
tachykardii nie jest niebezpieczna. Każdy
czynnik podnoszący poziom adrenaliny lub wzmagający jej
działanie może spowodować
przyspieszenie akcji serca i wywołać tachykardię z towarzyszącym
uczuciem kołatania. Bradykardia
zazwyczaj nie zagraża życiu, ale może dawać objawy niepożądane
(Leczenia wymaga tylko
bradykardia objawowa, tzn. powodująca np. omdlenia, utraty
przytomności itp. ) i wtedy konieczne
okazać się może wszczepienie stałego rozrusznika. Z kolei tak
zwane skurcze dodatkowe polegają na
uczuciu „przeskakiwania” w klatce piersiowej, „zatrzymywania
się” serca na chwilę lub kłucia w
okolicy serca. Arytmia serca może się objawić osłabieniem,
dusznością, bólem w klatce piersiowej,
uczuciem gorąca. Arytmia może zatem obniżać jakość życia,
powodować poważne powikłania które
mogą prowadzić do przedwczesnej śmierci pacjenta. [2,3,4]
Rozpoznanie
Arytmie są często wykrywane za pomocą niespecyficznych środków,
takich jak: osłuchiwanie tonów
serca stetoskopem, a także pośrednio przez badanie tętna
obwodowego. Te sposoby zazwyczaj nie
mogą zdiagnozować konkretnych arytmii, ale dają określenie akcji
serca oraz wskazują czy rytm jest
regularny czy nie. Nie każda czynność elektryczna daje skurcz,
który byłby słyszalny czy wyczuwalny
na obwodzie jako fala tętna i dlatego pobudzenia przedwczesne
czy nie dające prawidłowego cyklu
pracy serca, są odbierane jako "opuszczone" skurcze.
Najprostszą specyficzną metodą diagnostyczną dającą ocenę rytmu
serca jest elektrokardiogram. Do
wykrycia krótkotrwałych i nieprzewidywalnych arytmii, stosuje
się monitorowanie holterowskie.
http://pl.wikipedia.org/wiki/Choroba_niedokrwienna_sercahttp://pl.wikipedia.org/wiki/Niedoczynno%C5%9B%C4%87_tarczycyhttp://pl.wikipedia.org/wiki/Leki_%CE%B2-adrenolitycznehttp://pl.wikipedia.org/wiki/Glikozydy_nasercowehttp://pl.wikipedia.org/wiki/Hiperkaliemiahttp://pl.wikipedia.org/wiki/Adrenalinahttp://pl.wikipedia.org/wiki/Omdleniehttp://pl.wikipedia.org/wiki/Utrata_przytomno%C5%9Bcihttp://pl.wikipedia.org/wiki/Sta%C5%82a_elektrostymulacja_sercahttp://pl.wikipedia.org/wiki/Stetoskophttp://pl.wikipedia.org/wiki/Elektrokardiografiahttp://pl.wikipedia.org/wiki/Holter_EKG
-
Stosowane jest także monitorowanie ekg przez telefon stacjonarny
lub komórkowy. Różni się od
monitorowania holterowskiego tym, że pacjent dzwoni wtedy gdy
czuje niepokój i nie jest
ograniczony okresem 24 godzinnym.
Elektrokardiogram obrazuje jedynie elektryczną aktywność serca.
Przy PEA w badaniu EKG może nie
być zaburzeń, a serce nie wykazuje czynności hemodynamicznej.
[3],[4]
Kryteria EKG rozpoznania tachykardii zatokowej
1. częstotliwość większa niż 100 uderzeń na minutę;
2. rytm miarowy;
3. załamek P dodatni, o prawidłowej morfologii;
4. odstęp PQo czasie trwania 0,12-0,20 s (zmniejsza się
proporcjonalnie do zwiększenia
częstości serca);
5. Zespół QRS o prawidłowej morfologii i czasie trwania poniżej
0,12 s.
Leczenie arytmii
Oprócz leczenia farmakologicznego stosuje się również terapie
elektrycznością. Kardiowersja jest
zastosowaniem prądu elektrycznego biegnącego poprzez klatkę
piersiową w przypadku częstoskurczu
nadkomorowego lub napadowego częstoskurczu komorowego.
Defibrylacja różni się od kardiowersji
tym, że stosuje się ją w trzepotaniu komór lub migotaniu komór
bez tętna, a także użyciem większego
ładunku elektrycznego. W przypadku kardiowersji pacjent jest
poddawany działaniu leków o działaniu
sedatywnym, natomiast defibrylacja jest stosowana przy utraconej
świadomości i nie ma potrzeby
zastosowania sedacji.
W ramach leczenia dysrytmii elektrycznością stosuje się również
kardiostymulację. Czasowe użycie
rozruszników stosuje się w przypadku bradykardii z powodu
przedawkowania leków, a także przy
zawale serca. Kardiostymulator jest na stałe wszczepiany pod
skórę u pacjentów, u których schorzenie
będące przyczyną bradykardii nie daje się usunąć.
Bradykardię u pacjentów w ciężkim stanie leczy się podając 0,5
mg atropiny dożylnie (dawkę można
powtarzać do dawki całkowitej 3 mg). [3],[4]
http://pl.wikipedia.org/wiki/Aktywno%C5%9B%C4%87_elektryczna_bez_t%C4%99tnahttp://pl.wikipedia.org/wiki/Elektrokardiografiahttp://pl.wikipedia.org/wiki/Za%C5%82amek_Phttp://pl.wikipedia.org/wiki/Odst%C4%99p_PQhttp://pl.wikipedia.org/wiki/Zesp%C3%B3%C5%82_QRShttp://pl.wikipedia.org/wiki/Kardiowersja_elektrycznahttp://pl.wikipedia.org/wiki/Cz%C4%99stoskurcz_nadkomorowyhttp://pl.wikipedia.org/wiki/Cz%C4%99stoskurcz_nadkomorowyhttp://pl.wikipedia.org/wiki/Cz%C4%99stoskurcz_komorowyhttp://pl.wikipedia.org/wiki/Defibrylacjahttp://pl.wikipedia.org/wiki/Sta%C5%82a_elektrostymulacja_sercahttp://pl.wikipedia.org/wiki/Zawa%C5%82_mi%C4%99%C5%9Bnia_sercowegohttp://pl.wikipedia.org/wiki/Atropina
-
Przykłady zapisu EKG arytmii
a) Arytmie nadkomorowe:
-pauza
-bradykardia nadkomorowa
-tachykardia nadkomorowa
-napadowy częstoskurcz nadkomorowy
-nadkomorowy rytm nieregularny
-
b) Arytmie komorowe:
-para
-czynny rytm komór
-salwa
-tachykardia komorowa
-bigeminia
Źródło: [1]
-
Metodologia detekcji arytmii
Uwagi ogólne
Arytmie stanowią sekwencje pobudzeń o ustalonych wzorcach,
zdefiniowanych przez:
następstwo zespołów o określonej morfologii,
interwał międzyuderzeniowy RR;
niekiedy liczbę zespołów w sekwencji.
Detekcja arytmii jest istotną zaletą diagnostyczną metod
holterowskich, ponieważ
interpretacja kardiologiczna tych zjawisk prowadzi bezpośrednio
do:
1. wykrycia współzależności automatyzmu komórek rozrusznikowych
różnych ośrodków
bodżcotwórczych serca
2. oceny ryzyka pojawienia się tachykardii.
Detekcja arytmii ogranicza sie do oceny zapisu
elektrokardiogramu ze wzgledu na sekwencje
pobudzen. Należy znalezc poczatek, kiedy spełnione sa założenia
arytmii oraz jej koniec. Dzieki temu
możemy wyznaczyc czas trwania arytmii, który jest podstawowym
parametrem diagnostycznym.
Odnalezienie sekwencji startowej dla innej arytmii znosi
(kończy) wystepowanie poprzedniej. [1]
Algorytmy detekcji arytmii
Od strony informatycznej detekcja sprowadza się do porównania
sygnałów wejsciowych do
zebranej już bazy arytmii.
Detekcja arytmii polega na przeglądzie rezultatów przetwarzania
zapisanego elektrokardiogramu pod
kątem odszukania oczekiwanej sekwencji pobudzeń. Istotne jest
odnalezienie początku, kiedy po raz
pierwszy spełnione są założenia arytmii oraz końca, kiedy
założenia arytmii przestają być spełnione.
Pozwala to wyznaczyć czas trwania arytmii - podstawowy parametr
diagnostyczny. Wystąpienie
sekwencji pobudzeń, charakterystycznej dla innej arytmii oznacza
koniec arytmii trwającej
dotychczas, podobnie, wystąpienie zespołu odmiennego typu
morfologicznego oznacza również
zakończenie poprzedniej arytmii. [1]
-
1. Detekcja arytmii dotyczy wszystkich zarejestrowanych kanałów
jednocześnie,
ponieważ zarówno określenie interwału międzyuderzeniowego, jak i
określenie
morfologii dokonywane jest wspólnie. Ponieważ detekcja ma raczej
charakter
procedury przeszukiwania bazy danych niż przetwarzania sygnałów,
nie sprawia
większych kłopotów. Jedynym problemem wymagającym komentarza
jest
rozwiązywanie konfliktów w przypadku pojawienia się
sekwencji
charakterystycznych dla różnych arytmii na tym samym przedziale
czasowym.
Przykłady konfliktów:
-wystąpienie pauzy w sekwencji bradykardii;
- wystąpienie pary na zakończenie bigeminii itp.
Rozwiązywanie konfliktów opiera się na podziale, który z
diagnostycznego punktu widzenia wyróżna
arytmie o różnym stopniu istotności:
- pierwszego rodzaju: pauza, częstoskurcz nadkomorowy,
tachykardia komorowa;
- drugiego rodzaju: salwa, czynny rytm komór, bigeminia;
- trzeciego rodzaju: tachykardia (nadkomorowa), bradykardia,
rytm nieregularny i pary.[1]
2. Jednokrotna analiza sekwencyjna
Niektóre detektory arytmii dokonują jednokrotnie sekwencyjnej
analizy pól zespołów QRS
zawierających dane o morfologii i interwału RR. W przypadku gdy
podczas trwania arytmii
niższego rodzaju wykryta jest sekwencja właściwa dla arytmii
wyższego rodzaju, trwająca
arytmia kończy się, ustępując miejsca nowo zidentyfiukowanej
arytmii. W przypadku gdy
trwa arytmia określonego rodzaju, wykrywanie arytmii niższych
rodzajów jest
zablokowane.[1]
3. Detekcja w trzech etapach.
Alternatywne podejście polega na trzykrotnym przeglądaniu pól
tablicy zespołów QRS
zawierających dane morfologii i interwału RR. Za pierwszym razem
wykrywane są tylko
arytmie pierwszego rodzaju. Drugi przegląd wyodrębnia arytmie
drugiego rodzaju, przy
czym odcinki przyporządkowane zidentyfikowanym uprzednio
arytmiom pierwszego
rodzaju są omijane. Trzeci przegląd identyfikuje arytmie
trzeciego rodzaju na pozostałych
fragmentach sygnału. [1]
-
4. Użycie metody transformacji falkowej, PCA oraz sieci
neuronowych do wykrycia i
zaklasyfikowania arytmii. [5]
Wstępne przetwarzanie sygnału (filtracja, ekstrakcja cech
sygnału przy pomocy
transformacji falkowej, redukcja wymiarów metodą PCA)
Klasyfikacja za pomocą sieci neuronowych.
5. Wykrywanie arytmii przez analizę cech morfologicznych sygnału
wykorzystaniu
współczynników korelacji sygnału. [6]
-
3. Koncepcja proponowanego rozwiązania
Do zaprezentowania detekcji arytmii w sygnale holterowskim
wybrano metodę wielokrotnego
przeglądania rezultatów przetwarzania zapisanego
elektrokardiogramu pod kątem odszukania
oczekiwanej sekwencji pobudzeń. Jest to metoda najbardziej
klasyczna i czytelnie ukazuje logikę
sposobu działania zmierzającego do osiągnięcia postawionego celu
przy użyciu dostępnych danych.
Etapy postępowania:
1. Pobranie danych wejściowych
Wykorzystano bazę sygnałów holterowskich założoną na potrzeby
laboratorium studenckiego
AGH przez Piotra Augustyniaka, wersja 1.0, grudzień 2010. Baza
zawiera 10 plików trzykanałowych
zapisów holterowskich (sygnał o częstotliwości próbkowania 128
Hz i skali amplitudowej
1mV=45LSB (5,7mV pełnej skali, 1 LSB=22uV) zapisany jest
8-bitowo bez znaku). Długość zapisów
wynosi 15, 30 lub 60 min.
Dla wykonanego w niniejszym projekcie detektora arytmii
argumentem wejściowym jest plik
qrs_attr.out o następującej strukturze:
struct QRS_ATTR
{
int DetPt; //punkt detekcji
// numer probki w sygnale oryginalnym przy ktorym nastapila
detekcja QRS
char AMax; //wartosc korekcji maksimum zalamka R
// ilosc ms od punktu detekcji do maksymalnej 3D wartosci R
short localRR; //lokalna wartosc interwalu miedzyuderzeniowego
[ms]
// odstep w [ms] biezacego maksimum R od poprzedniego maksimum
R
Uchar HR; //wartosc HR (heart rate)
// interwal miedzyuderzeniowy obliczany z ostatnich
QRS_NBR_FOR_HR odstepow RR
char MorfT; //typ morfologii (wypelniany po klasyfikacji)
// -1 - zespol oznaczony jako nieznanej morfologii
-
// 0 - dominujacy
// 1 - nadkomorowy
// 2 - komorowy
// 3 - inny
// 4 - artefakt typu uskok
// 5 - artefakt typu szum
short cl; //numer klasy morfologii
// >=0 - numer klasy,
// -1 - nie klasyfikowany, czesc "rozbiegowa" klasyfikatora (ok.
70 QRS'ow)
// -2 - nie klasyfikowany, przekroczenie dopuszczalnej ilosci
klas
// -3 - nie klasyfikowany, przekroczony prog SNR
// -4 - nie klasyfikowany, odrzucony przez operatora
// -5 - nie klasyfikowany, zaznaczony przez system jako
artefakt
// -6 - nie klasyfikowany, migotanie komor
// -7 - nie klasyfikowany, nadmiarowo wykryty T-end
// -8 - nie klasyfikowany, morfologia zdefiniowana przez
operatora
char str[2*3]; // rezultat obliczen ST
// indeksy parzyste: poziom S-T w kanalach: 1, 2, 3 [10uV]
// indeksy nieparzyste: nachylenie S-T w kanalach: 1, 2, 3
[10uV/s]
// -128 w rezultatach ST oznacza brak danych (np. bieżący lub
sąsiedni zespół jest
komorowy)
};
-
Z pliku wejściowego wyodrębniono kolumnę 1. i 5. I na ich
podstawie prowadzono dalsze obliczenia:
Kolumna 1 zawiera informację o punkcie detekcji zespołu QRS
(numer próbki w
sygnale oryginalnym przy ktorym nastapila detekcja QRS)
Kolumna 4 zawierająca wartość pulsu serca
Kolumna 5 zawiera informację o typie morfologii zespołu QRS:
// -1 - zespol oznaczony jako nieznanej morfologii
// 0 - dominujacy
// 1 - nadkomorowy
// 2 - komorowy
// 3 - inny
// 4 - artefakt typu uskok
// 5 - artefakt typu szum
2. Detekcja miejsc wystąpienia arytmii i określenie rodzajów
arytmii
Dla każdego z rodzajów wykrywanych arytmii przyjęto kryteria
pozwalające
zaklasyfikować nieregularny fragment sygnału do jednej z grup
arytmii na podstawie
morfologii zespołu QRS bądź parametrów wystąpienia pobudzeń:
pojedyncze przedwczesne pobudzenie nadkomorowe – obecność
pojedynczego
wystąpienia zespołu nadkomorowego;
tachykardia nadkomorowa – rytm pobudzeń nadkomorowych powyżej
100/min;
bradykardia – rytm serca poniżej 50/min;
pauza - czas przerwy pomiędzy pobudzeniami powyżej 2 s;
pojedyncze przedwczesne pobudzenie komorowe – obecność
pojedynczego
zespołu komorowego nie będącego częścią salwy, pauzy, bigeminii
ani trigeminii;
tachykardia komorowa – rytm pobudzeń komorowych powyżej
100/min
-
zastepczy rytm komorowy IVR – więcej niż 5 następujących po
sobie zespołów
komorowych;
salwa komorowa - od 3 do 5 kolejnych pobudzeń komorowych;
bigeminia – na zmianę pobudzenie nadkomorowe i komorowe;
trigeminia – co trzecie pobudzenie jest komorowe;
para pobudzen komorowych – 2 występujące po sobie pobudzenia
komorowe.
Zastosowany algorytm polega na wielokrotnym przeglądaniu pól
tablicy zespołów QRS
zawierających dane morfologii QRS i sprawdzaniu, które kryteria
spełnia dany fragment sygnału. Za
pierwszym razem wykrywane są tylko arytmie o najwyższym
priorytecie, a przy kolejnych
przeglądach wyodrębniane są arytmie o kolejnych stopniach
istotności, przy czym odcinki
przyporządkowane zidentyfikowanym uprzednio arytmiom są
omijane.
Rozwiązywanie konfliktów opiera się na podziale, który z
diagnostycznego punktu widzenia
wyróżna arytmie o różnym stopniu istotności:
- pierwszego rodzaju:
pauza,
częstoskurcz nadkomorowy,
tachykardia komorowa;
- drugiego rodzaju:
salwa,
czynny rytm komór,
bigeminia;
- trzeciego rodzaju:
tachykardia (nadkomorowa),
bradykardia,
rytm nieregularny,
pary,
pojedyncze przedwczesne pobudzenie komorowe.
-
Jako wynik klasyfikacji otrzymujemy tablicę, w której rodzaje
arytmii oznaczone są następująco:
// Wymagana kolejnosc arytmi w tablicy ArhArray
// se=0, sp=1, st=2, br=3, si=4, pz=5, ve=6, vt=7, vr=8, vs=9,
bi=10, tr=11, pr=12,
rt=13,
#define A_SE 0 // pojedyncze przedwczesne pobudzenie
nadkomorowe
#define A_ST 2 // tachykardia nadkomorowa
#define A_BR 3 // bradykardia
#define A_PZ 5 // pauza
#define A_VE 6 // pojedyncze przedwczesne pobudzenie
komorowe
#define A_VT 7 // tachykardia komorowa
#define A_VR 8 // zastepczy rytm komorowy IVR
#define A_VS 9 // salwa komorowa
#define A_BG 10 // bigeminia
#define A_TG 11 // trigeminia
#define A_PR 12 // para pobudzen komorowych
Dla wykrytych arytmii obliczono wymagane parametry
diagnostyczne: moment wystąpienia, czas
trwania, liczbę pobudzeń, częstość rytmu oraz
maksymalną/minimalną częstość rytmu.
Ostatecznie wynik operacji ma postać tablicy o strukturze:
struct ARH_ATTR_ITEM
{
Int Arh // Rodzaj arytmii
int Beg; // Moment wystapienia
int Dur; // Czas trwania
short BNr; // Liczba pobudzen
-
Uchar Hr0; // Czestosc rytmu
Uchar Hr4; // max/min z 4 czestosci rytmu }
3.Zapisanie wyników do pliku wyjściowego arh_attr.out
-
4. Rezultaty i wnioski
W wyniku zastosowania zaimplementowanego algorytmu otrzymano
detektor arytmii, który
komunikuje się z pozostałymi projektami za pomocą plików:
na wejście pobiera plik qrs_attr.out,
przeprowadza detekcję podstawowych rodzajów arytmii,
na wyjściu zwraca plik arh_attr.out zawierający wykryte arytmie
i ich parametry
diagnostyczne.
Przykładowe fragmenty danych wraz z interpretacją:
Fragment pliku qrs_attr.out:
7325 4 656 82 2 1 -128 -128 -128 -128 -128 -128 // pobudzenie
komorowe w 7325. próbce
7473 12 1164 79 0 0 -128 -128 -128 -128 -128 -128 // pobudzenie
dominujące w 7473 próbce
sygnału
Fragment pliku arh_attr.out
11 373 8 8 51 0 // trigeminia w 373 wierszu pliku qrs_attr.out,
trwająca 8 pobudzeo, o częstości
rytmu 51/min
6 384 -1 0 0 0 // pojedyncze przedwczesne pobudzenie komorowe
wykryte w 384 wierszu pliku
qrs_attr.out
Działanie opracowanego detektora testowano na sygnałach z bazy
danych sygnałów
holterowskich, otrzymując wyniki tylko w nielicznych miejscach
odbiegające od wzorców sygnałów
wyjściowych ( co jest spowodowane przyjęciem innych kryteriów
klasyfikacji arytmii niż przyjęte
przez autorów niniejszego projektu).
Przyjęta metoda okazała się skuteczna, jednak daleko lepsze
rezultaty można by było osiągnąć
biorąc pod uwagę również inne cechy sygnału (długość interwału
RR, długość i kształt zespołu QRS,
parametry pozostałych załamków), a nie jedynie morfologię
zespołu QRS i wartość HR. Byłoby to
bliższe realnemu procesowi diagnostycznemu, który realizują
lekarze diagnozując arytmie u pacjenta.
Obiecujące może okazać się wykorzystanie metod sztucznej
inteligencji – sieci neuronowych do
detekcji i klasyfikacji wzorców. Jednakże metody te wymagałyby
większej ilości argumentów
wejściowych oraz bazy rozpoznań wzorcowych, którymi w tym
projekcie nie dysponowano.
-
5. Podsumowanie
Cel projektu został osiągnięty – powstał funkcjonalny detektor
wykrywający i identyfikujący typy
arytmii na podstawie danych o morfologii zespołu QRS. Pozwala to
na zautomatyzowanie procesu
wykrywania anomalii w rytmie serca.
Dla lekarza może to stanowić cenną pomoc w diagnozowaniu,
zwracając jego uwagę na fragmenty
sygnału, które świadczą o nieprawidłowościach. Detektor pełni
więc funkcję pomocniczą, a
ostatecznej interpretacji i ustanowienia diagnozy musi dokonać
lekarz, posiłkując się nie tylko
obliczonymi parametrami diagnostycznymi, ale również swoją
wiedzą i doświadczeniem
wynikającym z analizy i interpretacji sygnałów
elektrodiagnostycznych, by odnieść wyniki badań do
stanu konkretnego pacjenta. Konsultacje z lekarzem dowiodły, że
proces decyzyjny lekarza
diagnozującego arytmię jest często intuicyjny i opiera się nie
tylko na obliczonych parametrach
diagnostycznych.
Detektor jest stosunkowo prosty, natomiast dalszą optymalizację
podjętego zagadnienia można
kierować w stronę bardziej zaawansowanych metod przetwarzania
sygnału, jak np. sztuczne sieci
neuronowe. Dodatkowo w dalszych pracach nad rozwijaniem
zagadnienia warto wziąć pod uwagę
korzystanie z innych parametrów sygnału obok informacji o
morfologii QRS i wartości pulsu serca.
-
6. Literatura
[1] Piotr Augustyniak, Przetwarzanie sygnałów
elektrodiagnostycznych, Wydawnictwa AGH, Kraków
2001
[2]
http://www.poradnikmedyczny.pl/mod/archiwum/7022_arytmia_kiedy_twoje.html
[3] http://pl.wikipedia.org/wiki/Zaburzenia_rytmu_serca
[4] http://www.kardioserwis.pl/page.php/1/1/show/41
[5] Heart Arrhythmia detection Using Continuous Wavelet
Transform and Principal Component
Analysis with Neural Network Classifier, P. Ghorbanian, A.
Ghaffari, A. Jalali, C. Nataraj
[6] Using correlation coefficient in ecg waveform for arrhythmia
detection, Chuang-chien Chiu, Tong-
hong Lin and Ben-yi Liau
[7] Choroby wewnętrzne – podręcznik multimedialny oparty na
zasadach EBM, pod red. Prof.dr hab.
Andrzeja Szczeklika, Kraków 2005
[8] http://www.physionet.org/physiobank/database/mitdb/
http://www.poradnikmedyczny.pl/mod/archiwum/7022_arytmia_kiedy_twoje.htmlhttp://pl.wikipedia.org/wiki/Zaburzenia_rytmu_sercahttp://www.kardioserwis.pl/page.php/1/1/show/41http://www.physionet.org/physiobank/database/mitdb/
-
7. DODATEK A: Opis opracowanych narzędzi i metody
postępowania
Do testowania opracowanego detektora arytmii wystarczy dowolny
system operacyjny ze
środowiskiem umożliwiającym uruchomienie plików .cpp
(Używane przez autorów projektu: System Windows 7, środowisko
DevC++, v. 4.9.9.2)
Testowanymi plikami muszą być przetworzone wyniki badań
holterowskich zapisane do plików
qrs_attr.out o strukturze:
struct QRS_ATTR
{
int DetPt; //punkt detekcji
// numer probki w sygnale oryginalnym przy ktorym nastapila
detekcja QRS
char AMax; //wartosc korekcji maksimum zalamka R
// ilosc ms od punktu detekcji do maksymalnej 3D wartosci R
short localRR; //lokalna wartosc interwalu miedzyuderzeniowego
[ms]
// odstep w [ms] biezacego maksimum R od poprzedniego maksimum
R
Uchar HR; //wartosc HR (heart rate)
// interwal miedzyuderzeniowy obliczany z ostatnich
QRS_NBR_FOR_HR odstepow RR
char MorfT; //typ morfologii (wypelniany po klasyfikacji)
// -1 - zespol oznaczony jako nieznanej morfologii
// 0 - dominujacy
// 1 - nadkomorowy
// 2 - komorowy
// 3 - inny
// 4 - artefakt typu uskok
-
// 5 - artefakt typu szum
short cl; //numer klasy morfologii
// >=0 - numer klasy,
// -1 - nie klasyfikowany, czesc "rozbiegowa" klasyfikatora (ok.
70 QRS'ow)
// -2 - nie klasyfikowany, przekroczenie dopuszczalnej ilosci
klas
// -3 - nie klasyfikowany, przekroczony prog SNR
// -4 - nie klasyfikowany, odrzucony przez operatora
// -5 - nie klasyfikowany, zaznaczony przez system jako
artefakt
// -6 - nie klasyfikowany, migotanie komor
// -7 - nie klasyfikowany, nadmiarowo wykryty T-end
// -8 - nie klasyfikowany, morfologia zdefiniowana przez
operatora
char str[2*3]; // rezultat obliczen ST
// indeksy parzyste: poziom S-T w kanalach: 1, 2, 3 [10uV]
// indeksy nieparzyste: nachylenie S-T w kanalach: 1, 2, 3
[10uV/s]
// -128 w rezultatach ST oznacza brak danych (np. bieżący lub
sąsiedni zespół jest
komorowy)
};
Zaimplementowany algorytm zawarty jest w pliku
detektor_arytmii.cpp. Pliki niezbędne do
uruchomienia detektora to: qrs_attr.h, arhh_attr.h.
Uruchamianie detekcji:
Aby przeprowadzić detekcję, należy w używanym środowisku
programistycznym
stworzyć projekt zawierający pliki detektor_arytmii.cpp,
qrs_attr.h, arhh_attr.h,
qrs_attr.out a następnie skompilować i uruchomić plik
detektor_arytmii.cpp.
Plik detektor_arytmii.cpp otwiera plik qrs_attr, przeprowadza
obliczenia i zapisuje je w pliku
wynikowym arh_attr.out.
-
Pliki te można przeglądać w dowolnym edytorze tekstowym.
Aby przeprowadzić detekcję na innym pliku qrs_atrr.out z innego
badania/dla innego pacjenta, należy
powtórzyć punkt Uruchamianie detekcji.
-
8. DODATEK B: Realizacja proponowanego rozwiązania
Detektor arytmii został zaimplementowany w języku C/C++ przy
użyciu środowiska DevC++
(v. 4.9.9.2) i może być modyfikowany i rozwijany dzięki
modularności kodu.
Detektor arytmii składa się z następujących modułów:
1) Część służąca do pobrania danych wejściowych.
2) Część służąca do przetwarzania danych.
a) Funkcje przeglądania tablicy danych wejściowych ze względu na
kolejne
rodzaje arytmii:
Ustalenie kryterium detekcji danego rodzaju arytmii
Znalezienie fragmentów sygnału, które spełniają kryterium
Ustawienie statusu w wybranym fragmencie (przypisanie mu
wykrytego rodzaju arytmii)
Przeglądanie tablicy pod kątem detekcji arytmii zaczyna się od
arytmii o
wyższym priorytecie.
Algorytm można uzupełniać o kolejne rodzaje arytmii (pamiętając
o zachowaniu
ich priorytetu). Można również doskonalić kryteria
klasyfikowania
poszczególnych rodzajów arytmii.
b) Obliczenie parametrów diagnostycznych wykrytych arytmii
c) Generowanie tablicy wyników.
3) Część służąca do zapisania tablicy wyników do pliku
wyjściowego.
Opracowany detektor arytmii (plik detektor_arytmii.cpp) może być
łatwo wcielony w całość
projektu przetwarzania sygnału EKG przy odpowiednim wywołaniu
detektora jako funkcji.
-
9. DODATEK C. Opis informatyczny procedur
Plik detektor_arytmii.cpp
#include
#include
#include
#include
#include
#include
#include
#include "qrs_attr.h"
#include
using namespace std;
//ZMIENNE GLOBALNE
vector ecgAttr;
//wczytanie danych wejściowych
void loadAttributes(char *attrFilename){
ifstream attrFile;
attrFile.open(attrFilename,fstream::binary);
if (attrFile == NULL){
cout tempAttr.DetPt >> AMaxShort >> tempAttr.localRR
>> HRShort >> MorfTShort >>
tempAttr.cl >> strShort[0] >> strShort[1] >>
strShort[2] >> strShort[3] >> strShort[4] >>
strShort[5];
-
tempAttr.AMax = static_cast(AMaxShort);
tempAttr.HR = static_cast(HRShort);
tempAttr.MorfT = static_cast(MorfTShort);
tempAttr.str[0] = static_cast(strShort[0]);
tempAttr.str[1] = static_cast(strShort[1]);
tempAttr.str[2] = static_cast(strShort[2]);
tempAttr.str[3] = static_cast(strShort[3]);
tempAttr.str[4] = static_cast(strShort[4]);
tempAttr.str[5] = static_cast(strShort[5]);
ecgAttr.push_back(tempAttr);
}
}
attrFile.close();
ecgAttr.pop_back();
}
int main() {
loadAttributes("qrs_attr.out");
cout
-
// funkcja wykrywania 2 02 oraz 002 w sygnale
int tmp[3][x];
for (int w=0;w
-
//wykrywanie pary salwy i IVR para
int n=0;
int licznik=0; // zmienna licząca ilość kolejnych powtórzeń
pobudzenia komorowego (2)
while (tmp[0][n+1] != -128)
{
//cout
-
licznik=0;
}
}
}
n++;
}
// Znajdź bigeminie
n=0;
while (tmp[1][n+1] != -128)
{
if (tmp[1][n+1] - tmp[1][n] == 2)
{
tab[3][tmp[1][n]-1]=10; //ustaw status na bigeminie
tab[3][tmp[1][n]]=10; //ustaw status na bigeminie
tab[3][tmp[1][n]+1]=10; //ustaw status na bigeminie
tab[3][tmp[1][n]+2]=10; //ustaw status na bigeminie
}
n++;
}
// Znajdź Trigeminie
n=0;
while (tmp[2][n+1] != -128)
{
if (tmp[2][n+1] - tmp[2][n] == 3)
{
tab[3][tmp[1][n]-2]=11; //ustaw status na trigeminie
-
tab[3][tmp[1][n]-1]=11; //ustaw status na trigeminie
tab[3][tmp[1][n]]=11; //ustaw status na trigeminie
tab[3][tmp[1][n]+1]=11; //ustaw status na trigeminie
tab[3][tmp[1][n]+2]=11; //ustaw status na trigeminie
tab[3][tmp[1][n]+3]=11; //ustaw status na trigeminie
cout
-
// Pauza
for (int w=0;w2 ) { //pauza czas przerwy powyżej 2 s
tab[3][w]=5; //ustaw status na Pauza
}
};
// Pojedyncze pobudzenie komorowe
for (int w=0;w
-
//Generowanie tablicy wyników
int wynik[6][x];
for (int w=0;w
-
break;
}
case 2:{ // wpisanie reszty danych do tach nadkomorowej
int max=0;
int suma=0;
for(int d=w+1-licznik;d
-
wynik[5][k]=min;
k++;
licznik=0;
break;
}
case 5:{ //wpisanie reszty danych do pauzy
wynik[2][k]=-1;
wynik[3][k]=0;
wynik[4][k]=0;
wynik[5][k]=0;
k++;
licznik=0;
break;
}
case 6: { //wpisanie reszty danych do poj przedwcz pob komor
wynik[2][k]=-1;
wynik[3][k]=0;
wynik[4][k]=0;
wynik[5][k]=0;
k++;
licznik=0;
break;
}
case 8:{ //wpisanie reszty danych do zast rytm kom
int min=900;
int suma=0;
for(int d=w+1-licznik;dtab[2][d]){
min=tab[2][d];
}
}
wynik[2][k]=(tab[0][w]-tab[0][w+1-licznik])/128;
-
wynik[3][k]=licznik;
wynik[4][k]=suma/licznik;
wynik[5][k]=min;
k++;
licznik=0;
break;
}
case 9: { //wpisanie reszty danych do salwy
wynik[2][k]=-1;
wynik[3][k]=0;
wynik[4][k]=0;
wynik[5][k]=0;
k++;
licznik=0;
break;
}
case 10: { //wpisanie reszty danych do trigeminii
wynik[2][k]=(tab[0][w]-tab[0][w+1-licznik])/128;
wynik[3][k]=licznik;
wynik[4][k]=0;
wynik[5][k]=0;
k++;
break;
licznik=0;
}
case 11: { //wpisanie reszty danych do bigemini
wynik[2][k]=(tab[0][w]-tab[0][w+1-licznik])/128;
wynik[3][k]=licznik;
wynik[4][k]=0;
wynik[5][k]=0;
k++;
break;
licznik=0;
-
}
case 12:{ //wpisanie reszty danych do para
wynik[2][k]=-1;
wynik[3][k]=0;
wynik[4][k]=0;
wynik[5][k]=0;
k++;
break;
licznik=0;
}
}
}
licznik=0;
}
}
}
-
//Zapisywanie do pliku wynikowego
int w=0;
FILE* arh_attr;
arh_attr=fopen("arh_attr.out", "at");
while (wynik[0][w] != -128){
fprintf(arh_attr, "%d ", wynik[0][w]);
fprintf(arh_attr, "%d ", wynik[1][w]);
fprintf(arh_attr, "%d ", wynik[2][w]);
fprintf(arh_attr, "%d ", wynik[3][w]);
fprintf(arh_attr, "%d ", wynik[4][w]);
fprintf(arh_attr, "%d ", wynik[5][w]);
fprintf(arh_attr, "\n");
w++;
}
fclose(arh_attr);
system("PAUSE");
}
-
10. DODATEK D. Spis zawartości dołączonych nośników
(dyskietek, CD ROMu)
Baza zapisów kardiologicznych baza.rar
Plik zawierający detektor arytmii: detektor_arytmii.cpp