Detekcja i synchronizacja reprezentacji uderzeń serca
Transkrypt
Detekcja i synchronizacja reprezentacji uderzeń serca
AKADEMIA GÓRNICZO – HUTNICZA IM. STANISŁAWA STASZICA W KRAKOWIE Międzywydziałowa Szkoła Inżynierii Biomedycznej Raport końcowy projektu Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) z przedmiotu Dedykowane algorytmy diagnostyki medycznej Konsultant: dr hab. inż. Piotr Augustyniak Opracowali: Adrian Goral Piotr Tuczapski Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski Spis treści: 1. ABSTRAKT .......................................................................................................................... 3 2. WSTĘP................................................................................................................................. 4 2.1 Cel projektu ........................................................................................................................................... 4 2.2 Czym jest elektrokardiogram? ............................................................................................................ 4 2.3 Automatyczna analiza sygnału EKG ................................................................................................... 5 2.4 Detekcja zespołu QRS .......................................................................................................................... 7 2.5 Zarys ogólny proponowanego rozwiązania .................................................................................... 11 3. KONCEPCJA PROPONOWANEGO ROZWIĄZANIA ....................................................... 12 3.1 Moduł wstępnego przetwarzania danych ....................................................................................... 13 3.2 Moduł decyzyjny................................................................................................................................. 15 4. REZULTATY I WNIOSKI ....................................................................................................... 17 5. PODSUMOWANIE................................................................................................................ 20 6. LITERATURA......................................................................................................................... 21 DODATEK A. OPIS OPRACOWANYCH NARZĘDZI I METODY POSTĘPOWANIA ............... 22 A1 Opis używania oprogramowania ...................................................................................................... 22 A2 Wymagania systemowe i sprzętowe aplikacji ................................................................................. 22 A3 Opis warunków testowania oprogramowania ................................................................................ 22 DODATEK B. REALIZACJA PROPONOWANEGO ROZWIĄZANIA ........................................ 23 DODATEK C. OPIS INFORMATYCZNY PROCEDUR ............................................................... 25 C1 Opis głównych funkcji aplikacji ......................................................................................................... 25 C2 Struktury danych ................................................................................................................................. 31 DODATEK D. SPIS ZAWARTOŚCI DOŁĄCZONYCH NOŚNIKÓW ......................................... 32 2 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski 1. Abstrakt Niniejsza dokumentacja stanowi opis projektu, w ramach którego opracowano narzędzia informatyczne realizujące jeden z etapów automatycznej analizy elektrokardiogramu – detekcję i synchronizację zespołów QRS. Działanie zaprojektowanego modułu polega na wykryciu w dostarczonym sygnale EKG tzw. punktów detekcji QRS, w taki sposób, aby na każdą ewolucję serca przypadał dokładnie jeden taki punkt. Wykorzystywane w projekcie procedury detekcji zaimplementowano w języku C ++ z użyciem środowiska programistycznego Microsoft Visual Studio 2010. Prototypowanie, testy jakości na bazie danych (dostarczonej wraz z referencyjnymi punktami detekcji) oraz optymalizację używanych algorytmów przeprowadzono za pomocą narzędzi wykonanych na potrzeby projektu w środowisku NI LabVIEW. Jako element większego systemu prezentowane narzędzie korzysta z ujednoliconych struktur danych, zapisywanych do pliku tekstowego zgodnie z określonym standardem. Słowa kluczowe: EKG, QRS, Automatyczna analiza elektrokardiogramu, Detekcja zespołów QRS 3 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski 2. Wstęp 2.1. Cel projektu Celem projektu było zaimplementowanie algorytmu detekcji QRS dla wieloodprowadzeniowego zapisu EKG. Projekt jest kompatybilny ze strukturami opisu sygnału EKG i sterującymi, które zostały wyszczególnione w dodatku C2. Komunikacja z pozostałymi projektami odbywa się poprzez pliki. Jakość detektora została przetestowana z użyciem baz danych dostarczonych przez konsultanta projektu. 2.2 Czym jest elektrokardiogram? Elektrokardiogram, zwany potocznie badaniem EKG, to najprostsze i najczęściej przeprowadzane badanie w diagnostyce chorób serca. Aparat EKG zapisuje aktywność elektryczną serca w postaci graficznego obrazu na papierze milimetrowym. Rysunek 1. Przykładowy elektrokardiogram z zaznaczonymi załamkami PQRST Przyjęto umownie , że główne załamki (wychylenia zapisu aktywności elektrycznej) EKG są określane literami P, Q, R, S, T. Każdy załamek odpowiada depolaryzacji (rozładowanie elektryczne) albo repolaryzacji (ponowne naładowanie) pewnego określonego obszaru serca. Załamek P powstaje w momencie depolaryzacji mięśniówki przedsionków szerzącej się z węzła zatokowo-przedsionkowego (węzeł SA). Odstęp PR to czas potrzebny na przewodzenie bodźca elektrycznego z przedsionków do komór serca za pośrednictwem węzła przedsionkowo - komorowego (węzeł AV), który jest regulatorem przewodzenia. Zespół QRS odpowiada depolaryzacji mięśniówki komór serca. Ostęp ST 4 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski to czas wolnej i szybkiej repolaryzacji mięśniówki komór serca. Załamek T odpowiada repolaryzacji komór. Przykładowy zapis EKG został przedstawiony na rysunku 1. Standardowe EKG wykonuje się przy pomocy 12 odprowadzeń: 3 dwubiegunowe kończynowe Einthovena (I , II , III), 3 jednobiegunowe kończynowe wzmocnione Goldbergera (aVR, aVL, aVF), 6 jednobiegunowych przedsercowych Wilsona (V1, V2, V3, V4, V5, V6). Całe badanie trwa około 5-10 minut i jest badaniem nieinwazyjnym, bezbolesnym i nie związanym z żadnym ryzykiem dla pacjenta. Nie wymaga specjalnego przygotowania lub opieki po jego wykonaniu. 2.3 Automatyczna analiza sygnału EKG Interpretacja zapisu EKG rzeczą na tyle subtelną, że jedynie lekarz lub wykwalifikowany pracownik służby zdrowia potrafią dokonać dokładnej analizy sygnału EKG. Aczkolwiek postęp technologiczny w dziedzinie elektroniki i technik obliczeniowych skłania do podejmowania prób realizacji analizy w sposób automatyczny. Takie rozwiązanie powinno znaleźć szerokie zastosowanie w systemach telemedycznych (np. Kardiotele) lub jako systemy eksperckie wspierające wstępną diagnozę lekarską. Automatyczna analiza zapisu EKG wykonywana jest zazwyczaj w elektrokardiografach, a jej rezultaty są drukowane na drukarce rejestratora lub przesyłane w postaci cyfrowej do urządzeń zewnętrznych (monitor, modem, komputer zarządzający bazą danych). Istnieje również możliwość dokonania analizy tylko na zewnętrznym komputerze, do którego zostaną przesłane dane i taka sytuacja ma miejsce w przypadku korzystania ze starszych, mniej zaawansowanych technicznie elektrokardiografów. Na automatyczną analizę sygnału EKG składają się następujące etapy (rys.2): Określenie jakości sygnału, Detekcja zespołów QRS, Określenie przybliżonych rozmiarów zespołów QRS i położenia punktów synchronizacji, 5 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski Obliczenie częstości rytmu, Określenie poziomu linii izoelektrycznej i określenie stosunku sygnał/szum, Klasyfikacja zespołów QRS i wskazanie reprezentantów klas, Określenie morfologii reprezentantów klas, Określenie położenia początkowych i końcowych punktów zespołu QRS oraz załamków P i T, Obliczenie parametrów odcinka ST, Obliczenie dyspersji końca załamka T w poszczególnych odprowadzeniach, Stwierdzenie występowania późnych potencjałów komorowych, Obliczenie osi serca [1]. Określenie jakości sygnału Detekcja QRS Określenie położenia punktów synchronizacji Obliczenie częstości rytmu Określenie poziomu linii izoelektrycznej i SNR Klasyfikacja zespołów QRS Określenie morfologii klas Określenie położenia załamków PiT Obliczenie parametrów odcinka ST Obliczenie dyspersji kooca załamka T Sprawdzenie występowania późnych pot. komorowych Obliczenie osi elektrycznej serca Rysunek 2. Etapy automatycznej analizy zapisu EKG Określenie jakości zapisu EKG ma na celu selekcję sygnałów z odprowadzeń, dla których możliwa jest dalsza analiza. Niekiedy już na tym etapie dokonywana jest filtracja zakłóceń sieciowych i zakłóceń elektromiograficznych. Detekcja zespołu QRS, będąca przedmiotem niniejszego projektu, jest wykonywana w celu zidentyfikowania zespołów skurczowych serca w sygnale EKG i została szerzej opisana w podrozdziale 1.4. Wraz z detekcją zespołów QRS zostaje dokonane obliczenie ich przybliżonych rozmiarów, a dzięki temu wyznaczenie położenia punktów synchronizacji, a także obliczenie częstości rytmu serca. Określenie poziomu linii izoelektrycznej to detekcja odcinka P-Q 6 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski i wyznaczenie uśrednionej amplitudy tego odcinka. Wartość ta jest wykorzystywana jako amplituda szumu do obliczenia stosunku sygnał/szum sygnału, a jako amplituda sygnału jest przyjmowana wartość bezwzględna amplitudy zespołu QRS. Klasyfikacja zespołów QRS jest dokonywana w celu podziału zespołów na grupy, a kryterium jest kształt zespołu. Algorytm ten wykorzystuje wyznaczone uprzednio punkty synchronizacji, a efektem jego działania jest stworzenie pewnej liczby klas oraz wyznaczenie ich przedstawicieli, których morfologia zostanie określona. Działanie to ma na celu stwierdzenie czy zespoły QRS z danej klasy są fizjologicznie prawidłowe oraz z którego generatora rytmu pochodzą. Dokładne określenie położenia załamków sprowadza się do wyznaczenie pięciu punktów charakterystycznych. Parametry te mają podstawowe znaczenie dla prawidłowego diagnozowania, zatem jakość i dokładność ich wyznaczania ma decydujące znaczenie dla jakości analizy zapisu EKG. Interpretacja odcinka ST (położenie i nachylenie) ma znaczenie diagnostyczne związane z miażdżycą, chorobą wieńcową oraz oceną ryzyka wystąpienia zawału serca. Z kolei niejednorodność procesów repolaryzacyjnych mięśnia sercowego (ryzyko arytmii) jest obserwowana jako dyspersja końca załamka T w różnych odprowadzeniach. Występowanie późnych potencjałów jest związane z niejednorodnością przewodzenia pobudzeń (ryzyko tachykardii komorowej). Zjawiska te sprawiają trudności w ich rejestracji ze względu na niską amplitudę oraz sąsiedztwo zespołu QRS, dlatego też przy korzystaniu z elektrokardiografów niższej jakości ich wykrycie jest praktycznie niemożliwe. Określanie osi elektrycznej serca jest metoda pozwalającą określić położenie serca wewnątrz jamy ciała [1]. 2.4 Detekcja zespołu QRS Zespół QRS jest elektrokardiograficznego, najbardziej zapisem charakterystycznym elektrycznej aktywności elementem serca podczas sygnału skurczu (depolaryzacji) komór. Wyróżniająca go relatywnie wysoka wartość amplitudy, oraz fakt że występuje w każdej, nawet nieprawidłowej fizjologicznie ewolucji serca (nie można mówić o ewolucji serca bez wystąpienia zespołu QRS) czynią z niego doskonały punkt orientacyjny, od którego zaczyna się analizę zapisu EKG. Prawidłowa detekcja zespołów 7 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski QRS pozwala na określenie częstości akcji serca, ekstrakcję i klasyfikację całych ewolucji PQRST a w dalszej perspektywie na zastosowanie algorytmów kompresji sygnału EKG. Algorytmy detekcji zespołów QRS są przedmiotem intensywnych badań już od blisko 40 lat. Ich ewolucja odzwierciedla postęp, jaki dokonał się w tym okresie w technologii komputerowej. Początkowo poziom złożoności algorytmów do wykrywania zespołów QRS ograniczony był przez moc obliczeniową pierwszych procesorów. Komputery dostępne obecnie pozwalają na doskonalenie algorytmów pod względem skuteczności poprzez narzędzia, których zastosowanie nie było wcześniej możliwe z uwagi na zbyt długi czas obliczeń. Konieczność zachowania kompromisu pomiędzy skutecznością zastosowanej metody a wydajnością obliczeniową przestaje być najważniejszą zasadą projektowania procedur do automatycznej analizy zapisu EKG, choć czasem daje o sobie znać, czego najlepszym przykładem są programy przeznaczone dla urządzeń mobilnych zasilanych za pomocą baterii. W przypadku tego typu sprzętu zachodzi potrzeba optymalizacji zużycia energii w celu maksymalnego wydłużenia czasu eksploatacji w pojedynczym cyklu pracy baterii. Bez względu na szczegóły zastosowanych metod, w algorytmach detekcji zespołów QRS można wyróżnić dwa podstawowe etapy (rys. 3). Celem pierwszego z nich określanego angielskim terminem preprocessing jest uwydatnienie cech zapisu EKG pożądanych z punktu widzenia detekcji poprzez zastosowanie odpowiedniej kombinacji filtrów liniowych i nieliniowych. Otrzymany w ten sposób sygnał, nazywany w literaturze funkcją detekcyjną (rys. 3) jest przedmiotem działania drugiego etapu algorytmu detekcji, gdzie na drodze zaimplementowanych wcześniej procedur podejmowana jest automatycznie decyzja, które z próbek sygnału EKG są punktami detekcji. W zdecydowanej większości przypadków detekcja ta realizowana poprzez porównywanie wartości funkcji detekcyjnej z odpowiednio dobraną wartością progową. 8 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Filtracja liniowa sygnał Filtracja nieliniowa Wyznaczenie maksimów funkcja EKG Adrian Goral, Piotr Tuczapski punkty Decyzja detekcyjna Moduł wstępnego przetwarzania detekcji Moduł decyzyjny Rysunek 3. Ogólny schemat algorytmu detekcji zespołów QRS Funkcja detekcyjna powinna posiadać określone własności [1], które decydują o jej jakości, a w rezultacie o skuteczności samej detekcji. W obrębie zespołów QRS powinna ona przyjmować jak największe wartości, podczas gdy dla próbek odpowiadających pozostałej części sygnału powinny być one jak najmniejsze. Ponadto na każdy zespół QRS powinno przypadać dokładnie jedno maksimum funkcji detekcyjnej (rys 4). Pozwala to na uniknięcie błędów związanych z wielokrotnym oznaczeniem tego samego zespołu QRS. Rysunek 4. Przykładowy zapis elektrokardiograficzny (a) i wyznaczona dla niego funkcja detekcyjna (b) Najbardziej klasycznym podejściem do wyznaczania funkcji detekcyjnej jest zastosowanie w tym celu zestawu filtrów cyfrowych, w najprostszy sposób realizowanych poprzez numeryczne różniczkowanie zastosowaniu to odpowiednio rozwiązanie całkowicie elektrokardiograficznym filtru i całkowanie górno- uzasadnione, zjawiskiem i próbek sygnału, dolnoprzepustowego. gdyż cyklicznym, zespół QRS zajmującym równoważne Intuicyjnie jest jest w sygnale określone pasmo częstotliwości (rys. 5). Szacuje się, że w widmie zapisu EKG zespołowi QRS odpowiadają częstotliwości pomiędzy 10 i 25 Hz [2]. 9 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski Drugą grupę metod pozwalających na wyznaczenie funkcji detekcyjnej stanowią rozwiązania oparte na dopasowywaniu wzorców. Analiza sygnału odbywa się tutaj według schematu najbardziej zbliżonego do tego, według którego działa człowiek interpretując zapis EKG bez pomocy komputera. Elektrokardiogram jest w tym przypadku porównywany z pewnym pamięciowym wzorcem. Wartość funkcji detekcyjnej jest wprost proporcjonalna do miary podobieństwa analizowanego fragmentu sygnału do wspomnianego wzorca. Matematyczną interpretacją tej miary podobieństwa jest wzajemna korelacja wzorca i sygnału. Metody korelacyjne posiadają jednak wadę, polegającą na trudności zdefiniowania uniwersalnego wzorca, pozwalającego na osiąganie wysokich wartości korelacji bez względu na morfologię zespołu QRS, zmieniającą się przecież w zależności od odprowadzenia, z którego został zarejestrowany sygnał. Rysunek 5. Widmo częstotliwościowe sygnału EKG z wyróżnieniem jego poszczególnych składowych Innym podejściem do analizy wykorzystującej dopasowywanie wzorców jest przekształcenie sygnału EKG do ciągu tokenów, których kolejność jest następnie badana przez automat o skończonej liczbie stanów [2]. Wystąpienie tokenów w określonej sekwencji decyduje o zaklasyfikowaniu odpowiadających im próbek sygnału do zespołu QRS. Warto zauważyć, że opisywana pośrednia metoda reprezentacji sygnału zastępuje funkcję detekcyjną. Jest ona najprostszą próbą syntaktycznego opisu sygnału. 10 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski Spośród wielu innych interesujących rozwiązań problemu detekcji, które nie zostaną tu bliżej przedstawione, ponieważ nie jest to głównym celem niniejszej pracy, wypada przynajmniej wymienić metody oparte na sztucznych sieciach neuronowych. Są to zarówno nieskomplikowane sieci o topologii MLP (ang. Multi-Layer Perceptron) wymagające zbioru uczącego, jak i sieci samoorganizujące się, które mogą być także z powodzeniem stosowane w dalszych etapach analizy sygnału EKG, na przykład do klasyfikacji ewolucji serca. Odnotowano także przypadki użycia nieliniowych sieci neuronowych w charakterze predyktora sygnału EKG [3]. Ponieważ stosunkowo niewiele próbek w zapisie elektrokardiograficznym odpowiada zespołom QRS, pojawienie się ich w sygnale będzie skutkować wzrostem błędu predykcji. Wartość tego błędu można zatem wykorzystać w charakterze funkcji detekcyjnej. 2.5 Zarys ogólny proponowanego rozwiązania Zrealizowana w ramach projektu z przedmiotu „Dedykowane algorytmy diagnostyki medycznej” detekcja zespołów QRS składa się z dwóch podstawowych etapów: Wyznaczenie funkcji detekcyjnej, Wyznaczenie punktów detekcji. Pierwsza moduł projektu został zrealizowany w oparciu o zaproponowany w [2] algorytm. Przy wykorzystaniu zestawu filtrów cyfrowych zostają wykonane operacje, których wynikiem jest wyznaczenie funkcji detekcyjnej w oparciu o zapis elektrokardiograficzny. Drugi etap detekcji to wyznaczenie punktów detekcji, czyli chwil czasowych występowania zespołów QRS. Podstawowym składnikiem tej procedury jest wyznaczenie maksimów lokalnych funkcji detekcyjnej. Dobrze zrealizowana operacja wyznaczania maksimów pozwala wyznaczyć chwile czasowe, które w postaci numeru próbki zostają zwracane jako punkty detekcji. Koncepcja zaproponowanego rozwiązania została opisana szerzej opisana w rozdziale trzecim niniejszej dokumentacji. Wyniki działania zrealizowanego projektu oraz wnioski z analiz zostały przedstawione w rozdziale czwartym. Szczegóły praktyczne projektu zostały zawarte w dodatkach do dokumentacji. 11 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski 3. Koncepcja proponowanego rozwiązania W ramach projektu z przedmiotu „Dedykowane algorytmy diagnostyki medycznej” zostało wykonane oprogramowanie służące do detekcji zespołu QRS zapisu elektrokardiograficznego. Program będący przedmiotem niniejszej pracy jest częścią składową większej aplikacji wykorzystywanej do automatycznej analizy sygnału elektrokardiograficznego. Z tego powodu projekt musi być kompatybilny ze strukturami opisu sygnału EKG i sterującymi (opisanymi szerzej w dodatku C2). Oprogramowanie zostało wykonane w środowiskach programistycznych NI LabVIEW i Microsoft Visual Studio 2010. W pierwszym środowisku został wykonany prototyp implementacji algorytmu przedstawionego poniżej, natomiast wersja finalna projektu została zbudowana w środowisku Microsoft Visual Studio 2008 przy wykorzystaniu języka C++. Pierwsze z wymienionych środowisk programistycznych zostało też wykorzystane do testowania projektu. Oprogramowanie realizujące algorytm detekcji zespołu QRS składa się z dwóch podstawowych modułów: Moduł wstępnego przetwarzania danych, Moduł decyzyjny. Celem moduł wstępnego przetwarzania danych jest wyznaczenie funkcji detekcyjnej, co zostało szerzej opisane w podrozdziale 3.1. W przyjętym rozwiązaniu zostanie zastosowany algorytm wykorzystujący zestaw filtrów cyfrowych [2]. Celem modułu decyzyjnego jest wyznaczenie punktów należących do zespołu QRS (punktów detekcji) poprzez przetwarzanie funkcji detekcyjnej. W przyjętym rozwiązaniu zostanie zastosowany algorytm wykorzystujący progowanie funkcji detekcyjnej ze stałą wartością progową. [1] Koncepcja realizacji modułu decyzyjnego została szerzej przedstawiona w podrozdziale 3.2. 12 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski 3.1 Moduł wstępnego przetwarzania danych Wyznaczenie funkcji detekcyjnej poprzez wykorzystanie zestawu filtrów cyfrowych zostało wykonane na podstawie przedstawionego w [2] algorytmu. Schemat blokowy modułu wstępnego przetwarzania danych został przedstawiony na rysunku 6. Rysunek 6. Schemat blokowy modułu wstępnego przetwarzania danych Kolejnymi składowymi modułu wstępnego przetwarzania danych są: Filtracja dolnoprzepustowa, Filtracja górnoprzepustowa, Wyznaczenie pochodnej, Wyznaczenie kwadratu sygnału, Filtracja uśredniająca. Zadaniem dwóch pierwszych operacji jest wyeliminowanie szumu sygnału elektrokardiograficznego poprzez zawężenie spektrum sygnału do zakresu odpowiadającego widmu zespołów QRS. Zredukowany wpływ zakłóceń pochodzących od sieci energetycznej, potencjałów mięśni, czy też płynięcia linii izoelektrycznej wydatnie usprawnia proces detekcji zespołów QRS. Zadanie filtracji pasmowoprzepustowej zostało zrealizowane w dwóch krokach – filtracja dolno- i górnoprzepustowa. Filtracja dolnoprzepustowa została zrealizowana poprzez wykorzystanie filtru o nieskończonej odpowiedzi impulsowej (ang. Infinite Impulse Response, IIR) określonego 13 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski równaniem różnicowym (1). Częstotliwość odcięcia filtru wynosi 11 Hz, a wnoszone opóźnienie to 5 próbek. (nT) = 2y(nT - T) - y(nT - 2T) + x(nT) - 2x(nT - 6T) + x(nT - 12T) (1) Filtracja górnoprzepustowa również została zrealizowana poprzez wykorzystanie filtru o nieskończonej odpowiedzi impulsowej (ang. Infinite Impulse Response, IIR) określonego równaniem różnicowym (2). Częstotliwość odcięcia filtru wynosi 5 Hz, a wnoszone opóźnienie to 15 próbek. y(nT)= x(nT - 16T) - 1 [y(nT - T) + x(nT) - x(nT - 32T)] 32 (2) Kolejnym etapem procesu wyznaczania funkcji detekcyjnej jest wyznaczenie pochodnej sygnału. Różniczkowanie ma na celu wprowadzenie informacji o zboczach sygnału, co jest cechą charakterystyczną zespołów QRS. W niniejszym projekcie zostało wykorzystane wyznaczanie pięciopunktowej pochodnej przy pomocy filtru o skończonej odpowiedzi impulsowej (ang. Finite Impulse Response, FIR) określonego równaniem różnicowym (3). Częstotliwość odcięcia filtru wynosi 30 Hz. 1 1 1 1 y(nT)= x(nT) + x(nT – T) – x(nT – 3T) – 2x(nT – 4T) 4 8 8 4 (3) Wyznaczanie kwadratu sygnału jest jedyną nieliniową operacją w procesie wyznaczania funkcji detekcyjnej. Zadaniem tej operacji jest zmiana znaku wszystkich próbek sygnału na dodatni i nieproporcjonalne wzmocnienie sygnału, czego efektem jest wzmocnienie wyższych częstotliwości sygnału. Proces podnoszenie do kwadratu został określony równaniem (4). y(nT)= [x(nT)] 2 (4) Ostatnim elementem modułu wstępnego przetwarzania danych jest filtracja uśredniająca. Efektem tej operacji jest wyznaczenie funkcji detekcyjnej. W niniejszym projekcie filtracja uśredniająca została wykonana przy pomocy filtru o skończonej odpowiedzi impulsowej (ang. Finite Impulse Response, FIR) określonego równaniem różnicowym (5). Szerokość okna filtru uśredniającego to 20 próbek. y(nT)= 1 [x(nT – 19T) + x(nT – 18T) + …+ x(nT)] 20 (5) 14 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski Po wykonaniu wszystkich operacji jest dokonywana normalizacja wartości funkcji detekcyjnej w celu uniezależnienia dalszego przetwarzania od skali sygnału. 3.2 Moduł decyzyjny Celem modułu decyzyjnego jest wyznaczenie punktów detekcji zespołów QRS. Podstawowym składnikiem tego procesu to zlokalizowanie w przestrzeni czasu maksimów lokalnych funkcji detekcyjnej. Operacja ta jest wykonywana poprzez sprawdzenie, czy maksimum wartości próbek w przedziale czasu 32 próbek (co odpowiada okresowi równemu 250 ms) przekracza wartość progową równą 0.015 (operacja jest wykonywana po znormalizowaniu wartości funkcji detekcyjnej). W przypadku kiedy taka sytuacja nie występuje maksimum niższe od wartości progowej nie jest brane pod uwagę jako kandydat na punkt detekcji, a w kolejnej iteracji procesu sprawdzane są kolejne 32 próbki, przy czym usunięta zostaje tylko jedna „najstarsza” próbka, a zestaw 32 próbek zostaje uzupełniony tylko jedna próbką. Wykrycie maksimum wyższego od wartości progowej powoduje sprawdzenie w następnej iteracji 32 próbek oddalonych o 250 ms od końca przedziału czasowego, w którym znaleziono maksimum. Pominięcie kolejnych próbek nazywane jest z angielskiego eyeclosing. Samo stwierdzenie wyższej od wartości progowej wartości maksimum nie jest podstawą do zapisania numeru próbki jako punktu detekcji. Konieczne jest sprawdzenie czy obecne maksimum nie znajduje się zbyt blisko poprzedniego. Jako minimalny dystans, przy którym kolejne maksima uznaje się za sąsiadujące ze sobą zespoły QRS to 44 próbki, co odpowiada okresowi równemu 343,75 ms. W przypadku, gdy ostęp czasu jest niższy od podanego powyżej mniejsze z bliskich sobie maksimów zostaje wyeliminowane, gdyż jest ono prawdopodobnie pozostałością po załamkach P lub T. Numery próbek maksimów lokalnych nie znajdujących się blisko pozostałych maksimów oraz większych spośród blisko położonych maksimów stanowią punkty detekcji zespołu QRS i stanowią wynik działania niniejszego projektu. Algorytm działania modułu decyzyjnego został przedstawiony na rysunku 7. 15 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski Funkcja detekcyjna Detekcja maksimów Wartośd progowa przekroczona? Zbyt blisko poprzedniego max? Maksimum szumu Amplituda większa od poprzedniego max.? Obecne maksimum to załamek T Poprzednie maksimum to załamek P Punkty detekcji Rysunek 7. Algorytm modułu decyzyjnego 16 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski 4. Rezultaty i wnioski Wyniki działania funkcji detekcji zespołów QRS, której implementacja była przedmiotem niniejszego projektu zostały porównane z dostarczonymi przez konsultanta projektu wynikami operacji detekcji (pliki qrs_attr.out), które zostały uznane za wyniki referencyjne. Procedura testowania działania programu, to przede wszystkim porównanie ilości punktów detekcji wyznaczonych w wyniku działania będącej przedmiotem projektu detekcji z ilością punktów detekcji w wynikach referencyjnych. Zbiorcze porównanie liczby punktów detekcji zostało przedstawione w tabeli 1. Tabela 1. Porównanie działania funkcji detekcji zespołów QRS z wynikami referencyjnymi Nazwa pliku ah_21_1.dcm ah_21_2.dcm ah_21_3.dcm ah_21_4.dcm ah_23_1.dcm ah_23_2.dcm ah_29_1.dcm ah_29_2.dcm Nr kanału Liczba punktów detekcji Wyniki testowe Wyniki referencyjne Średnia odległość punktów detekcji [ms]* Kanał 1 1071 26,57 Kanał 2 1077 Kanał 3 1099 13,16 Kanał 1 1397 33,48 Kanał 2 1401 Kanał 3 1418 18,96 Kanał 1 1075 22,07 Kanał 2 1085 Kanał 3 1080 Kanał 1 949 Kanał 2 950 Kanał 3 951 Kanał 1 4645 Kanał 2 4621 Kanał 3 4645 13,46 Kanał 1 1117 16,26 Kanał 2 1120 Kanał 3 1115 14,00 Kanał 1 2582 31,13 Kanał 2 2581 Kanał 3 2614 17,72 Kanał 1 1181 26,51 Kanał 2 1199 Kanał 3 1203 1067 1409 1071 24,46 37,49 22,75 11,28 19,07 947 12,82 7,87 22,26 4633 1121 2591 1176 14,15 12,03 34,56 27,64 15,44 17 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) ah_29_3.dcm ah_29_4.dcm Adrian Goral, Piotr Tuczapski Kanał 1 946 18,62 Kanał 2 946 Kanał 3 947 7,62 Kanał 1 1068 20,10 Kanał 2 1138 Kanał 3 1135 945 12,92 1063 21,58 13,44 *) rozumiana jako średnia odległość pomiędzy poprawnie wykrytymi punktami detekcji a odpowiadającymi im punktami referencyjnymi Testowanie detekcji zespołów QRS przy porównaniu liczby punktów detekcji może wydawać się niewystarczające, dlatego zostało też wyznaczona średnia odległość pomiędzy kolejnymi punktami detekcji w wynikach testowych i referencyjnych. Wyniki tej operacji zostały również przedstawione w tabeli 1. Przedstawione powyżej wyniki procesu testowania detekcji zespołów QRS pozwalają stwierdzić, że liczba punktów detekcji w wynikach testowych i referencyjnych jest zbliżona, a średnia odległość punktów detekcji w większości przypadków nie przekracza 20ms, co świadczy o podobnej jakości wykonanej na potrzeby projektu aplikacji do narzędzia użytego w celu wyznaczenia wyników uznawanych za referencyjne. Należy zaznaczyć, że wyniki działania detekcji zespołu QRS opracowanej przez autorów niniejszej dokumentacji zostały sprawdzone również poprzez wykreślenie wykresów badania EKG i zaznaczenie na nich punktów detekcji. Przykład takiego porównania dla odcinka o długości czterech sekund został pokazany na rysunku 8. Rysunek 8. Porównanie graficzne działania funkcji detekcji zespołów QRS (czerwony) z wynikami referencyjnymi (niebieski). 18 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski Wartym podkreślenia jest fakt, że łączna długość zapisów EKG w testowanej bazie wynosi 675 minut, co oznacza ok. 600 000 ewolucji serca. Tak dużej liczby danych nie sposób przeanalizować ręcznie. Wszystkie części procedury testowania jakości detekcji zespołów QRS zostały przeprowadzone automatycznie przy użyciu oprogramowania wykonanego w środowisku NI LabVIEW. 19 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski 5. Podsumowanie Sformułowany w podrozdziale 2.1 niniejszej dokumentacji cel projektu to „zaimplementowanie algorytmu detekcji QRS dla wieloodprowadzeniowego zapisu EKG.” Zaproponowane rozwiązanie powinno być kompatybilne ze strukturami opisu sygnału EKG i sterującymi, które zostały wyszczególnione w dodatku C2. Komunikacja z pozostałymi projektami odbywać się ma się poprzez pliki. Jakość detektora została przetestowana z użyciem baz danych dostarczonej przez konsultanta projektu. Podsumowując zrealizowany i opisany w niniejszej dokumentacji projekt można stwierdzić, że wszystkie postawione cele zostały zrealizowane. Koncepcja rozwiązania problemu został przedstawiona w rozdziale trzecim, a opis jej realizacji oraz procedur informatycznych koniecznych do implementacji projektu w dodatkach B i C. Jakość detekcji zespołów QRS została szerzej opisana w rozdziale czwartym, w którym zostały przedstawione rezultaty testów projektu. Ocena jakości detekcji zespołów QRS została dokonana w odniesieniu do wyników referencyjnych. Wyniki działania detekcji uderzeń serca w wykonaniu programu będącego przedmiotem projektu są zbliżone do wyników referencyjnych, co pozwala ocenić jakość zaproponowanego rozwiązania jako porównywalną z jakością rozwiązania użytego do wyznaczenia wyników referencyjnych. Możliwymi kierunkami rozwoju projektu są; Zastosowane innego algorytmu wyznaczania funkcji detekcyjnej – metody opierające się na dopasowaniu wzorców [1], Zastosowanie algorytmu adaptacyjnego wyznaczania wartości progowej – np. wg Tompkinsa [2], Zastosowanie procedury korygującej wyznaczanie punktów detekcji – metoda przeszukiwania wstecznego (ang. search back) [1], Implementacja projektu na systemie czasu rzeczywistego (ang. real time, RT). 20 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski 6. Literatura [1] P. Augustyniak: Przetwarzanie sygnałów elektrodiagnostycznych. Wydawnictwa AGH, Kraków 2001 [2] W.J. Tompkins Biomedical Digital Signal Processing. Prentice Hall, New Jersey, 2000 [3] B.-U. Köhler, C. Henning, R. Orglmeister, The Principles of Software QRS Detection: Reviewing and Comparing Algorithms for Detecting this Important Waveform, IEEE Engineering in Medicine and Biology, January/February 2002 21 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski DODATEK A. Opis opracowanych narzędzi i metody postępowania A1 Opis używania oprogramowania Wykonana w ramach projektu aplikacja jest uruchamiana z wiersza poleceń systemu MS Windows wraz z parametrami określającymi ścieżkę folderu z danymi wejściowymi, nazwą pliku zawierającego zapis badania EKG oraz numerem kanału. Należy zaznaczyć, że odczyt dokonywany jest z pliku, w którym dane zostały zapisane w sposób binarny bez żadnego formatowania. Sposób uruchamiania aplikacji wraz z koniecznymi parametrami został pokazany poniżej: >> qrsdetector.exe [pełna ścieżka do folderu plików z danymi] [nazwa pliku z danymi] [wybrany kanał (1:3)] Po wykonaniu obliczeń wyniki w postaci struktury danych QRS_ATTR zostają zapisane w pliku ASCII. Aplikacja wypełnia danymi w postaci kolejnych numerów próbek punktów detekcji tylko element DetPt struktury QRS_ATTR. Nazwa pliku zostaje utworzona poprzez połączenie nazwy pliku oraz numeru wybranego kanału, co zostało zaprezentowane poniżej: QrsAttr_[nazwa pliku z danymi]_ch[wybrany kanał (1:3)].out Plik zostaje zapisany w podfolderze results folderu, w którym została uruchomiona aplikacja. A2 Wymagania systemowe i sprzętowe aplikacji Wymagania systemowe to system operacyjny z rodziny MS Windows dla komputera klasy Desktop PC. Wymagania sprzętowe są identyczne jak dla wybranego systemy MS Windows. A3 Opis warunków testowania oprogramowania Oprogramowanie zostało przetestowane na komputerze klasy Desktop PC przy użyciu napisanych w środowisku NI LabVIEW aplikacji testujących. Szczegóły procedur testowania aplikacji zostały opisane w rozdziale czwartym niniejszej dokumentacji. 22 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski DODATEK B. Realizacja proponowanego rozwiązania W ramach projektu z przedmiotu „Dedykowane algorytmy diagnostyki medycznej” zostało wykonane oprogramowanie służące do detekcji zespołu QRS zapisu elektrokardiograficznego. Program będący przedmiotem niniejszej pracy jest częścią składową większej aplikacji wykorzystywanej do automatycznej analizy sygnału elektrokardiograficznego. Z tego powodu projekt musi być kompatybilny ze strukturami opisu sygnału EKG i sterującymi (opisanymi szerzej w dodatku C2). Oprogramowanie zostało wykonane w środowiskach programistycznych NI LabVIEW i Microsoft Visual Studio 2010 w systemie operacyjnym MS Windows. W pierwszym środowisku został wykonany prototyp implementacji algorytmu, którego szczegóły opisano poniżej, natomiast wersja ostateczna projektu została zbudowana w środowisku Microsoft Visual Studio 2008 przy wykorzystaniu języka C++. Środowisko LabVIEW zostało także wykorzystane do testowania wykonanego programu i optymalizacji jego parametrów. Algorytm działania aplikacji można przedstawić następująco: Odczyt zapisu EKG (omówione w dodatku A1), Wyznaczanie funkcji detekcyjnej (omówione szczegółowo w podrozdziale 3.1), Wyznaczenie punktów detekcji (omówione szczegółowo w podrozdziale 3.2), Zapis punktów detekcji do pliku ASCII (omówione w dodatku A1). Jednym z ważniejszych etapów wyznaczania punktów detekcji na podstawie wartości funkcji detekcyjnej jest usuwanie leżących zbyt blisko siebie potencjalnych punktów detekcji. Potencjalne punkty detekcji są maksimami funkcji detekcyjnej znajdującymi się powyżej wartości progowej. Zdarza się jednak, że ponad wartością progową znajdą się także maksima lokalne funkcji detekcyjnej pochodzące np. od załamka P lub T. Procedura odfiltrowywania fałszywych punktów detekcji, w przeciwieństwie do innych wykorzystywanych algorytmów została przez autorów projektu zmodyfikowana w stosunku do swojej standardowej wersji, dlatego też zostanie tu opisana. Algorytm operuje na tablicy potencjanych punktów detekcji i działa następująco: 23 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski Podstawowa struktura: bufor na zbyt blisko siebie leżące potencjalne punkty detekcji (wygodnie jest go traktować jako okno o zmiennej szerokości): 1) Ustaw szerokość okna na 1. Ustaw okno na elemencie 0. 2) Weź element 1: a) jeśli jego odległość od poprzedniego jest większa od założonego minimum – przesuń okno na ten element; zapisz poprzedni element do tablicy właściwych punktów detekcji; b) jeśli nie - rozszerz okno na ten element; 3) Weź kolejny element: a) jeśli jego odległość od ostatniego elementu w oknie jest większa od założonego minimum pomniejszonego o sumę odległości pomiędzy wszystkimi kolejnymi elementami w oknie - wybierz z okna indeks, dla którego funkcja detekcji przyjmuje największą wartość i element o tym indeksie zapisz do tablicy właściwych punktów detekcji; przesuń okno na aktualny element i ustaw szerokość okna na 1; b) jeśli nie - rozszerz okno na ten element; 4) Warunek zakończenia – ostatni element w oknie jest ostatnim elementem tablicy potencjalnych punktów detekcji. Wówczas wykonaj czynności jak (a) punktu 3 (bez przesuwania okna na następny element). Najważniejsze problemy napotkane podczas realizacji projektu to: Nieprecyzyjnie wyznaczone punkty detekcji w plikach z wynikami referencyjnymi, Większe doświadczenie autorów projektu ze środowiskiem LabVIEW niż z językiem programowania C/C++ wpłynęło na efektywność (a zapewne także na jakość) ostatecznej wersji napisanej aplikacji, Szybkość i wygoda tworzenia funkcjonalnego kodu w środowisku LabVIEW jest, zdaniem autorów, bezsprzecznie większa niż w języku C++, co było jednym z głównych powodów podjęcia decyzji o wykonaniu prototypu oprogramowania w LabVIEW, Brak jasno sformułowanych zasad odnośnie obowiązujących struktur danych i formatów plików wymiany. 24 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski DODATEK C. Opis informatyczny procedur Aplikacja będąca przedmiotem niniejszego projektu została napisana przy użyciu środowiska programistycznego Microsoft Visual Studio 2010 Express. Pliki źródłowe projektu to: Main.cpp – główny plik aplikacji, Detectfcn.cpp – plik zawierający funkcje filtracji FIR, IIR i wyznaczania drugiej potęgi, Asciiexport.cpp – plik zawierający funkcje zapisu danych do pliku ASCII, Detfcnthr.cpp– plik zawierające funkcje służące do wyznaczania punktów detekcji. Funkcje wykorzystywane w aplikacji zostały szerzej opisane w dodatku C1. Poza plikami źródłowymi w skład projektu wchodzą pliki nagłówkowe zawierające definicje funkcji: Detectfcn.h Asciiexport.h Detfcnthr.h qrs_attr.h W celu kompilacji nie jest konieczne dołączenie żadnych zewnętrznych bibliotek poza standardowymi języka C++. C1 Opis głównych funkcji aplikacji Funkcja main – plik main.cpp int main(int argc, char *argv[]) Przeznaczenie: Funkcja wykonująca detekcję zespołów QRS. Argumenty funkcji: (I) int argc – liczba argumentów wejściowych (I) char *argv[] – wskaźnik do tablicy argumentów wejściowych (I) char argv[1] - pełna ścieżka do folderu plików z danymi (I) char argv[2] - nazwa pliku z danymi (I) char argv[3] - wybrany kanał (1:3) Funkcja zwraca: 0 - wszystko OK Używane funkcje: savetoASCII, SaveStructToASCII, filterFIR, filterIIR, Square, findPotDetPts, filterDetPts 25 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski Używane biblioteki: #include<iostream>, #include<fstream>, #include<sys\stat.h>, #include<vector> #include"detectfcn.h", #include"detfcnthr.h", #include"asciiexport.h", #include"qrs_attr.h" Uwagi: Dokładny schemat działania funkcji jest opisany w niniejszej dokumentacji. Plik wejściowy to plik z zapisem EKG zapisany jako surowe dane binarne. Pliki wyjściowe to pliki ASCII z zapisaną w nim strukturą danych QRS_ATTR. Autorzy: Adrian Goral, Piotr Tuczapski, MSIB AGH Ostatnia modyfikacja: 19-01-2011 Funkcja savetoASCII – plik Asciiexport.cpp void savetoASCII(float *fInSign, int iInSignLength, char *cFileName, char *cDataFileName, int iChannel) Przeznaczenie: Funkcja wykonuje zapis tablicy danych do pliku w formacie ASCII Argumenty funkcji: (I) float *fInSign - wskaźnik na tablice z danymi do zapisania (I) int iInSignLength - długość tablicy danych (I) char *cFileName - wskaźnik na nazwę pliku (I) char *cDataFileName - wskaźnik na nazwę pliku z danymi (I) int iChannel - numer kanału Funkcja zwraca: 0 - wszystko OK Używane funkcje: Brak Używane biblioteki: #include<iostream>, #include<fstream> Uwagi: Brak Autorzy: Adrian Goral, Piotr Tuczapski, MSIB AGH Ostatnia modyfikacja: 19-01-2011 26 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski Funkcja SaveStructToASCII – plik Asciiexport.cpp void SaveStructToASCII(struct QRS_ATTR *sQrsAttr, int iStructLength, char *cFileName, char *cDataFileName, int iChannel) Przeznaczenie: Funkcja wykonuje zapis tablicy danych do pliku w formacie ASCII Argumenty funkcji: (I) struct QRS_ATTR *sQrsAttr- wskaźnik na tablicę ze strukturą danych do zapisania (I) iStructLength - długość tablicy ze strukturą danych (I) char *cFileName - wskaźnik na nazwę pliku (I) char *cDataFileName - wskaźnik na nazwę pliku z danymi (I) int iChannel - numer kanału Funkcja zwraca: 0 - wszystko OK Używane funkcje: Brak Używane biblioteki: #include<iostream>, #include<fstream>, #include"qrs_attr.h" Uwagi: Brak Autorzy: Adrian Goral, Piotr Tuczapski, MSIB AGH Ostatnia modyfikacja: 19-01-2011 Funkcja filterFIR – plik Detectfcn.cpp float *filterFIR(float *fInSig, int iInSigLength, float *fCoeff, int iCoeffLength) Przeznaczenie: Funkcja wykonuje filtracje filtrem FIR Argumenty funkcji: (I) float *fInSign - wskaźnik na tablicę z danymi do zapisania (I) int iInSignLength - długość tablicy danych (I) float *fCoeff - wskaźnik na tablicę ze współczynnikami filtru (I) int iCoeffLength - długość tablicy współczynników filtru Funkcja zwraca: (O) float *fFiltSign - wskaźnik na tablicę z danymi wyjściowymi Używane funkcje: Brak Używane zmienne i biblioteki: #include<math.h> #define PI 3.14159265 Uwagi: Brak 27 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski Autorzy: Adrian Goral, Piotr Tuczapski, MSIB AGH Ostatnia modyfikacja: 19-01-2011 Funkcja filterIIR – plik Detectfcn.cpp float *filterIIR(float *fInSig, int iInSigLength, float *fInCoeff, int iCoeffLength, float *fOutCoeff) Przeznaczenie: Funkcja wykonuje filtracje filtrem IIR Argumenty funkcji: (I) float *fInSign - wskaźnik na tablicę z danymi do zapisania (I) int iInSignLength - długość tablicy danych (I) float *fCoeff - wskaźnik na tablicę ze współczynnikami mianownika filtru (I) int iCoeffLength - długość tablicy współczynników filtru (I) float *fCoeff - wskaźnik na tablicę ze współczynnikami licznika filtru Funkcja zwraca: (O) float *fFiltSign - wskaźnik na tablicę z danymi wyjściowymi Używane funkcje: Brak Używane zmienne i biblioteki: #include<math.h> #define PI 3.14159265 Uwagi: Brak Autorzy: Adrian Goral, Piotr Tuczapski, MSIB AGH Ostatnia modyfikacja: 19-01-2011 Funkcja square – plik Detectfcn.cpp float *square(float *fInSig, int iInSigLength) Przeznaczenie: Funkcja wykonuje obliczenie drugiej potęgi tablicy danych Argumenty funkcji: (I) float *fInSign - wskaźnik na tablicę z danymi do zapisania (I) int iInSignLength - długość tablicy danych Funkcja zwraca: (O) float *fSqSign - wskaźnik na tablicę z danymi wyjściowymi Używane funkcje: Brak 28 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski Używane biblioteki: #include<math.h> Uwagi: Brak Autorzy: Adrian Goral, Piotr Tuczapski, MSIB AGH Ostatnia modyfikacja: 19-01-2011 Funkcja findPotDetPts – plik Detfcnthr.cpp int *findPotDetPts(float *fDetFcn, int iDetFcnLength, float fThreshold, int iWindowSize, int iEyeClosing, int OutPotDetPtsNumber) Przeznaczenie: Funkcja zwraca indeksy potencjalnych punktów detekcji Argumenty funkcji: (I) float * fDetFcn - wskaźnik na tablice z funkcja detekcji (I) int iDetFcnLength - długość funkcji detekcji (I) float fThreshold - wartość progowa (I) int iWindowSize - rozmiar okna (I) int iEyeClosing - parametr eye-closing (O) int &iOutPotDetPtsNumber - liczba potencjalnych punktów detekcji Funkcja zwraca: (O) int *iTrimPotDetPts - wskaźnik na tablice potencjalnych punktów detekcji Używane funkcje: Brak Używane biblioteki: #include<iostream> Uwagi: Nie zaleca się stosować funkcji dla zapisów EKG zawierających więcej niż 14400 ewolucji serca. Autorzy: Adrian Goral, Piotr Tuczapski, MSIB AGH Ostatnia modyfikacja: 19-01-2011 Funkcja filterDetPts – plik Detfcnthr.cpp int *filterDetPts(float *fDetFcn, int *iPotDetPts, int iPotDetPtsNumber, int iDistance, int &iOutDetPtsNumber) Przeznaczenie: Funkcja usuwa maksima lokalne funkcji detekcyjnej lezące zbyt blisko siebie Argumenty funkcji: (I) float * fDetFcn - wskaźnik na tablicę z funkcja detekcji 29 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) (I) (I) (I) (O) int int int int Adrian Goral, Piotr Tuczapski *iPotDetPts - wskaźnik na tablicę z potencjalnymi punktami detekcji iPotDetPtsNumber - ilość potencjalnych punktów detekcji iDistance - minimalna odległość pomiędzy maksimami &iOutPotDetPtsNumber - liczba potencjalnych punktów detekcji Funkcja zwraca: (O) int *iDetPts - wskaźnik na tablice punktów detekcji Używane funkcje: Brak Używane biblioteki: #include<iostream> Uwagi: Autorzy: Adrian Goral, Piotr Tuczapski, MSIB AGH Ostatnia modyfikacja: 19-01-2011 30 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski C2 Struktury danych Procedura detekcyjna będąca przedmiotem niniejszej pracy jest częścią składową większego projektu programistycznego służącego do kompleksowej analizy sygnału elektrokardiograficznego. W celu zachowania kompatybilności z pozostałymi jego elementami prezentowany program posługuje się tymi samym głównym typem danych – strukturą języka ANSI C (rysunek 9). Rysunek 9. Schemat struktury QRS_ATTR. Opisywana struktura jest używana w programie do konstrukcji tablicy. Każdy z jej elementów zawiera informacje charakterystyczne dla pojedynczej ewolucji serca. Rozmiar tablicy definiowany jest przez ilość wykrytych zespołów QRS. Następnie, w kolejnych etapach automatycznej analizy pola struktur zawartych w tablicy są sukcesywnie wypełniane. 31 Detekcja i synchronizacja reprezentacji uderzeń serca (zespołu QRS) Adrian Goral, Piotr Tuczapski DODATEK D. Spis zawartości dołączonych nośników Na nośniku CD pliki zostały uporządkowane w katalogach, których struktura została przedstawiona poniżej: Rysunek 9. Organizacja danych na nośniku CD W katalogu głównym można wyróżnić pięć podkatalogów, których nazwa wskazuje ich funkcjonalność : − Aplikacja, − Baza zapisow EKG, − Dokumentacja, − Pliki zrodlowe, − Prezentacja. W katalogu Aplikacja zostały zawarte końcowe efekty pracy nad systemem w postaci pliku wykonywalnego qrsdetector.exe. W katalogu tym znajduje się podkatalog results, w którym znajdują się wyniki działania aplikacji. Katalog Baza zapisow EKG zawiera dostarczoną przez Konsultanta bazę zapisów EKG wraz z wynikami referencyjnymi procesu detekcji zespołów QRS. Katalog Dokumentacja zawiera niniejszą dokumentację zapisaną w formacie pdf. Katalog Plik zrodlowe zawiera pliki źródłowe i pliki nagłówkowe. Katalog Prezentacja zawiera slajdy omawiające zagadnienia związane z projektem. Prezentacja została zapisana w formacie pdf. 32