-
Notifications
You must be signed in to change notification settings - Fork 0
/
pohyby.tex
209 lines (170 loc) · 17.2 KB
/
pohyby.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
\chap [chap:movement] Vyhledávání pohybů v~signálu EMG
Jelikož, jak bylo popsáno v~části \ref[sec:current-measurement], jsou pohyby detekovány pracovníkem akreditované laboratoře fyziologie práce pouze manuálně na místě, popřípadě z~videozáznamu, rozhodl jsem se posunout aktuální metodiku právě v~této oblasti a vytvořit pomůcku pro pracovníky laboratoří fyziologie pro detekci pohybů.
Cílem je vytvořit pomůcku pro pracovníka akreditované laboratoře fyziologie pro počítání pohybů, která detekuje pohyby, resp. pohybové cykly ve změřeném signálu EMG. Výsledkem je tedy seznam indexů začátků a konců jednotlivých pohybů, ze kterých jde jednak zobrazit zvýrazněné pohyby a zároveň lze z~délky seznamu zjistit počet pohybů, resp. pohybových cyklů.
Jelikož se jedná o~doplněk k~současné metodice, nikoli její náhradu, kterou ani Ministerstvo zdravotnictví ČR v~závazném metodickém návodu nedovoluje, rozhodl jsem se pro několik kompromisů. Prvním z~nich je detekce cyklů, nikoli pohybů. Důvodem pro to je, že každý pohyb má jinou sekvenci aktivace svalů, tedy směr tam není pouze opačný oproti zpět. Přesný počet pohybů lze pak dopočítat vynásobením cyklů konstantou, která vyjadřuje počet pohybů v~daném cyklu. Dalším kompromisem byla volba úrovně automatizace a to na poloautomatickou, kdy pracovník na konci vybere lépe sedící kanály a metody.
Vycházel jsem ze signálů změřených v~průběhu vývoje skriptu v~kapitole \ref[chap:signal], jelikož tato sekce ho doplňuje. Z~těchto měření využívám pouze část s~pohybem puků popsaných v~sekci \ref[sec:experiment]. Délka každého měření byla přibližně 3 minuty. U~těchto měření jsem pak označil manuálně začátky a konce cyklů, které jsem poté využíval k~testování přesnosti algoritmu.
Před samotnou detekcí pohybů posunu odečtením prvního vzorku od signálu a tedy v~jsem předešel v~dalších úpravách a filtracích zákmitům (viz obrázek \ref[fig:pohyb-zero]). Následně navrhuji několik metod, pro detekci cyklů v~signálu. Tyto metody jsou popsány v~následujích sekcích.
\midinsert
\clabel [fig:pohyb-zero] {Vstupní signál posunutý do nuly}
\picheight=7cm \cinspic pohyb-zero.png
\caption/f Vstupní signál posunutý do nuly
\endinsert
\sec [sec:corr] Vyhledání opakujících se vzorců
V~této metodě hledám opakující se cykly přímo z~měřeného signálu. Před samotným vyhledáváním odfiltruji stejnosměrnou složku pomocí inverzního Čebyševova filtru desátého řádu typu horní propust, s~mezním kmitočtem 0,35 Hz a minimálním útlumem v~zádržném pásmu 40 dB. Filtrovaný signál je vykreslen v~obrázku \ref[fig:pohyb-corr-filter]
\midinsert
\clabel [fig:pohyb-corr-filter] {Signál filtrovaný horní propustí 0,35 Hz}
\picheight=7cm \cinspic pohyb-corr-filter.png
\caption/f Signál filtrovaný horní propustí s~mezním kmitočtem 0,35 Hz
\endinsert
Na tomto filtrovaném signálu používám křížovou autokorelaci s~maximálním posunem o~30 sekund dle rovnice \ref[eq:autocorr], kde $x[n]$ je filtrovaný signál a $f_s$ vzorkovací frekvence signálu. \cite[sedlacek1993zpracovani]
$$
R_{xx}\left(r\right) = \sum_{n=-30f_s}^{30f_s} x\left[r+n\right]s^*\left[n\right]
\eqmark[eq:autocorr]
$$
Jelikož je signál repetitivní, je možné z~autokorelační funkce odečíst periodu opakující se sekvence, která se ukazuje jako vzdálenost lokálních maxim. Lokální maxima hledám s~minimální vzdáleností 1/4 sekundy, abych předešel nalezení i periody případných šumů. Následně zvolím pouze ty vrcholy, jejichž prominence je větší či rovna průměrné prominenci, což zaručí, že vyberu celou periodu nikoli její část, tedy v~praxi vyberu celý cyklus pohybu tam a zpět, nikoli tam či zpět. To je nežádoucí, jelikož každý z~těchto pohybů může mít jinou sekvenci aktivací svalů v~zápěstí a tedy bych nalezl pouze tento pohyb a ne vždy ty zbylé. Nalezené vrcholy a autokorelační funkce jsou znázorněny v~obrázku \ref[fig:pohyb-corr-xcorr].
\midinsert
\clabel [fig:pohyb-corr-xcorr] {Autokorelační funkce signálu s~nalezenými lokálními maximy}
\picheight=7cm \cinspic pohyb-corr-xcorr.png
\caption/f Autokorelační funkce signálu s~nalezenými lokálními maximy
\endinsert
Díky známé periodě cyklu, je možné vybrat vhodný úsek, který reprezentuje daný cyklus. Toho docílím tak, že naleznu všechna lokální minima, která jsou od sebe vzdálená alespoň 3/4 periody. Následně z~nich vyberu to, které je nejblíže jejich mediánu. Vybraný bod označím jako počátek úseku a konec určím jako bod o~jednu periodu dále. Ukázka takto vybraného úseku je obrázek \ref[fig:pohyb-corr-sample]. Pro výběr lze použít chytřejší algoritmy, či nechat pracovníka laboratoře vybrat manuálně začátek, popřípadě i konec a přeskočit tak potřebu hledání periody, ukázalo se, že tato metoda, je dostatečně přesná.
\midinsert
\clabel [fig:pohyb-corr-sample] {Vybraný vzorek reprezentující jednu periodu}
\picheight=7cm \cinspic pohyb-corr-sample.png
\caption/f Vybraný vzorek reprezentující jednu periodu
\endinsert
Nyní mám reprezentativní vzorek jednoho cyklu a mohu hledat ostatní cykly. Za tím účelem počítám korelaci vybraného vzorku s~pohybujícím se oknem stejné délky jako je vzorek dle rovnice \ref[eq:corr], kde $x$ je úsek vstupního signálu délky $n$, $y$ je referenční vzorek také délky $n$, $\overline{x}$ a $\overline{y}$ jsou průměry daných signálů. \cite[buxton2008correlation] Velikost kroku je jeden bod. Spočítané korelační koeficienty ukazují podobnost daných úseků s~vybraným vzorkem.
$$
r_{xy} = {{\sum_{k=1}^n\left(x[k] - \overline{x}\right) \left(y[i] - \overline{y}\right)} \over {\sqrt{\sum_{i=1}^n\left(x[i] - \overline{x}\right)^2 \sum_{i=1}^n \left(y[i]-\overline{y}\right)^2}}}
\eqmark[eq:corr]
$$
Nyní najdeme lokální maxima korelační koeficientů s~podmínkou, že jsou od sebe vzdálená alespoň 2/3 délky vzorku a z~jejich indexu dopočítáme počáteční indexy nalezených segmentů obsahující detekované cykly.
\midinsert
\clabel [fig:pohyb-corr-score] {Korelační koeficient pohybujícícho se okna a vzorku}
\picheight=7cm \cinspic pohyb-corr-score.png
\caption/f Korelační koeficient pohybujícícho se okna a vybraného vzorku s~detekovanými lokálními maximy
\endinsert
Na závěr vyberu kanál s~lepší detekcí. Zde jsem využíval možnosti výběru pracovníkem laboratoře. V~případě že je nastaven parametr pro interaktivní běh skriptu na {\tt true}, pak pracovník vybere lepší kanál a uložím jeho výběr, v~opačném případě buď nahraji uložené dřívější rozhodnutí obsluhy, či vyberu kanál, kde je více detekovaných cyklů. Následně doplním hluchá místa informacemi z~druhého kanálu. Výsledek je ukázán v~obrázku \ref[fig:pohyb-corr-res]
\midinsert
\clabel [fig:pohyb-corr-res] {Výsledek metody vyhledání opakujících se vzorců}
\picheight=7cm \cinspic pohyb-corr-res.png
\caption/f Výsledek metody vyhledání opakujících se vzorců
\endinsert
Tato metoda má nevýhodu, že ji může rozhodit nízké \glref{SNR}, tedy nízký poměr signálu k~šumu. Nicméně v~takovýchto případech je velmi spolehlivá. Nedostatky této metody se ukazují v~tabulce \ref[tab:pohyb-corr-res] u~subjektů 10 a 11. U~subjektů 5 a 9 byly detekované cykly posunuty o~1/2 periody oproti manuálně označeným hodnotám, nicméně i tato data mohou být v~praxi užitečná pro pracovníka, kde potřebuje počet cyklů, nikoli přesné hranice.
\midinsert
\clabel [tab:pohyb-corr-res] {Výsledky metody vyhledání opakujících se vzorců}
\caption/t Výsledky metody vyhledání opakujících se vzorců
\ctable {l c c c c} {
Subjekt & TP\fmark{a}\hfil & FP\fmark{b}\hfil & FN\fmark{c}\hfil & Senzitivita (\%) \hfil \crl \tskip 4pt
1 & 164 & 2 & 6 & 96,47 \cr
2 & 340 & 4 & 2 & 99.42 \cr
3 & 342 & 6 & 0 & 100 \cr
4 & 158 & 4 & 6 & 96,34 \cr
5 & 4 & 158 & 162 & 2,41 \cr
6 & 306 & 4 & 28 & 91,62 \cr
7 & 144 & 6 & 28 & 83,72 \cr
8 & 160 & 6 & 10 & 94,12 \cr
9 & 0 & 166 & 166 & 0 \cr
10 & 2 & 2 & 268 & 0,74 \cr
11 & 6 & 0 & 266 & 2,21 \cr
}
\_firstnoindent \fmark{\ } Volba kanálu proběhla manuálně\nl
\fmark{a} Počet spěšně detekovaných cyklů\nl
\fmark{b} Počet nepravdivě detekovaných cyklů\nl
\fmark{c} Počet nedetekovaných pohybů
\endinsert
\sec [sec:emg] Vyhledávání opakujících se vzorců v~obálce signálu
Jak jsem zmínil, minulá metoda je náchylná na velikost \glref{SNR}. Tuto nevýhodu lze částečně eliminovat vyhledáváním opakujících se vzorců místo v~samotném signálu v~jeho obálce singálu. Pro vyhledání obálky nejdříve přefiltruji signál Čebyševovým filtrem 10. řádu typu pásmová propust s~propustným pásmem 20 - 120 Hz a minimálním útlumem v~zádržném pásmu 40 dB. Tento signál je ukázán v~obrázku \ref[fig:pohyb-emg-envelope]
Dalším krokem je vyhledání zmíněné obálky. K~tomu využívám \glref{RMS} filtr s~velikostí okna 1/2 sekundy. Dolní obálka je počítána stejně, avšak pro signál vynásobený -1.
\midinsert
\clabel [fig:pohyb-emg-envelope] {Signál filtrovaný pásmovou propustí 20 - 120 Hz a jeho obálka}
\picheight=7cm \cinspic pohyb-emg-envelope.png
\caption/f Signál filtrovaný pásmovou propustí 20 - 120 Hz a jeho obálka
\endinsert
Pro další výpočet používám pouze horní obálku, tedy ji opět posunu do nuly a následně postupuji podobně jako v~sekci \ref[sec:corr], tedy odstraním stejnosměrnou složku horní propustí s~mezní frekvencí 0,35 Hz, naleznu pomocí křížové korelace periodu repetic a vyberu reprezentativní vzorek a najdu všechny jemu podobné úseky. Následně pracovník laboratoře vybere vhodnější kanál a v~něm chybějící informace doplním z~druhého kanálu. Výsledně detekované úseky obálky jsou ukázány v~obrázku \ref[fig:pohyb-emg-envelope-res].
\midinsert
\clabel [fig:pohyb-emg-envelope-res] {Výsledek detekce opakujících se úseků obálky}
\picheight=7cm \cinspic pohyb-emg-envelope-res.png
\caption/f Výsledek detekce opakujících se úseků obálky
\endinsert
Tato metoda je značně spolehlivější u~signálu s~vyšším šumem, nicméně u~činností, kde je nízká vynaložená síla ztrácí dostatek dat. To lze pozorovat v~tabulce \ref[tab:pohyb-emg-res] u~subjektů 1 a 2. Naopak subjekty 10 a 11 mají na rozdíl od tabulky \ref[tab:pohyb-corr-res] velmi vysokou úspěšnost.
\midinsert
\clabel [tab:pohyb-emg-res] {Výsledky metody vyhledávání opakujících se vzorců v~obálce signálu}
\caption/t Výsledky metody vyhledávání opakujících se vzorců v~obálce signálu
\ctable {l c c c c} {
Subjekt & TP\fmark{a}\hfil & FP\fmark{b}\hfil & FN\fmark{c}\hfil & Senzitivita (\%) \hfil \crl \tskip 4pt
1 & 64 & 118 & 108 & 37,21 \cr
2 & 160 & 16 & 184 & 46,51 \cr
3 & 318 & 34 & 36 & 89,83 \cr
4 & 156 & 12 & 8 & 95,12 \cr
5 & 162 & 6 & 6 & 96,43 \cr
6 & 284 & 50 & 56 & 83,53 \cr
7 & 126 & 58 & 58 & 68,48 \cr
8 & 168 & 0 & 2 & 98,82 \cr
9 & 164 & 2 & 2 & 98,8 \cr
10 & 270 & 2 & 0 & 100 \cr
11 & 272 & 0 & 0 & 100 \cr
}
\_firstnoindent \fmark{\ } Volba kanálu proběhla manuálně\nl
\fmark{a} Počet spěšně detekovaných cyklů\nl
\fmark{b} Počet nepravdivě detekovaných cyklů\nl
\fmark{c} Počet nedetekovaných pohybů
\endinsert
\sec [sec:merge_methods] Spojení metod
Jednotlivé dříve popsané metody mají své výhody a nevýhody a jsou úspěšnější pro jiný typ signálu. Díky tomu je třeba opět vybrat lepší metodu a následně doplnit případná chybějící data pomocí zbylých metod. K~tomu používám podobný způsob rozhodování jako při výberu lepších kanálů, kdy pracovník laboratoře buď vybere manuálně lepší metodu a jeho výběr se uloží pro příští spuštění skriptu na tom samé datasetu, popřípadě se použije metoda s~vyšším počtem cyklů. Detekované cykly po spojení jsou znázorněny v~obrázku \ref[fig:pohyb-res].
\midinsert
\clabel [fig:pohyb-res] {Detekované cykly pomocí navržené metodiky}
\picheight=7cm \cinspic pohyb-result.png
\caption/f Detekované cykly pomocí navržené metodiky
\endinsert
Kombinace těchto metod s~manuální volbou jak kanálů, tak metod, je velmi efektivní a dosahuje specificity 95 \%, jak je ukázáno v~tabulce \ref[tab:pohyb-res]. Ukazuje se také, že subjekty 1, 4 a 6 se zlepšili oproti tabulce \ref[tab:pohyb-corr-res] díky využití výsledků z~metody vyhledávání opakujících se vzorců na obálce.
\midinsert
\clabel [tab:pohyb-res] {Výsledky metodiky}
\caption/t Výsledky metodiky s~kombinací metod \ref[sec:corr] a \ref[sec:emg]
\ctable {lcccc} {
Subjekt & TP\fmark{a}\hfil & FP\fmark{b}\hfil & FN\fmark{c}\hfil & Senzitivita (\%) \hfil \crl \tskip 4pt
1 & 174 & 10& 0 & 100 \cr
2 & 340 & 4 & 2 & 99,42 \cr
3 & 344 & 12 & 0 & 100 \cr
4 & 162 & 4 & 2 & 98,78 \cr
5 & 166 & 10 & 4 & 97,65 \cr
6 & 348 & 10 & 6 & 98,31 \cr
7 & 174 & 20 & 10 & 94,57 \cr
8 & 168 & 2 & 2 & 98,82 \cr
9 & 164 & 2 & 2 & 98,8 \cr
10 & 270 & 0 & 0 & 100 \cr
11 & 272 & 0 & 0 & 100 \cr
}
\_firstnoindent \fmark{\ } Volba kanálů i metod proběhla manuálně\nl
\fmark{a} Počet spěšně detekovaných markerů\nl
\fmark{b} Počet nepravdivě detekovaných markerů\nl
\fmark{c} Počet nedetekovaných markerů
\endinsert
\sec [sec:other_signal] Využití při měření jiných signálů
Navrženou metodiku jsem zkusil aplikovat i na jiné signály, než měřené EMG. Algoritmus tak jak je napsán, detekuje obecné cykly, jelikož každý pracovník má jinou náplň práce, popřípadě jiný postup. Díky tomu lze při drobných úpravách, jako je posunutí propustného pásma pásmové propusti v~sekci \ref[sec:emg], aplikovat tento algoritmus na jiné repetitivní signály, např. EKG zdravého člověka. Nevýhodou však je, že při abnormalitách v~signálu se nezvládá algoritmus adaptovat. Toto jsem ověřil na datasetu ECG-ID. \cite[lugovaya2005biometric] Zde nebylo třeba upravovat parametry, obálka 20 - 120 Hz velmi dobře ukázala jednotlivé R-špičky. Výsledné detekce dosahuje specificity 93 \%, viz tabulka \ref[tab:ecg]. Zvýrazněné pohyby jsou ukázány v~obrázku \ref[fig:ecg].
\midinsert
\clabel [tab:ecg] {Výsledky metodiky aplikované na EKG}
\caption/t Výsledky metodiky aplikované na EKG
\ctable {lcccc} {
Nahrávka\fmark{a} & TP\fmark{b}\hfil & FP\fmark{c}\hfil & FN\fmark{d}\hfil & Senzitivita (\%) \hfil \crl \tskip 4pt
Person_01/rec_1 (100) & 52 & 0 & 4 & 92,86 \cr
Person_01/rec_2 (101) & 50 & 0 & 2 & 96,15 \cr
Person_01/rec_3 (102) & 50 & 2 & 0 & 100 \cr
Person_02/rec_1 (103) & 48 & 2 & 0 & 100 \cr
Person_02/rec_2 (104) & 56 & 0 & 2 & 96,55 \cr
Person_02/rec_3 (105) & 58 & 2 & 0 & 100 \cr
Person_03/rec_1 (106) & 46 & 2 & 2 & 95,83 \cr
Person_03/rec_2 (107) & 50 & 0 & 2 & 96,15 \cr
Person_03/rec_3 (108) & 44 & 2 & 2 & 95,65 \cr
}
\_firstnoindent \fmark{\ } Volba kanálů i metod proběhla manuálně\nl
\fmark{a} Údaj v~závorce je číslo subjektu v~přiložených souborech viz příloha \ref[chap:files]\nl
\fmark{b} Počet spěšně detekovaných markerů\nl
\fmark{c} Počet nepravdivě detekovaných markerů\nl
\fmark{d} Počet nedetekovaných markerů
\endinsert
\midinsert
\clabel [fig:ecg] {Výsledek aplikace metodiky na signál ECG}
\picheight=7cm \cinspic ecg.png
\caption/f Výsledek aplikace metodiky na signál ECG
\endinsert