Automatyczna klasyfikacja zespołów QRS

Transkrypt

Automatyczna klasyfikacja zespołów QRS
Przetwarzanie sygnałów w systemach diagnostycznych
Informatyka Stosowana V
Automatyczna klasyfikacja
zespołów QRS
Anna Mleko
Tomasz Kotliński
AGH EAIiE 2009
1. Opis zadania
Tematem projektu było zaprojektowanie i wykonanie programu, dokonującego automatycznej
klasyfikacji zespołów QRS w zapisie sygnału EKG.
Program pobiera dane w postaci sygnału EKG oraz adnotacji opisujących lokalizację zespołów QRS.
Efektem działania programu jest wyznaczenie (dla każdego kanału) ilości istotnie różnych klas
zespołów QRS oraz przyporządkowanie każdego zespołu do jednej z klas. Klasy powinny
różnicować zespoły o różnym kształcie (a więc różnej morfologii)
2. Wykonany program
W celu wykonania powyższych zadań napisany został (w języku ANSI C) specjalny program.
Źródła składają się z plików: (oraz odpowiednich plików nagłówkowych)
- ekg.c (główny program)
- ekgFiles.c (operacje wejścia/wyjścia na plikach)
- ekgCoef.c (wyliczanie współczynników charakteryzujących zespoły QRS)
- ekgClassify.c (klasyfikacja QRS)
Skompilowany, wykonywalny program (ekg.exe) przyjmuje 2 parametry:
- liczbę będącą numerem badania (odpowiadającą oznaczeniom plików wejściowych)
- liczbę oznaczającą czułość klasyfikatora (parametr opcjonalny – w przypadku jego pominięcia
przyjmowana jest domyślna czułość = 0,4)
Pliki wejściowe, jak i wynikowe przechowywane są w katalogu signals
Działanie programu określić można w punktach:
a) wczytanie pliku z danymi (spróbkowany sygnał EKG)
b) wczytanie pliku z adnotacjami (lokalizacja zespołów QRS)
c) obliczenie współczynników kształtu dla każdego zespołu QRS
d) klasyfikacja zespołów w przestrzeni współczynników
e) zwrócenie w formie pliku tekstowego przyporządkowania zespołów do klas
Omówione zostaną pokrótce powyższe punkty:
Ad a)
Program obsługuje dwa kanały EKG i takiego typu dane można mu dostarczać.
Dane pochodzą z zasobów MIT-BIH, z bazy QT
(http://www.physionet.org/physiobank/database/qtdb/).
Plik z danymi powinien mieć nazwę xxx_sig.txt, gdzie xxx to numer konkretnego badania. Każda
linia pliku odpowiada jednej chwili czasowej. W każdej linii znajdują się kolejno: czas (w
sekundach), wartość próbki dla kanału I, wartość próbki dla kanału II. Pola te są oddzielone znakami
tabulacji.
Ad b)
Adnotacje pochodzą również z bazy QT i są integralną częścią każdego zapisu badania. W opcjach
bazy wybrana została opcja adnotacji „pu”, czyli automatycznie wyznaczone granice zespołów dla
obydwu kanałów. Format adnotacji jest omówiony w opisie bazy. Plik z adnotacjami powinien mieć
nazwę xxx_ann.txt
Ad c)
Dla każdego zespołu QRS (fragment sygnału ograniczony adnotacjami początku i końca zespołu)
wyliczane są 3 współczynniki, służące do reprezentacji zespołu.
- Pole pod wykresem (za 0 przyjmujemy wartość minimalną z danego zespołu)
- Suma modułów różnic kolejnych wartości (próbek) w zespole
- Iloraz kwadratu drugiego współczynnika i pola pod wykresem.
Po policzeniu współczynników dla wszystkich zespołów są one tak normalizowane, aby średnia ich
wartość wynosiła 1.
Ad d)
Algorytm klasyfikacji przebiega następująco:
- Każdy zespół QRS reprezentowany jest przez 3 wartości, wyznaczające jego położenie w
przestrzeni współczynników.
- Pierwszy z zespołów uznawany jest za pierwszego (i jedynego na razie) przedstawiciela nowej (i
jedynej na razie) grupy. Moda (środek) tej grupy pokrywa się z jego położeniem.
- Każdy kolejny zespół analizowany jest pod kątem odległości (euklidesowej) do mody najbliższej
grupy.
- Jeżeli odległość ta jest mniejsza, niż zadany próg tolerancji, zespół ten jest uznawany za
przedstawiciela tejże grupy, a jego doń włączenie powoduje korektę położenia mody grupy.
- Jeżeli zespół leży w większym niż podany próg oddaleniu od wszystkich grup, tworzona jest nowa
grupa, a zespół ten staje się jego modą i pierwszym przedstawicielem.
- Operacja powtarza się do momentu przeanalizowania wszystkich zespołów QRS.
- Wykonywana jest niezależnie dla każdego z kanałów.
Ad e)
Do plików xxx_c_groups.txt zapisywane są wyniki, przy czym c oznacza numer kanału. W pliku
każda linia tekstu odpowiada zespołowi QRS. W każdej linii znajduje się tylko jedna dana – numer
grupy, do jakiej został przyporządkowany dany zespół. (grupy numerowane są od 0)
Dodatkowo, w pliku xxx_c_out.txt zapisywane są początki, końce, oraz punkty detekcji QRS dla
danego kanału. Każda linia pliku odpowiada jednemu zespołowi i zawiera po kolei: numer próbki
początku QRS, numer próbki punktu detekcji, numer punktu końca QRS.
Plik ten jest pomocny przy wizualizacji danych przez opisany dalej skrypt
3. Rezultaty testów
Ponieważ zarówno dane wejściowe, jak i zwracane wyniki są w formie tekstowej, konieczne było
umożliwienie oceny wyników działania programu. W tym celu napisano skrypt programu Matlab,
umożliwiający wizualizację danych na wykresach.
Skrypt (ekg.m) wywoływany jest w programie Matlab komendą: ekg(xxx);
gdzie xxx to numer badania i zarazem zestawu plików wejściowych i wyjściowych, jakie chcemy
zwizualizować. W efekcie otrzymujemy zestaw 4 wykresów, pomocnych przy wizualnej ocenie
działania klasyfikatora. Przedstawione wykresy pochodzą z analizy badania numer 221, jednego z 3
przykładowych, dołączonych do projektu.
a) Sygnał EKG dla I i II kanału z zaznaczonymi adnotacjami (z pliku xxx_c_out.txt)
2
1 .5
1
0 .5
0
-0 .5
-1
0
10
20
30
40
50
60
0
10
20
30
40
50
60
2
1 .5
1
0 .5
0
-0 .5
-1
-1 .5
- w powiększeniu widać oznaczone granice zespołó QRS:
1 .5
1
0 .5
0
-0 .5
-1
1
2
3
4
5
6
7
1
0 .5
0
-0 .5
-1
32
33
34
35
36
37
38
b) Nałożone na siebie wykresy zespołów QRS dla obydwu kanałów. Można tu optycznie
oszacować konieczną do wyróżnienia liczbę klas a następnie skonfrontować z wynikiem
klasyfikacji.
kanal 1
kanal 2
2
0 .6
0 .4
1 .5
0 .2
0
1
-0 .2
0 .5
-0 .4
0
-0 .6
-0 .8
-0 .5
-1
-1
0
10
20
30
40
50
-1 .2
60
0
20
40
60
80
c) Zestaw wykresów nałożonych na siebie przedstawicieli poszczególnych klas, wyróżnionych
przez program.
- Dla I kanału:
2
2
1
1
0
0
1 .5
1
1
0 .5
-1
0
10
20
30
-1
0 .5
0
0
20
40
60
-0 .5
0
10
20
30
0
1
1
1
1
0 .5
0 .5
0 .5
0 .5
0
0
0 .5
1
0
0
0 .5
1
0
0
0 .5
1
0
1
1
1
1
0 .5
0 .5
0 .5
0 .5
0
0
0 .5
1
0
0
0 .5
1
0
0
0 .5
1
0
1
1
1
1
0 .5
0 .5
0 .5
0 .5
0
0
0 .5
1
0
0
0 .5
1
0
0
0 .5
1
0
0
0 .5
1
0
0 .5
1
0
0 .5
1
0
0 .5
1
- Dla II kanału:
0 .5
0 .5
0
0
-0 .5
-0 .5
-1
-1 .5
0
20
40
60
0 .6
0 .4
-1
0
20
40
60
0 .4
0 .6
0 .2
0 .4
0
0 .2
-0 .2
0
-0 .4
0 .5
0 .5
0
0
-0 .5
-0 .5
0
20
40
60
0
20
40
60
0
10
20
30
0 .3
0 .2
0 .2
0 .1
0
-0 .2
-0 .2
0
20
40
60
-1
0 .5
0 .5
0
0
0
20
40
60
-1
0
0
50
100
0 .2
-0 .1
1
0
0
-0 .5
-1
-0 .5
0
50
100
-1
-1
0
20
40
60
-0 .2
0
50
100
-2
1
1
1
1
0 .5
0 .5
0 .5
0 .5
0
0
0 .5
1
0
0
0 .5
1
0
0
0 .5
1
0
0
20
40
0
0 .5
1
Jak widać, program dość dobrze wyróżnił zespoły o odmiennym kształcie. Przy czym dla każdego
kanału analiza była prowadzona osobno, stąd tylko 3 klasy w kanale I, oraz 12 w II.