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.