Top Banner
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
38

Arrh det - AGH University of Science and Technology · 2011. 8. 30. · [2,3,4] Rozpoznanie Arytmie są często wykrywane za pomocą niespecyficznych środków, takich jak: osłuchiwanie

Feb 13, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 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