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