QRS_DET
Transkrypt
QRS_DET
Przetwarzanie sygnałów w systemach diagnostyki medycznej AKADEMIA GÓRNICZO-HUTNICZA im. St. Staszica w Krakowie WEAIiE, Katedra Automatyki Laboratorium Biocybernetyki QRS_DET Przedmiot: Przetwarzanie sygnałów w systemach diagnostyki medycznej. Temat projektu: Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS). Spis treści: 1 Abstrakt...............................................................................................................2 2 Wstęp..................................................................................................................3 3 Dyskusja wybranych metod..............................................................................10 4 Omówienie proponowanego rozwiązania........................................................14 5 Implementacja..................................................................................................16 6 Testy..................................................................................................................17 7 Wnioski.............................................................................................................22 8 Bibliografia........................................................................................................24 Dodatek A: Zawartość katalogów projektu........................................................25 Dodatek B: Opis kompilacji i uruchomienia........................................................26 Dodatek C: Narzędzia testujące..........................................................................27 Wykonali: Szymon Reszczyński, Maciej Ślimak V rok IS konsultant: dr hab. inż. Piotr Augustyniak Wersja 1.0 Kraków, 16.01.2011 1 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej 1 Abstrakt Słowa kluczowe: QRS, detekcja QRS, punkt detekcji W ramach niniejszego raportu przedstawione zostaną wyniki prac projektowych, mających na celu stworzenie fragmentu systemu (pierwszego z wymaganych), pozwalającego na automatyczną analizę zapisu 3-odprowadzeniowego badania EKG. Realizowana część systemu ma odpowiadać za detekcję zespołu QRS. Jako dane wejściowe program ma przyjmować sygnał zapisu badania EKG, a jako wyjście ma przedstawić strukturę danych z zaznaczonymi numerami próbek będącymi punktami detekcji. Całość projektu realizowana jest w języku ANSI C. Testy sprawdzające poprawność działania wykonane zostały w oparciu o dostarczoną bazę sygnałów biometrycznych - rejestrowane metodą Holtera (3-odprowadzeniowy zapis sygnału o częstotliwości próbkowania 128 Hz). 2 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej 2 Wstęp Elektrokardiografia zajmuje się przede wszystkim analizą pracy serca w oparciu o zapis zmian elektrycznych zachodzących we włóknach mięśniowych podczas jego pracy. Wszystkie zdrowe i nieuszkodzone włókna mięśniowe biorą udział w pełnym cyklu pracy serca. Dynamika oraz synchronizacja pracy mięśnia sercowego powoduje, że zapis EKG cechuje stosunkowa wyrazistość, powtarzalność oraz możliwość prostego przypisania poszczególnych zjawisk elektrycznych do określonych faz pracy. W kwestii istotnych z diagnostycznego punktu widzenia informacji powstających w oparciu o analizę zapisu EKG należy wymienić: parametry czasowe (określające kolejność oraz odstępy czasowe pobudzenia oraz relaksacji mięśnia sercowego) oraz parametry morfologiczne (określające miejsce powstawania impulsu przewodzenia oraz drogę przez niego pokonywaną). Jednym z parametrów, który jest pomijany (pomimo iż dla sygnałów w ogólnym znaczeniu jest on niezwykle istotny), jest amplituda sygnału. Wiąże się to z faktem występowania szeregu zakłóceń pozakardiologicznych oraz zakłóceń rejestracji, które nakładają się na sygnał. Wraz z rozwojem elektrokardiografii: medycyny wyodrębniono cztery ● standardowe 12-odprowadzeniowe EKG, ● elektrokardiografia próby wysiłkowej, ● 24-godzinna rejestracja metodą Holtera, ● wektokardiografia oraz elektrokardiografia wysokiej rozdzielczości. gałęzie W ramach realizacji niniejszego projektu (w zależności od decyzji Prowadzącego), uwaga skupiona zostanie na pełnym 12-sto odprowadzeniowym zapisie badania EKG (skrócone do miarodajnego okresu czasu) lub też zapis zostanie ogranczony jedynie do 3 odprowadzeń. Dane do testów i weryfikacji pochodzić mają z bazy MIT-BIH. Standardowe 12-odprowadzeniowe badanie EKG wykonywane jest w spoczynkowej pozycji leżącej, przez około 10-15 sekund oraz w temperaturze około 22 stopni Celsiusza (ze względu na możliwość wystąpienia drgań mięśni spowodowanych zbyt niską temperaturą lub nadmierną potliwością mogącą doprowadzić do powstania zakłóceń na styku elektrod i skóry). 3 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej Zastosowane odprowadzenia to: ● ● ● 3 dwubiegunowe kończynowe Einthovena (I - III), 3 jednobiegunowe kończynowe wzmocnione Goldbergera (aVR, aVL oraz aVF), 6 jednobiegunowych przedsercowych Wilsona (V1-V6). Przykładowy zapis wykonanego badania EKG został przedstawiony na poniższej ilustracji: Ilustracja 1: Przykładowy zapis EKG Analizując zapis badania EKG można potwierdzić poprawność pracy mięśnia sercowego lub wskazać pewne zmiany o charakterze patologicznym, których potwierdzenie niejednokrotnie wymaga szeregu znacznie bardziej zaawansowanych badań. Jest to jednak podstawowe badanie o charakterze przesiewowym, które dzięki niskim kosztom i któtkiemu czasowi oczekiwania na wyniki jest wykonywane jako pierwsze w przypadku podejrzenia chorób serca. 4 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej Analizując zapis EKG zwraca się w pierwszej kolejności uwagę na obecność oraz kształt załamków (dodatnich lub ujemnych odchyleń od linii izoelektrycznej). Wśród nich wymienić należy: ● ● ● ● załamek P – jest wyrazem depolaryzacji mięśnia przedsionków, cechuje go dodatnie wychylenie, zespół załamków QRS – odpowiada depolaryzacji mięśnia komór, załamki Q oraz S cechuje wychylenie ujemne, podczas gdy załamek R cechuje wychylenie dodatnie, załamek T – odpowiada repolaryzacji komór, cechuje go wychylenie dodatnie, czasami występujący załamek U, cechuje go wychylenie dodatnie. Oprócz załamków, istotnymi elementami (o określonym oraz niemogącym ulec pominięciu znaczeniu) są odcinki oraz odstępy. Wśród nich wymienić należy: ● ● ● ● ● odcinek PQ – wyraża czas przewodzenia depolaryzacji przez węzeł przedsionkowo-komorowy, odcinek ST – okres repolaryzacji komór, odstęp PQ – wyraża czas przewodzenia depolaryzacji od węzła od węzła zatokowo-przedsionkowego do węzła przedsionkowo-komorowego, odstęp ST – wyraża czas wolnej i szybkiej repolaryzacji mięśnia komór, odstęp QT – wyraża sumę czasów depolaryzacji oraz repolaryzacji mięśnia komór. Wśród istotnych, z punktu wyczytywanych z analizy zapisu badania EKG należy wymienić: ● ● ● widzenia diagnostycznego, informacji standardowego 12-odprowadzeniowego wartość rytmu serca uśredniona w ocenianym odcinku, liczba czynników bodźcotwórczych oraz ich udział w pracy mięśnia sercowego, stwierdzenie występowania odstępów i odcinków, załamków, 5 / 28 ich długości oraz wartości Przetwarzanie sygnałów w systemach diagnostyki medycznej ● określenie parametrów odcinka ST w każdym z odprowadzeń, ● określenie osi serca. Celem realizacji niniejszego projektu jest skupienie uwagi na opracowaniu algorytmu automatycznej detekcji zespołu QRS. Program ma działać jako pierwszy etap automatycznej analizy zapisu badania QRS. Sam zespół QRS cechuje się amplitudą w przedziale od 15 do 20 mm od linii izoelektrycznej oraz jego czas trwania nie powinien przekraczać 0.1 sekundy. Każde przekroczenie tej rozciągłości czasowej świadczy o występowaniu chorób mięśnia sercowego. Na całość analizy automatycznej 12-odprowadzeniowego zapisu badania EKG składają się następujące czynniki: ● określenie jakości sygnału oraz zastosowanie ewentualnej filtracji, ● detekcja zespołów załamków QRS, ● określenie poziomu linii izoelektrycznej oraz stosunku sygnału do szumu, ● określenie przybliżonych rozmiarów położenia punktu synchronizacji, zespołu załamków QRS oraz ● obliczenie częstości rytmu, ● klasyfikacja i wskazanie reprezentantów klas zespołów załamków QRS, ● określenie morfologii reprezentantów klas, ● określenie położenia początków oraz końców wszystkich załamków, ● obliczenie parametrów oraz długości odcinka ST, ● określenie parametrów załamka T, ● stwierdzenie występowania późnych potencjałów komorowych, ● obliczenie osi serca. W ramach prac nad niniejszym projektem uwaga realizujących skupiona zostanie maksymalnie na pierwszych 5 spośród wymienionych powyżej podpunktów. Dane do analizy wczytywane będą z plików tekstowych o ustalonym formacie, a wyniki detekcji wyprowadzane mają być do określonej struktury danych (format zdefiniowany przez Prowadzącego), która na etapie testowym będzie zapisywana do pliku tekstowego. W dalszej części niniejszego punktu przedstawiona zostanie ogólna metodologia detekcji zespołów QRS 6 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej wraz z ewentualnym procesem przygotowania sygnału. Dopiero kolejny punkt skupia się na bliższej analizie wybranych metod. Przystępując zatem do analizy sygnału zapisu badania EKG w pierwszej kolejności należy zbadać jakość sygnału. Dokonuje się tego poprzez porównanie dwóch pierwszych maksimów w okresie 2 sekund od początku badania (w tym czasie powinny już wystąpić zespoły QRS) do najmniejszego z maksimów występujących w kolejnych 250 milisekundach (powinien to być okres czasu wolny od zespołu QRS). Dodatkowo należy zbadać możliwość przekroczenia wartości progowej przez stosunek energii w paśmie przekraczającym 35 Hz do całkowitej energii sygnału (jest to niezbędne z powodu możliwej konieczności usunięcia zakłóceń pochodzących z sieci). W przypadku zbyt dużego zaszumienia sygnału konieczne jest analizowanie danych pochodzących z innego (o lepszych parametrach) kanału lub też usunięcie zakłóceń specjalnym filtrem cyfrowym (dotyczy to głównie zakłóceń pochodzenia sieciowego). Podstawowe założenia dotyczące pracy detektora analizującego badanie EKG zostały przedstawione poniżej: zespołu QRS ● oznaczone zostają tylko zespoły QRS, ● oznaczone zostają wszystkie zespoły QRS, ● każdy zespół QRS jest oznaczony tylko jednokrotnie, ● numer próbki wskazanej jako położenie zespołu QRS leży w jego obrębie, ● punkt detekcji zespołów QRS dla różnych kanałów leży w takiej samej odległości od początku zespołu QRS. Proces detekcji w ogólnej metodologii przebiega dwuetapowo. W pierwszej kolejności dokonuje się przekształcenia sygnału zapisu badania EKG tak aby uwypuklić obszary charakterystyczne dla zespołów QRS kosztem reszty danych. Dokonuje się tego poprzez dobranie odpowiedniej funkcji detekcyjnej, aby przyjmowała ona możliwie największe wartości w obrębie zespołów QRS, w pozostałych obszarach powinna mieć możliwie najniższe wartości oraz przyjmować maksymalnie jedno maksimum w obrębie zespołu QRS. Dodatkowo sygnałe całkuje się w zmiennym oknie czasowym aby założenia stawiane funkcji detekcyjnej zostały spełnione. Po tym procesie można przystąpić do drugiego etapu w ramach którego należy dokonać progowania funkcji detekcyjnej, w celu zaznaczenia punktów detekcyjnych. W ramach 7 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej progowania przyjmowany jest stały lub modyfikowalny próg, którego przekroczenie powoduje uznanie danej próbki jako kandydata na próg detekcji. Zmienianie wartości progu może następować jedynie w oparciu o wartości maksymalne punktów detekcji lub również biorąc pod uwagę wartości maksymalne szumów. Algorytm progowania jest względnie prosty. W pierwszej kolejności badane są maksima. Jeśli przekraczają wartość progu detekcji to punkty te uważane są za kandydatów na punkt detekcji. Jeśli nie. to uznawane są za szum. Dalej następuje analiza kandydatów na próg detekcji. Jeśli punkt ten znajduje się w odległości (od poprzedniego punktu detekcji) prawdopodobnej dla wystąpienia kolejnego załamka to wtedy jeśli maksimum to jest większe od poprzedniego to jest ono uznawane za obecnego kandydata na punkt detekcji (poprzedni uznawany jest za załamek P). Jeśli natomiast nie jest spełniony powyższy warunek to analizowany punkt zostaje uznany za załamek T (poprzednie maksimum uważane jest nadal za kandydata na punkt detekcji). Gdy odległość między punktami detekcji jest jednak zbyt mała, punkt ten nadal jest uważany za kandydata na punkt detekcji. Ostateczna weryfikacjakandydata na punkt detekcji występuje w oparciu o minimalna liczbę przekroczonych wartości podprogowych. Jeśli została ona osiągnięta to punkt ten uznawany jest za punkt detekcji. Jeśli natomiast nie została osiągnięta to punkt ten uznawany jest za załamek T. W przygotowaniu sygnału do dalszej obróbki i analizy niezwykle użyteczne jest także wskazanie poziomu linii izoelektrycznej oraz stosunku sygnału do szumu. Pierwszy z algorytmów opiera się na analizowaniu odcinka P-Q (w szczególności około 250 milisekund poprzedzających punkt detekcji). Najpierw wyznaczany jest obszar odpowiadający 30 milisekundom w okolicach punktu detekcji o jednakowym (dodatnim) znaku prędkości narastania. W obrębie tego obszaru wyznaczana jest wartość średnia (w szczególności jej ¼) potrzebna do dalszych obliczeń. Dalej w obrębie 250 milisekund poprzedzających punkt detekcji poszukiwany jest ciąg próbek odpowiadający czasowi 60 milisekund (może ulec stopniowemu zmniejszaniu w ramach algorytmu jeśli taki odcinek jest niewykrywalny), gdzie każda próbka ma mieć wartość prędkości nieprzekraczająca ¼ prędkości średniej w obrębie zespołu QRS. W dalszym etapie uśredniane są wagowo wszystkie próbki z tego odcinka a w wyniku powstaje poziom linii izoelektrycznej mięśnia sercowego. Za stosunek sygnału użytecznego do szumu przyjmuje się iloraz wartości bezwzględnej amplitudy sygnału w obrębie zespołu QRS oraz średniej wartości bezwzględnej punktów na izolinii. Badanie tego stosunku może być użyteczne do wykluczania pewnych kanałów z 12-odprowadzeniowego badania EKG lub też do pomijania 8 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej pewnych zespołów QRS w procesie dalszej analizy (w szczególności w procesie klasyfikacji). Tak przygotowane wyniki zapisywane są w specjalnie przygotowanej strukturze do pliku, z którego kolejny składnik systemu będzie mógł je odczytać i przetworzyć. Dalsza część dokumentu przybliża analizę grupy metod detekcji zespołów QRS oraz przedstawia metodę wybraną do zaimplementowania w dalszym toku prac projektowych. 9 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej 3 Dyskusja wybranych metod We wcześniejszym punkcie niniejszego raportu przedstawiony został pewien ogólny model detektora zespołów QRS. Z uwagi na ogrom i różnorodność proponowanych w literaturze metod postanowiono przedstawić pewne założenia oraz myśli przewodnie pewnych reprezentantów grup rozwiązań. W najogólniejszym zarysie metody detekcji zespołów QRS można podzielić na algorytmy opierające się na pochodnych sygnału, sztucznej inteligencji lub przekształceniach falkowych. Przytaczane w ramach niniejszego punktu metody pozwolą pokazać zasadnicze różnice w podejściach ideologicznych poszczególnych typów rozwiązań. Najprostsza z metodologii tworzenia funkcji umożliwiającej prostszą detekcję zespołów QRS opiera się na prostym zastosowaniu filtra wysokopasmowego jako narzędzia różniczkującego. Różnice między tego typu algorytmami opierają się przede wszystkim na różnicach w stosowanych numerycznych przybliżeniach procesu różniczkowania. Z reguły użyteczne są pierwsze pochodne, jednak niekiedy dodatkowo stosuje się kombinacje pierwszych i drugich różniczek podczas tworzenia funkcji opisującej QRS, której podstawowym celem jest uwypuklenie cech charakterystycznych zespołu załamków. Tak przygotowany sygnał podlega dalszej analizie, poprzez porównywanie go z odpowiednie ustalanym progiem (z reguły jest on modyfikowany oraz przede wszystkim dobrany do konkretnego sygnału). Dalsza analiza kandydatów na punkty detekcji przebiega również różnorodnie i jest szeregiem ściśle określonych algorytmicznie reguł charakterystycznych dla danej metody. Bardzo często stosowany jest dodatkowy próg pozwalający na wykluczanie fałszywie wykrytych zespołów QRS. Metody tego typu, pomimo swojej prostoty, są obecnie dosyć rzadko stosowane, ze względu na niekoniecznie zadowalającą efektywność, a przede wszystkim dość skomplikowane ciągi decyzyjne. Ich implementacja pomimo prostoty idei, nastraja niejednokrotnie niemałych problemów, aby algorytm osiągnął zadowalającą efektywność, a co za tym idzie spełniał podstawowe wymagania stawiane mu jako narzędziu wspomagającemu służbę zdrowia. Istnieje również wiele metod działających w oparciu o zastosowanie wielu połączonych filtrów wysoko oraz niskoprzepustowych, które pozwalają na 10 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej znacznie bardziej efektywne wycięcie sygnału o niewielkich amplitudach. Następnie stosowane są funkcje (głównie o charakterze kwadratowym) pozwalające na wygładzenie krawędzi przebiegu wykresu. Kolejny jednak etap nie odbiega znacząco od dotychczas przedstawionego – to znaczy analizowane i porównywane są przygotowane funkcje z modyfikowalnymi wartościami progowymi. Wśród stosowanych najczęściej filtrów występują specjalnie przygotowane filtry medianowe, które łączone są poprzez zastosowanie dosyć klasycznej metody AND. Również i w tych przypadkach istnieje szereg metod dających zadowalające efekty, jednak algorytmy nie należą do wygodnych do zaimplementowania i obarczone są ogromną liczbą zależności charakterystycznych dla pewnych grup zapisów badań EKG. Dosyć innowacyjną metodologią automatycznej detekcji zespołów QRS jest stosowanie do tego celu sieci neuronowych typu wielowarstwowego perceptronu lub sieci LVQ. Dla sieci MLP budowa ich jest dosyć prosta – opiera się bowiem na konstrukcji z prostych neuronów o funkcji przejścia w postaci tangensa hiperbolicznego lub sigmoidy. Liczba warstw sieci nie powinna przekraczać 3 a liczba neuronów również powinna być ograniczona rozsądkiem (w jednym z proponowanych rozwiązań warstwa wejściowa składała się z 8 do 10 neuronów, warstwa ukryta składała się z 5 nieliniowych neuronów, a warstwa wyjściowa składała się z jednego neuronu). Sieć neuronowa MPL działa na zasadzie próby przewidzenia stanu przyszłego w oparciu o stan poprzedni. Rozwiązanie powstałe w oparciu o sieć MLP zapewniało akceptowalne rezultaty, jednak wymagało w pierwszej kolejności dokonania procesu nauczania oraz miało pewne problemy ze zbyt zaszumionym sygnałem EKG. Sieci typu LVQ działają w oparciu o zupełnie inną zasadę. Tutaj neurony środkowej warstwy musiały się nauczyć rozpoznawania sygnałów określonego typu. Ich liczba określała liczbę grup tych sygnałów. Niestety sieć LVQ jest zdecydowanie bardziej rozbudowana (warstwy pierwsza oraz druga wymagają stworzenia nawet kilkudziesięciu neuronów) oraz wymaga dosyć dużego zbioru testowego. Co jest jednak bardzo ważne, to to że dobrze nauczona sieć typu LVQ działa w zasadzie dla każdego zapisu EKG. Podsumowując metody opierające się na sieciach neuronowych należy w pierwszej kolejności stwierdzić ich innowacyjność, jednak wymagają one dużego nakładu pracy przy ich tworzeniu oraz uczeniu. Jest to istotne zwłaszcza w kontekście możliwości popełniania błędów, bowiem nie do końca nauczona sieć neuronowa może ich popełniać znacznie więcej niż w szczegółach dopracowane rozwiązanie algorytmiczne. 11 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej Jedna spośród znalezionych metod określana mianem P-spektrum opiera się na stworzeniu specjalnie spreparowanej macierzy współczynników, która w sposób całkowity pozwala na analizę ostatecznej funkcji poprzez szukanie maksimów, dzięki czemu udaje się odnaleźć punkty czasowe w których występuje zespół QRS. O ile sama metoda wydaje się być dosyć interesującą i cechującą się prostotą implementacyjną, o tyle niestety znalezione materiały traktują tematykę dosyć pobieżnie, nie przedstawiając zbyt wiele konkretnych i szczegółowych informacji. Ostatnią z przytoczonych metodologii jest zaprzęgnięcie do detekcji zespołów QRS z zapisu badania EKG jest zastosowanie transformaty falkowej. Sama matematyczna idea transformaty falkowej opiera się na splocie (konwolucji) sygnału pochodzącego z zapisu badania EKG z wybraną falką. Zbiór falek jest dosyć obfity i stale rozwijający się z uwagi na fakt iż ta metodologia jest wspołcześnie niezwykle popularna w procesie detekcji zespołów QRS. Podobnie jak w przypadku transformaty Fouriera i tutaj mamy do czy nienie a ciągłą oraz dyskretną transformatą falkową, które to przekształcenie jest współcześnie najczęściej stosowanym. Ze względu na popularność algorytmów opartych o transformatę falkową to ta metodologia została wybrana przez realizujących projekt do zaimplementowania w toku dalszych prac. Szczegóły dotyczące wybranego rozwiązania zostaną przedstawione w kolejnym punkcie. Wśród wielu innych wymienianych metod detekcji zespołów QRS istniało wiele rozwiązań, których założenia opierały się na filtracji adaptacyjnej, zastosowaniu ukrytych modeli Markova, algorytmów genetycznych lub transformaty Hilberta. Wszystkie te propozycjie pokazują, że tematyka stworzenia detektora zespołów QRS, działającego w 100% przypadków, tak na prawdę jest jeszcze otwarta. Naukowcy i inżynierowie na całym świecie starają się odnajdywać możliwość zastosowania nowości lub dobrze znanych rozwiązań z dziedziny matematyki, informatyki lub algorytmiki. Wszystkie one działają w oparciu o tę samą ogólną zasadę, jednak pozwalają jedynie na dropną poprawę skuteczności lub szybkości działania. Jest to co prawda dosyć dużo, jednak należy pamiętać, że mają one charakter głównie akademicki lub naukowy a nie praktycznych zastosowań. Głównie ze względu na wysoki stopień skomplikowania algorytmów. Przytoczone powyżej metodologie automatycznej detekcji zespołów QRS nie wyczerpują w pełni poruszanej tematyki, jednak pozwoliły się one zorientować w dostępnych algorytmach oraz skuteczności działania, dzięki 12 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej czemu możliwym było dokonanie wyboru metody podlegającej dalszej implementacji. Szczegóły dotyczące metody oraz algorytmu zostaną przedstawione w kolejnym punkcie. 13 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej 4 Omówienie proponowanego rozwiązania Po przeanalizowaniu grupy artykułów przytaczających różnorodne metodologie automatycznej detekcji zespołów QRS, wybór metody do zaimplementowania padł w ostateczności na algorytmy oparte o transformatę falkową - przy wykorzystaniu falek Daubechies. Zastosowanie falek Daubechies w detekcji zespołów QRS jest popularne i bardzo skuteczne. Z matematycznego punktu widzenia, transformata falkowa to splot funkcji falkowej ψ (t) z sygnałem x(t). Z ortonormalnymi dyskretnymi falkami związane są funkcje skalujące φ (t) - po wykonaniu splotu z sygnałem prowadzą do otrzymania współczynników aproksymacji (S). Dyskretna aproksymacja sygnału może być przedstawiona jako: x0(t) = xM(t) + dm(t) gdzie średnia aproksymacja przy skali M wynosi: xM(t) = SM, nφ M,n (t) Wybór falek Daubechies powodowany jest tym, że ich kształt zbliżony jest do kształtu zespołów QRS, a ich energia skupiona jest wokół niskich częstotliwości. Illustration 2: Zespół QRS 14 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej Illustration 3: Kształty falek Daubechies (rzędy parzyste) Najczęściej stosowane falki Daubechies są to te falki, które należą do grupy falek o parzystych wartościach rzędu w zakresie D2-D20. Numer grupy określna liczbę współczynników. Każda falka ma dokładnie dwukrotnie mniej punktów zanikania niż wynosi liczba jej współczynników. Wraz ze wzrostem rzędu wzrasta gładkość falek. Badania przeprowadzone na Uniwersystecie Zielonogórskim [2] wskazują na niski średni błąd detekcji dla falek Daubechies w stosunku do pozostałych metod. Zgodnie z przewidywaniami, błąd detekcji ma niższą wartość dla falek wyższych rzędów. Szczególy implementacji zastosowanego rozwiązania projekcie zostaną przedstawione w końcowej wersji raportu. 15 / 28 w niniejszym Przetwarzanie sygnałów w systemach diagnostyki medycznej 5 Implementacja Program realizujący detekcję zespołów QRS zaimplementowany został, zgodnie z założeniami, w języku ANSI C. Dane dotyczące trójkanałowego sygnału wczytywane są ze strumienia wejściowego, a wyniki zwracane do pliku qrs_attr.out. Plik wejściowy zawiera trójkanałowy sygnał o częstotliwości próbkowania równej 128 Hz i skali amplitudowej 1mV = 45 LSB i zapisany jest 8-bitowo bez znaku. Podczas wczytywania danych z pliku, wartości sygnału dla danych próbek są przeliczane na liczby zmiennoprzecinkowej, wyrażające natężenie sygnalu w mV. Dane wczytywane są po jednym znaku do tablicy Signal, której rozmiar jest realokowany. Tablica jest dwuwymiarowa - pierwszy wymiar dzieli dane na kanały, w drugim znajdują się konkretne wartości dla danego kanału. Przed rozpoczęciem detekcji, dane ze wszystkich kanałów są uśredniane i analizowany jest już sygnał uśredniony. Detekcja realizowana jest przy użyciu algorytmu opartego falki Daubechies [8]. Algorytm został przerobiony i zoptymalizowany poprzez ustawienie najoptymalniejszych parametrów. Ponadto, zamiast uruchamiać go jako zewnętrzny program, do którego przekazywany jest sygnał, algorytm został dołączony do całości aplikacji jako zestaw funkcji (plik daubwave.c). Takie działanie znacząco poprawiło szybkość działania całej aplikacji. Funkcja DaubWave przyjmuje fragment sygnału - tzw. “okno” (window). Okno tworzone jest z 1024 próbek sygnału w ten sposób, że dwa kolejne okna posiadają część wspólną. Dzięki temu, sytuacje, w których załamki Q, R lub S zostałyby pominięte, gdyby znajdowały się na granicy okien, są wyeliminowane. Aplikacja jako wynik generuje plik qrs_attr.out zawierający wartości struktury QRS_ATTR. Jedynym polem struktury, które jest ustalane przez niniejszą aplikację jest punkt detekcji (DetPt) - numer próbki w sygnale oryginalnym, dla której nastąpiła detekcja zespołu QRS. 16 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej 6 Testy Aplikacja kompilowana i testowana była w 32-bitowym środowisku Linux na komputerze z procesorem klasy Intel Core 2 Duo. Poniższe wykresy prezentują wczytany sygnał wraz z zaznaczonymi załamkami QRS - wykrytymi przy użyciu aplikacji. Wykresy utworzone zostały na podstawie przetworzonego pliku z sygnałem oraz pliku zawierającego szczegóły detekcji załamków (wypisywanie tych wyników stanowi modyfikację oryginalnego programu, który zwraca wyłącznie tablicę QRS_ATTR do pliku). Za generowanie wykresu fragmentu sygnału odpowiada poniższy skrypt Matlab: % signal filename = 'ah_29_1.signal'; fid = fopen(filename, 'r'); S = fscanf(fid, '%f', [1 inf]); % qrs data filename = 'ah_29_1.data'; fid = fopen(filename, 'r'); D = fscanf(fid, '%d %f %f %d %f %f %d %f %f', [9 inf]); limit = 100000; x = 1:limit; figure; plot(x,S(x)); hold on; n = 0; i = 1; while (n < limit) A = D(:,i); % data row n = A(1); % sample count plot(A(1)+1, A(3), 'ro'); plot(A(4)+1, A(6), 'go'); plot(A(7)+1, A(9), 'ko'); i = i + 1; end 17 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej Na poniższych wykresach zaznaczono punkty detekcji załamków QRS (Q - czerwony, R - zielony, S - czarny). Wykres 1: Fragment sygnału z pliku ah_21_1 z zaznaczonymi załamkami QRS Wykres 2: Fragment sygnału z pliku ah_21_1 z zaznaczonymi załamkami QRS 18 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej Wykres 3: Fragment sygnału z pliku ah_29_1 z zaznaczonymi załamkami QRS Wykres 4: Fragment sygnału z pliku ah_29_1 z zaznaczonymi załamkami QRS 19 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej Katalog test zawiera plik z wyznaczonymi punktami detekcji (w formacie takim jak wyjściowy plik qrs_attr.out) oraz pliki referencyjne (poprawnie wyznaczone punkty). Czas wykonywania programu obliczany był przy użyciu dostępnego w systemie Linux programu time. Średnia długość wykonywania programu dla pliku zawierającego 15-minutowy sygnał (115 200 próbek) wyniosła 24 milisekundy (0.024 s). Dla dwukrotnie dłuższego sygnału (30 minut) wartość ta wyniosła około 40 milisekund. Dane te świadczą o dobrej optymalizacji algorytmu oraz wysokiej skalowalności aplikacji. Na podstawie danych wyjściowych stworzona została tabela, zawierająca szczegóły dokładności działania aplikacji dla poszczególnych plików wejściowych. plik QRS ERR = 0s ERR <= 0.008s ERR <= 0.015s ah_21_1.dcm 1078 45.083 % (486) 85.158 % (918) 94.712 % (1021) ah_21_2.dcm 1408 13.636 % (192) 45.313 % (638) 80.895 % (1139) ah_21_3.dcm 1087 33.027 % (359) 82.797 % (900) 93.836 % (1020) ah_21_4.dcm 963 49.221 % (474) 92.835 % (894) 94.289 % (908) ah_23_1.dcm 4691 21.616 % (1014) 81.326 % (3815) 92.773 % (4352) ah_23_2.dcm 1129 27.458 % (310) 86.271 % (974) 92.471 % (1044) ah_29_1.dcm 2593 23.872 % (619) 61.473 % (1594) 87.582 % (2271) ah_29_2.dcm 1183 34.742 % (411) 80.304 % (950) 94.421 % (1117) ah_29_3.dcm 959 50.261 % (482) 93.743 % (899) 94.891 % (910) ah_29_4.dcm 1074 39.106 % (420) 84.078 % (903) 93.762 % (1007) 20 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej W kolejnych kolumnach, oprócz nazwy pliku znajdują się dane: ● ● ● ● liczba wykrytych zespołów QRS Err = 0s - procent i liczba zespołów, dla których detekcja przebiegła bezbłędnie (w stosunku do danych z plików referencyjnych) Err <= 0.008s - procent i liczba zespołów, dla których błąd jest mniejszy lub równy przesunięciu o jedną próbkę (1/128 sekundy) Err <= 0.015s - procent i liczba zespołów, dla których błąd jest mniejszy lub równy przesunięciu o dwie próbki (2/128 sekundy) Jak można zauważyć, wyniki działania algorytmu odbiegają od wartości dostępnych w plikach referencyjnych. Może na to mieć wpływ kwestia uśredniania sygnału przed detekcją lub wartości niektórych parametrów. Pomimo prób kalibracji i testowania różnych zestawów parametrów, nie udało się uzyskać wyników, dla których zerowy błąd występowałby częściej. Widać jednak, że punkty detekcji w znaczącej większości przypadków (średnio ponad 90%) są po prostu przesunięte o 1 lub 2 próbki, ale sam punkt detekcji wykrywany jest poprawnie. Potwierdzenie tego znaleźć można na umieszczonych wyżej wykresach załamków QRS zaznaczonych w ramach wykresu sygnału. W opinii autorów, dokładniejsze wyniki i skuteczniejsza kalibracja parametrów byłaby możliwia w przypadku wyższej wartości częstotliwości próbkowania sygnału. Początkowe testy, przeprowadzane na wybranych plikach z bazy MIT-BIH, gdzie częstotliwość próbkowania sygnału wynosi 360 Hz, dawały bardziej satysfakcjonujące sygnały. Skrypty umożliwiające generowanie wyników aplikacje opisane są szczegółowo w sekcji Dodatek C. 21 / 28 efektywności działania Przetwarzanie sygnałów w systemach diagnostyki medycznej 7 Wnioski Biorąc pod uwagę nakład prac poświęconych na realizację projektu, należy z całą stanowczością stwierdzić, że otrzymane wyniki odzwierciedlają nie tylko czas poświęcony analizie literaturowej, ale przede wszystkim optymalizacjom, modyfikacjom oraz testom, w celu stworzenia programu dającego w wyniku efekty o najwyższym stopniu korelacji z danymi referencyjnymi. Proces analizy literaturowej ze względu na olbrzymi wachlarz propozycji rozwiązań opartych o różnorodne oraz niejednokrotnie zbyt „wydumane” metodologie, pochłonął znaczącą ilość czasu prac projektowych. Z uwagi na dosyć rozsądne źródła informacji, zadowalające wyniki testów oraz popularność transformacji falkowej, wybór padł na rozwiązanie opierające się na falkach Daubechies. Implementacja dostarczyła problemów głównie z optymalizacją czasu działania, w szczególności dla badań o długim okresie. Początkowe czasy działania okazały się stanowczo zbyt długimi, uniemożliwiającymi pracę takiego elementu podsystemu analizatora EKG odpowiedzialnego za analizę wstępną (detekcję sespołów QRS). Próbując podsumować otrzymane wyniki należy w pierwszej kolejności określić sygnał otrzymywany na wejściu systemu. Sygnał ten posiada dosyć niską wartość częstotliwości próbkowania, z reguły stosowaną dla badań rozciągających się na długi okres czasu (na przykład badania 24-godzinne). Dla badań krótkotrwałych lub monitorowania stanu zdrowia pacjenta stosuje się wyższą częstotliwość (dla większości zapisów zawartych w bazie MIT-BIH częstotliwość ta wynosi 360 Hz). Testy początkowe przeprowadzane w oparciu o dostępne w Internecie sygnały próbkowane z wyższą częstotliwością dały wyniki o akceptowalnym poziomie błędów detekcji. Otrzymane natomiast w wyniku testów rezultaty poprawnej detekcji zespołów QRS na poziomie poniżej 50% są całkowicie niedopuszczalne. Jednak po przeanalizowaniu wyników oraz wykresów przebiegu sygnałów testowych okazało się, że punkty wykrycia przesunięte są w czasie o jedną lub maksymalnie dwie próbki. W opinii autorów, efekt uzależniony jest od częstotliwości próbkowania sygnału wejściowego lub przekształceń dokonywanych w obrębie aplikacji. Analizując wyniki końcowe na wykresach przebiegów należy zauważyć, że same załamki Q, R oraz S wykrywane są w prawidłowych obszarach zespołu QRS. Uwzględniając 22 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej przesunięcie próbek, sama skuteczność detekcji wzrosła średnio do ponad 90%, co stanowi znaczną poprawę, jednak z punktu widzenia wartości diagnostycznej skuteczność ta pozostawia nadal wiele do życzenia. Bardzo ważnym mankamentem dodatkowo jest fakt nieregularności przesunięć wykrywania załamków Q, R, oraz S, który uniemożliwił ustalenie jednoznacznych sposobów poprawny dokładności detekcji. Zadowalającym jest natomiast efekt uzyskany poprzez optymalizację czasu działania aplikacji. Stanowi on wartość dobrą z punktu widzenia diagnostycznego oraz co najważniejsze, w przypadku systemów ratowania życia lub zdrowia, możliwą do zastosowania w systemach pracujących w czasie rzeczywistym. Średnia długość czasu działania programu dla pliku zawierającego 15-minutowy zapis badania EKG wyniosła 24 milisekundy (0.024 s). Dla dwukrotnie dłuższego sygnału (30 minut) wartość ta kształtowała się na poziomie zbliżonym do 40 milisekund. Dane te świadczą o dobrej optymalizacji algorytmu oraz wysokiej skalowalności aplikacji. Podsumowując rezultaty realizacji niniejszego projektu, należy z całą stanowczością stwierdzić, że entuzjastyczne wyniki badań przedstawione w artykule będącym podstawą wyboru niniejszej metody detekcji zespołów QRS, były niemożliwe do osiągnięcia dla danych zapisanych w innym formacie i próbkowanych z mniejszą częstotliwością. Zastosowana metdoda w wyniku dała rezultaty poprawne w kontekście wizualnym (na przebiegach sygnału zapisu badania EKG) jednak mało wartościowe w kontekście zastosowania w automatycznej analizie zapisu elektrokardiograficznego. Odnosi się to w szczególności do niejednoznaczności oraz nieregularności przemieszczeń punktów detekcji między wynikami referencyjnymi oraz otrzymanymi w oparciu o przygotowany program. Dodatkowo należy z całą stanowczością stwierdzić, że skuteczność poprawnego wykrywania załamków Q, R oraz S na poziomie kształtującym się nawet w okolicach 90% stanowi rozwiązanie niepraktyczne w zastosowaniu w realnych systemach ratowania życia lub zdrowia. Jako badania o charakterze naukowo-poznawczym otrzymane wyniki można uznać za zadowalające. Komercyjne oprogramowania otrzymują poprawność detekcji na poziomie kolejnych miejsc po przecinku dla wartości podstawowej przekraczającej 99%. Praca nad realizacją niniejszego projektu pokazała w szczególności złożoność procesu analizy badania EKG, znaczenie podstawowych parametrów badania oraz niezwyklą trudność osiągnięcia wyników dopuszczalnych dla zastosowań stricte medycznych. 23 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej 8 Bibliografia [1] Augustyniak Piotr: “Przetwarzanie sygnałów elektrodiagnostycznych”; Wydawnistwo AGH, Kraków 2001, [2] Duraj Agnieszka: “Algorytmy rozpoznawania zespołu QRS w sygnałach elektrokardiograficznych pochodzących od pacjentów z wszczepionym układem stymulującym”; Zielona Góra 2007, [3] Kohler Bert-Uwe, Henning Casten, Orglmaister Reinhold: “The principles of software QRS detection”; IEEE Engineering in Medicine and Biology, January/February 2002, [4] Elgendi Mohamed, Jonkman Miriam, De Boer Friso: “Improved QRS detection using dynamic thresholds”; International Journal of Hybrid Information Technology, vol.2 No. 1 January 2009, [5] Green Geoffrey: “Implementation of algorithms for QRS detection from ECG signals using TMS320C6713 processor platform”, Final report, March 2006, [6] Qiu Peng, Liu K. J. Ray: “A robust method for QRS detection based on modified P-spectrum; ICASSP, 2008, [7] Vaessen M. J.: “A QRS detection method using analog wavelet transform in ECG analysis”; 2005, [8] Mahmoodabadi S.Z., Ahmadian A., Abolhasani M. D.: “ECG feature extraction using Daubachies wavelets”; 2005, [9] Daubwave, Steven Gollmer, http://archives.math.utk.edu/software/msdos/ modelling/daubwave/.html 24 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej Dodatek A: Zawartość katalogów projektu Główny katalog z projektem zawiera, oprócz implementacji w plikach źródłowych (*.c, *.h) również bazę testowanych sygnałów oraz wyniki testów. Ponadto, do projektu dołączone są narzędzia wspomagające testowanie efektywności, czasu działania i wartości błędów. Struktura katalogów przedstawia się następująco: qrs_detect baza podkatalogi z sygnałami wejściowymi ah_21_1 ah_21_2 ... source kod źródłowy programu, Makefile test ref poprawne (referencyjne) wyniki detekcji result wyniki detekcji niniejszej aplikacji Dodatkowo, katalog główny zawiera dwa skrypty w języku bash (*.sh), wspomagające generowanie wyników i ich testowanie - są one opisane w sekcji Dodatek C. 25 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej Dodatek B: Opis kompilacji i uruchomienia Kod źródłowy aplikacji kompilowany i uruchamiany był bez komplikacji na systemach klasy Linux (Ubuntu 9.10 32-bit, Ubuntu 10.10 64-bit). W celu kompilacji wykorzystany jest program g++, jako nowszy i lepiej zoptymalizowany niż gcc. Dodatkowo przy kompilacji używana jest flaga -O4, mająca na celu optymalizację kodu i przyspieszenie czasu wykonywania aplikacji (efektem jest ponad dwukrotne skrócenie tego czasu). Kompilacja kodu źródłowego odbywa się z poziomu katalogu source: ~/qrs_detect/source$ make g++ read.c daubwave.c detection.c -O4 -o qrs_detect Efektem jest binary plik wykonywalny qrs_detect. Uruchomienie aplikacji wymaga przekazania poprzez standardowe wejście pliku wejściowego (sygnał): ~/qrs_detect/source$ ./qrs_detect < ../baza/ah_21_1/ah_21_1.dcm W efekcie tego, w bieżącym katalogu tworzony jest plik qrs_attr.out o formacie zgodnym z wymaganym w projekcie. Tylko dane z pierwszej kolumny mają wartości niezerowe i wskazują na numer próbki, w której wystąpiła detekcja zespołu QRS. 26 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej Dodatek C: Narzędzia testujące Do projektu dołączone zostały pomocnicze skrypty w języku bash, które umożliwiają zautomatyzowane generowanie wyników i ich testowanie. Korzystanie z tych narzędzi wymaga skompilowania kodu źródłowego aplikacji i skopiowania pliku wykonywalnego do katalogu głównego projektu: ~/qrs_detect/source$ make g++ read.c daubwave.c detection.c -O4 -o qrs_detect ~/qrs_detect/source$ cp qrs_detect ../ ~/qrs_detect/source$ cd ../ ~/qrs_detect$ Plik generate_results.sh realizuje akcję generowania wyników dla wszystkich zdefiniowanych sygnałów wejściowych - wykorzystuje w tym celu pliki dostępne w katalogu baza. Dla każdego sygnału wejściowego uruchamiany jest program qrs_detect i generowany plik qrs_attr.out. Następnie plik ten jest kopiowany do katalogu test/result/ pod nazwą zgodną z nazwą sygnału wejściowego (21_1 dla ah_21_1, etc.). ~/qrs_detect$ ./generate_results.sh baza/ah_21_1/ah_21_1.dcm generated baza/ah_21_2/ah_21_2.dcm generated baza/ah_21_3/ah_21_3.dcm generated ... Plik compare.sh umożliwia porównanie wyników działania aplikacji (wykrytych punktów detekcji zespołów QRS) z danymi referencyjnymi (poprawnymi), dostępnymi w katalogu test/ref/ (dane te stanowią pliki qrs_attr.out skopiowane z odpowiednich podkatalogów katalogu baza). Dla każdego pliku wynikowego, znajdującego się w katalogu test/result/, skrypt uruchamia skrypt PHP (compare.php), który dokonuje analizy zbieżności 27 / 28 Przetwarzanie sygnałów w systemach diagnostyki medycznej wyników z danymi referencyjnymi. Obliczana jest bezbłędnie wykrytych punktów detekcji oraz tych, dla których błąd przesunięcia wyniósł 1 lub 2 próbki. Dane zwracane są na standardowe wyjście w zaprezentowanej poniżej formie: ~/qrs_detect$ ./compare.sh test/result/21_1 Err == 0s 45.083 % (486 / 1078) Err <= 0.008s 85.158 % (918 / 1078) Err <= 0.015s 94.712 % (1021 / 1078) test/result/21_2 Err == 0s 13.636 % (192 / 1408) Err <= 0.008s 45.313 % (638 / 1408) Err <= 0.015s 80.966 % (1140 / 1408) test/result/21_3 Err == 0s 33.027 % (359 / 1087) Err <= 0.008s 82.889 % (901 / 1087) Err <= 0.015s 93.836 % (1020 / 1087) ... Oprócz wartości procentowych, wypisana jest także liczba poprawnie wyznaczonych punktów detekcji w stosunku do wszystkich wykrytych. 28 / 28