AKADEMIA GÓRNICZO-HUTNICZA im. St. Staszica w Krakowie WEAIiE, Katedra Automatyki Laboratorium Biocybernetyki Przedmiot: Przetwarzanie sygnałów w systemach diagnostyki medycznej. Temat projektu: Klasyfikacja uderzeń serce (QRS_CLAS). PR04307 Spis treści: 1.ABSTRAKT... 2 2.WSTĘP... 2 3.KONCEPCJA PROPONOWANEGO ROZWIĄZANIA.... 3 4.REZULTATY I WNIOSKI... 4 5.PODSUMOWANIE... 5 6.LITERATURA...5 DODATEK A: OPIS OPRACOWANYCH NARZĘDZI I METODY POSTĘPOWANIA... 5 DODATEK B: REALIZACJA PROPONOWANEGO ROZWIĄZANIA... 5 DODATEK C. OPIS INFORMATYCZNY PROCEDUR... 7 DODATEK D. SPIS ZAWARTOŚCI DOŁĄCZONYCH NOŚNIKÓW (CD ROMU)... 8 Wykonali: Robert Lubaś, Łukasz Sejmej V rok IS konsultant: dr hab. inż. Piotr Augustyniak Wersja 1.1 Kraków, luty 2011. -1-
1. Abstrakt Realizacja projektu polega na zaimplementowaniu algorytmu klasyfikacji zespołów QRS w celu określenia w dalszych etapach automatycznej analizy ich morfologii. Baza sygnałów służąca do testowania algorytmu zawierała 10 plików trzykanałowych zapisów holterowskich oraz odpowiadające im pliki z wynikami klasyfikacji zespołów QRS. Został zaproponowany i zaimplementowany algorytm klasyfikacji. Wyniki działania zostały porównane z wynikami dostarczonymi z bazą. 2. Wstęp Po przeprowadzeniu badania w urządzeniu rejestrującym sygnał EKG jest poddawany w pełni automatycznej analizie. Po zakończeniu przetwarzania urządzenia wyświetla lub drukuje rezultaty badania. Automatyczna analiza zwykle przebiega w kilku etapach. Zadaniem projektu QRS_CLAS jest klasyfikacja uderzeń serca. Polega na wyodrębnieniu grup (rodzajów kształtów) zespołów QRS podobnych do siebie w zakresie tolerancji. Ilość odmiennych grup oraz procentowy udział w całym zapisie jest dla lekarza reprezentacją aktywnych ośrodków bodźcotwórczych. Końcowych etapem jest wskazanie reprezentanta - czyli zespoły QRS, który najlepiej reprezentuje klasę. Klasyfikacji można dokonać na podstawie sygnału w obrębie zespołu lub na podstawie cech reprezentujących zespół QRS. Klasyfikacja polega na umieszczeniu klasyfikowanego zespołu w istniejącej klasie lub utworzeniu nowej klasy. Stwierdzenie przynależności odbywa się poprzez porównanie sygnału ze wzorcem klasy. W przypadku klasyfikacji wektora cech, klasyfikuję się każdy zespół QRS w postaci wektorów współczynników kształtu. Wektor może zawierać tzw. współczynnik Malinowskiej, stosunek dodatniej części amplitudy do ujemnej, procentowy udział próbek, w których prędkość przekracza trzecią część prędkości maksymalnej. Korzyść jaka płynie z zastosowania wektora cech to mniejszy nakład obliczeniowy. Ten etap automatycznej analizy jest niezbędny do wyznaczenia morfologii uderzeń serca. Najbardziej istotnym elementem morfologii cyklu EKG jest zespół QRS. To on zawiera kluczowe informacje o stanie zdrowia pacjenta. Aktualność problemu automatycznej klasyfikacji sygnałów EKG znajduję potwierdzenie w liczbie publikacji, które okazywały się w ostatnich latach. Po przeanalizowaniu artykułów łatwo jest zauważyć, że dwa najpopularniejsze narzędzia wykorzystywane obecnie w przetwarzaniu EKG to -2-
sieci neuronowe i transformata falkowa oraz kombinacje powyższych z innymi metodami. Wiele metod zostało przetestowanych tylko dla pewnego wąskiego zbioru sygnałów. Budowane klasyfikatory rozwiązują problem dwuklasowy co stanowi duże uproszczenie klasyfikacji w przypadku kilkunastu rodzajów arytmii jakie znajdują się w bazie MIT-BIH. Stosowane metody testów nie tylko zakładają różną liczbę klas, które są analizowane, ale także różnią się definiowanym wskaźnikiem jakości klasyfikacji, przez co ocena wyników jest trudna. Po analizie publikacji naukowych można wymienić kilka metod klasyfikacji zespołów QRS: ANN and Wavelet DFT, DWT i algorytmy genetyczne SVM WT oparte na ANN j48 drzewa decyzyjne 3. Koncepcja proponowanego rozwiązania. 3.1. Wprowadzenie. Proponowane przez nas rozwiązanie bazuje na pracy [1] Opisany tam algorytm pracuje na sygnałach pobranych z bazy MIT-BIH oraz Physiobank. Algorytm ten został przez nas wybrany ze względu na dość dużą skuteczność detekcji klas, dobry model oraz brak większych ograniczeń w dalszym modyfikowaniu, co umożliwi nam dalszy rozwój, edycję i wykroczenie we własnym zakresie poza podstawowe ramy metody. Algorytm klasyfikacji dzieli się na dwie części. W pierwszej opartej na algorytmie ogólnej ekstrakcji cech następuje uzupełnienie tabeli cech dla każdego fragmentu sygnału który otrzymujemy z części odpowiedzialnej za detekcję załamków QRS. W drugiej części następuje klasyfikacja zespołów QRS, z założeniem że wykryte zostały wszystkie załamki wraz z poprawnie odczytanymi zakresami. 3.2. Przygotowanie sygnału. Po wczytaniu dostarczonego sygnału z bazy sygnałów medycznych oraz punktów detekcyjnych (numer próbki przy którym nastąpiła detekcja zespołu QRS) zostaje przeprowadzona normalizacja i kwantyzacja. Tak przygotowane dane są poddawane ekstrakcji cech. -3-
3.3.Ekstrakcja cech. Do utworzenia wektora cech reprezentujących zespół QRS wykorzystywane są następujące współczynniki: Stosunek pola powierzchni figury zespołu QRS do obwodu Długość załamka QRS Odległość Q od R Odległość R od S 3.4. Klasyfikacja zespołów QRS. Po utworzeniu wektora współczynników kształtu następuję klasteryzacja każdego wykrytego zespołu QRS. Każdy współczynnik reprezentuje inną wielkość i z tego powodu wartość tolerancji jest dobierana indywidualnie. 4. Rezultaty i wnioski Do przestawienia rezultatów działanie aplikacji została napisana funkcja porównująca kolumnę pierwszą i szóstą z plików referencyjnych (qrs_attr.out). Przestawione poniżej wyniki oznaczają procentową zgodność klasyfikacji zespołów QRS dla każdego dostarczonego sygnału EKG oraz średnia szybkość działania algorytmu. Wyniki zostaną przedstawione w postaci tabeli: Plik (dcm) ah_21_1 ah_21_2 ah_21_3 ah_21_4 ah_23_1 ah_23_2 ah_29_1 ah_29_2 ah_29_3 ah_29_4 Plik (out) qrs_attr qrs_attr qrs_attr qrs_attr qrs_attr qrs_attr qrs_attr qrs_attr qrs_attr qrs_attr Zgodność % 30,45 15,33 13,53 27,97 15,43 3,38 7,44 16,83 4,89 13,54 Szybkość [ms] 32,01 54,00 40,59 23,00 134,00 53,27 69,21 34.01 33,00 30,56 Największa zgodność z wynikami z plików referencyjnych sięga 30%, najniższa z kolei to 3,38%. Ze względu na to, że współczynniki kształtu oraz wartość tolerancji dobierane były heurystycznie wyniki klasyfikacji naszym zdaniem nie są zadowalające. Prawdopodobnie zmiany w doborze wartości tolerancji poprawiłyby zgodność z referencyjnymi wynikami. Szybkość wykonania mieści się w przedziale od 32 do 134 milisekund. Jest to średni czas wykonania jednej pełnej iteracji, w skład której wchodzą następujące operacje: wczytanie sygnału, wczytanie punktów detekcji zespołu QRS, przekształcenia sygnału, wyliczenia wektora cech oraz klasyfikacja. -4-
5. Podsumowanie Celem projektu było stworzenia algorytmu automatyczne klasyfikacji zespołów QRS (wyodrębnienie zespołów o podobnych w zakresie tolerancji kształtów). Jest to jeden z etapów automatycznej analizy sygnału EKG. Być może w przyszłości, dzięki stale prowadzonym pracom nad stworzeniem jak najlepszych algorytmów automatycznej analizy EKG, będzie możliwe przeprowadzanie badań na wysokim poziomie w domu, co na pewno poprawi diagnozowanie chorób związanych z zaburzeniem pracy serca. 6. Literatura [1] Hee-Soo Park, Soo-Min Woo, Yang-Soo Kim, Bub-Joo Kang, Sang-Woo Ban, "ECG Pattern Classification Based on Generic Feature Extraction" Dongguk University, Republic of Korea 200 [2] Augustniak Piotr, "Przetwarzanie sygnałów elektrodiagnostycznych, UWND - AGH, 1999-5-
DODATEK A: Opis opracowanych narzędzi i metody postępowania Stworzony program pozwala na analizę sygnału EKG zapisanego w standardzie DCM. Porównanie wyników odbywa się poprzez skonfrontowanie ich z wynika referencyjnych dostarczonym wraz z bazą sygnałów. Aplikacja została napisana z wykorzystaniem środowiska programowania Microsoft Visual Studio 2010. Testy odbywały się na systemie operacyjnym Microsoft Windows 7 (64bit), zainstalowanym na komputerze klasy PC, wyposażonym w procesor Intel Core 2 Quad 9550 (2.8GHz) oraz 4GB pamięci RAM. Wyjście aplikacji jest drukowane na konsoli. Zawiera następujące informacje: Numer klasy Liczbę załamków w danej klasie Szablon klasy Listę punktów detekcyjnych Procentową zgodność z wynikami referencyjnymi Średni czas wykonania -6-
DODATEK B: Realizacja proponowanego rozwiązania Na podstawie wektora cech dokonujemy klasyfikacji kolejnych załamków poprzez przypisanie ich do istniejącej klasy bądź utworzenie nowej. W przypadku utworzenia nowej klasy cechy pierwszego załamka stają się wyjściowymi właściwościami klasy. Ustalone otoczenie w pewnym zakresie od właściwości klasy również do tej klasy należy. Wielkość tych progów ustalona została na podstawie analizy zakresów wartości właściwości oraz docelowej przybliżonej ilości klas. Gdy istnieje przynajmniej jedna klasa generowana jest ocena zgodności z każdą z istniejących klas na podstawie wektora cech oraz wag określających istotność tych cech. W tym przypadku istnieją trzy możliwości dalszych kroków: załamek bez wątpliwości należy do danej klasy zostaje on do niej przypisany, a właściwości klasy są ponownie ustalane są średnią artmetyczną wszystkich jego załamków, jednak z założeniem że żadna z właściwości nie może przejść wyjść poza klasę. Warunek ten zabezpiecza nas przed bezsensownym wędrowaniem klas po całej przestrzeni cech. załamek może należeć do kilku klas ten przypadek ma miejsce gdy różne cechy zbliżają analizowany fragment sygnału do różnych klas, zaś ocena przynależności nie generuje wyraźnej przewagi jednej możliwości. W takim przypadku jesteśmy zmuszenie przypisać go do klasy załamków niemożliwych do przydzielenia. załamek nie należy do żadnej z klas występuje w momencie gdy ocena dla każdej z możliwości jest zbyt niska by móc załamek przypisać jednoznacznie do którejkolwiek z klas. Wtedy przyjmujemy że dany fragment sygnału tworzy nową klasę Liczba klas nie musi być z góry narzucona, algorytm stworzy tyle ile potrzebuje, zależnie od zmian progów, wymaganych poziomów zgodności może to być więcej lub mniej. Na podstawie ogólnych obserwacji, zakresów wartości wektorów cech i domyślnej ilości oczekiwanych klas ustaliliśmy te wartości na logicznych poziomach. Klasyfikacja działa dość sprawnie i logicznie, właściwości poszczególnych klas są generowane na podstawie wejścia co pozwala na płynne przypisywanie i zmiany właściwości. Dzięki temu uzyskane wyniki są dużo lepsze niż w przypadku odgórnego ustalania właściwości klas, które zdecydowanie nie sprawdza się przy klasteryzacji, w przypadku której definiowane byłyby one na ślepo. -7-
DODATEK C. Opis informatyczny procedur Poniżej przedstawiono opis najważniejszych funkcji programu. Bardziej szczegółowy opis można znaleźć w kodzie źródłowym programu. /***************************************************************************/ /* void clustering(float** input, int* inputdata, int DetPoint, int size) */ /* Przeznaczenie: */ /* Funkcja dokonuje klasyfikacji na podstawie wektora cech */ /* Argumenty funkcji: */ /* input - tablica[][] zawierająca współczynniki kształtu */ /* inputdata - tablica[] z parametrami */ /* size - ilość punktów detekcyjnych */ /* Autor: */ /* Robert Lubaś, Łukasz Sejmej */ /* Ostatnia modyfikacja: */ /* 15 stycznia 2011 */ /***************************************************************************/ /**************************************************************************/ /* int** make_norm_qua(int** fun, int* inputdata) */ /* Przeznaczenie: */ /* Normalizacja i kwantyzacja */ /* Argumenty funkcji: */ /* fun - wartości funkcji dyskretnej dla której chcemy */ /* przeprowadzić normalizacje i kwantyzację */ /* inputdata - tablica[] z parametrami */ /* Wartość zwracana: */ /* Dyskretna tablica znormalizowanej i zkwantyzowanej funkcji */ /* Autor: */ /* Robert Lubaś, Łukasz Sejmej */ /* Ostatnia modyfikacja: */ /* 15 stycznia 2011 */ /***************************************************************************/ /**************************************************************************/ /* int** read_qrs(char *sigfilename, int* siglenght, */ /* int detpoints, int* inputdata) */ /* Przeznaczenie: */ /* Wczytywanie pojedynczego zespołu QRS */ /* Argumenty funkcji: */ /* sigfilename - nazwa pliku z zapisanym sygnałem */ /* siglenght - długość sygnalu */ /* detpoints - punkt detekcyjny dla którego sczytujemy QRS */ /* inputdata - tablica[] z parametrami */ /* Wartość zwracana: */ /* Tablica o rozmiarze ilość_kanałów X długość_sygnału */ /* Autor: */ /* Robert Lubaś, Łukasz Sejmej */ /* Ostatnia modyfikacja: */ /* 15 stycznia 2011 */ -8-
/**************************************************************************/ /**************************************************************************/ /* int** read_det_points(char *reffilename, int* dlugos_sygnalu, */ /* int punktdetekcyjny, int* inputdata) */ /* Przeznaczenie: */ /* Wczytanie punktów detekcji z pliku */ /* Argumenty funkcji: */ /* reffilename - nazwa pliku z zapisanym sygnałem */ /* punktdetekcyjny - punkt detekcyjny dla którego sczytujemy QRS */ /* Wartość zwracana: */ /* Ilość punktów detekcyjnych */ /* Autor: */ /* Robert Lubaś, Łukasz Sejmej */ /* Ostatnia modyfikacja: */ /* 15 stycznia 2011 */ /**************************************************************************/ /***************************************************************************/ /*float** make_feature_vec(int** input, int* inputdata, int featurenum) */ /* Przeznaczenie: */ /* Tworzenia wektora cech */ /* Argumenty funkcji: */ /* input - tablica danych */ /* inputdata - tablica danych przekazywanych ze struktury */ /* featurenum - ilość cech */ /* Wartość zwracana: */ /* Wektor cech */ /* Autor: */ /* Robert Lubaś, Łukasz Sejmej */ /* Ostatnia modyfikacja: */ /* 15 stycznia 2011 */ /***************************************************************************/ -9-
DODATEK D. Spis zawartości dołączonych nośników (CD ROMu) W poszczególnych folderach nośnika znajdują się: SRC - Kompletne foldery robocze z plikami źródłowymi programów i aplikacji sprzętowych zorganizowane w strukturę właściwą dla pakietu projektowego Microsoft Visual Studio 2010 EXE - postać programu gotowa do uruchomienia DOC - aktualna wersja niniejszego raportu w postaci elektronicznej -10-