Niniejsze sprawozdanie zostało wykonane w ramach zaliczenia projektu z przedmiotu Metody i algorytmy sztucznej inteligencji.
The project described in this report has been completed to fulfill the requirements for the course: Methods and algorithms of artificial intelligence.
EMG signals are result of muscle vibration occurring while performing movements. These vibrations (mio-potentials) are measured by electrodes placed of forearm of the subject. Further, signals are transmitted in a form of currents of various frequencies to the device that acquires them.
The purpose of this project is to recognize movements of object’s (patient’s) forearm, based on EMG signals. Extraction of specific set (vector) of features from the signal is done by using autoregression method. Nearest-Neighbor algorithm was used to categorize EMG-signal’s characteristics to specific class of movement. Throughout analysis and classification we used MATLAB environment.
In the final phase of our project we carried out experiments to check whether classification of measured EMG-signal was correct, and whether the patient did perform identified, or similar, movement in reality. Results show that we achieved correct classification in 85% of cases while using 4 different classes of movements, and 68% for 5 classes.
Sygnały EMG powstają w wyniku zmierzenia aktywności mięśni, które drgają podczas wykonywania czynności. Drgania te (miopotencjały) mierzone są za pomocą elektrod. Następnie przekazywane są w postaci napięć o różnej częstotliwości do urządzenia zczytującego pomiary.
Celem projektu jest rozpoznanie ruchu dłoni na podstawie sygnałów EMG rejestrowanych na przedramieniu pacjenta. Ekstrakcja wektora cech z sygnału została wykonana metodą autoregresji. Do klasyfikacji sygnału do konkretnego ruchu ręki użyliśmy algorytmu najbliższego sąsiada (NN - Nearest Neighbour). Do analizy i klasyfikacji sygnałów wykorzystaliśmy środowisko Matlab.
Końcowym etapem projektu było przeprowadzenie eksperymentu polegającego na klasyfikacji zmierzonego sygnału do pewnej klasy ruchu ręki za pomocą wykorzystanej przez nas metody i sprawdzenie, czy w rzeczywistości pacjent wykonywał podobny ruch.
Baza analizowanych sygnałów pochodzi z gotowych pomiarów ruchów dłoni opracowanych przez inne grupy przy pomocy stanowiska dostępnego w laboratorium 06. Pomiary obejmują 5 różnych ruchów dłoni:
Pomiary zostały wykonane z częstotliwością 1kHz, czyli 1000 próbek/sek. Jeden ruch trwał średnio 1,5 sek i był powtarzany 10-15 razy. Dysponowaliśmy pomiarami z 8 kanałów, przy czym analizie poddaliśmy 5 najbardziej reprezentatywnych kanałów.
W pierwszym etapie wyodrębnialiśmy z sygnału tylko te fragmenty, w których pacjent rzeczywiście wykonywał ruch. Zmierzone sygnały EMG były obarczone zakłóceniami wynikającymi m.in. z niedokładności użytego sprzętu pomiarowego (elektrod) oraz potencjału elektrycznego znajdującego się na skórze pacjenta. W celu eliminacji dużej wariancji pomiarów zastosowaliśmy filtrację sygnału średnią ruchomą rzędu 10 (rys 1.)
Rys.1 Sygnał EMG – kolor czerwony. Na niebiesko sygnał po wygładzeniu średnią ruchomą rzędu 10.
Następnie wyrównaliśmy pozostałe małe wahania sygnału poprzez zastąpienie ich średnią wartością z każdej paczki danych o liczności 500 próbek (co odpowiada 0.5 sek ruchu).
Rys.2 Na czerwono – sygnał po eliminacji zakłóceń.
Mając tak przygotowane dane, obliczyliśmy średnią energię sygnału, sumując energie paczek danych po 500 próbek i dzieląc przez ilość paczek. Energia jednej paczki danych definiowana jest poniższym wzorem, gdzie N oznacza liczność paczki:
Uznawaliśmy, że w danej paczce został wykryty ruch, jeśli energia tej paczki była większa bądź równa średniej energii całego sygnału. Następnie porównywaliśmy, w których paczkach został wykryty ruch dla wszystkich pięciu kanałów danego sygnału. Ostatecznie akceptowaliśmy tylko te paczki, dla których ruch był wykryty dla co najmniej mniej 3 kanałów.
Rys. 3 Sygnał składający się z 5 paczek (2500 próbek). Na czerwono – paczka, dla której został wykryty ruch.
Ekstrakcja cech sygnału polega na wyodrębnieniu z sygnału wektora cech, na podstawie którego będziemy mogli zaklasyfikować sygnał do jednego z 5 rodzajów ruchu ręki opisanych w punkcie 2.1. Do ekstrakcji cech wykorzystaliśmy metodę autoregresji używaną do analizy szeregów czasowych.
W modelach autoregresyjnych wartość obecna Yt zmiennej prognozowanej określana jest funkcją od wartości tej samej zmiennej z okresów poprzednich oraz czynnika losowego:
Model autoregresji AR(p) to liniowy model autoregresji rzędu p:
Zakładamy, że εt ma rozkład N(0,σ).
Pojawiające się we wzorze współczynniki α są szukanymi przez nas cechami sygnału. Do ich wyznaczenia zastosowaliśmy metodę najmniejszych kwadratów dla modeli liniowych. Metoda ta minimalizuje kwadratowy wskaźnik niedopasowania danych do modelu, tzn. wyznacza α* = arg min Q(α), gdzie
ŷ - prawdziwy sygnał
y - model sygnału y otrzymany metodą autoregresji
Szczegóły wyznaczania współczynników a metodą najmniejszych kwadratów opisano w pracy [6].
Dysponujemy wektorami cech sygnału o liczności p, uzyskanymi metodą autoregresji AR(p). Wektor cech obliczony został dla każdego z pięciu kanałów, co daje p*5 cech określających sygnał. Dodatkowo z etapu wykrywania ruchu (pkt. 2.2) mamy 8-14 fragmentów każdego z 5 sygnałów reprezentujących różne ruchy ręki. Za pomocą metody najbliższych sąsiadów dokonamy klasyfikacji nieznanego sygnału jako jednego z 5 ruchów dłoni.
Algorytm ten zalicza klasyfikowany obiekt x do zbioru, do którego odległość obiektu od jednego z elementów zbioru uczącego SN jest najmniejsza.
W celu przeprowadzenia eksperymentu napisaliśmy program w środowisku Matlab. Na etapie 2.2 – wykrycie ruchu – samodzielnie napisaliśmy obliczanie średniej z sygnału i energii sygnału, a do wygładzenia sygnału metodą średniej ruchomej posłużyła nam dostępna w Matlabie funkcja smooth(). Na etapie ekstrakcji cech skorzystaliśmy z gotowej implementacji funkcji autoregresji dostępnej w Matlabie. Algorytm najbliższych sąsiadów zaprogramowaliśmy na bazie własnego kodu realizowanego prędzej w ramach kursu Rozpoznawanie obrazów.
Przykłady analizy sygnału EMG na różnych etapach działania programu przedstawiają zamieszczone prędzej rysunki 1-3. Dodatkowo poniżej zamieszczamy przykładowe macierze z etapu klasyfikacji metodą NN:
T_klasy =
2 1 1 4 1 1
1 5 1 2 3 1
3 3 2 4 2 2
1 5 2 2 2 2
1 2 2 2 2 2
Macierz T_klasy zawiera w kolumnach 1-5 numer klasy, do której został zaklasyfikowany sygnał dla kanałów 1-5. Kolumna 6 zawiera numer prawdziwej klasy, do której sygnał należy. Wiersze to kolejne obiekty testowe. Macierz została pomniejszona do pięciu pierwszych obiektów testowych.
Klasy_procent =
60 20 00 20 00
40 20 20 00 20
00 40 40 20 00
20 60 00 00 20
20 80 00 00 00
Macierz Klasy_procent pokazuje w ilu procentach klasyfikator przypisuje obiekt testowy do poszczególnych klas.
T_przydzial =
1 1 0
1 1 0
2 2 3
2 2 0
2 2 0
Dla pięciu klas (5 różnych ruchów), ciąg uczący zawierał 33 sygnały, a ciąg testujący 14, natomiast dla 4 klas ciąg uczący zawierał 23 sygnały, a testujący 10. Procent poprawnie sklasyfikowanych ruchów przedstawia tabela 1.
Rząd autoregresji | 4 klasy ruchu | 5 klas ruchu |
2 | 65 | 50 |
3 | 85 | 68 |
4 | 60 | 50 |
6 | 55 | 40 |
Gorszy wynik został uzyskany dla większej ilości klas ruchów. Stało się tak, ponieważ niektóre cechy klasy 5 były podobne do cech z poprzednich klas, co wpłynęło na błędną klasyfikację.
Najlepsze wyniki klasyfikacji uzyskaliśmy dla autoregresji rzędu 3. Mniejszy rząd uzyskał gorsze wyniki, ponieważ dostarczał zbyt mało informacji o sygnale. W przypadku rzędu wyższego od 3, mamy do czynienia z sytuacją, w której zmienna prognozowana określana jest na podstawie zbyt wielu okresów poprzednich. Prognoza zawiera w tym przypadku nieaktualne informacje o zmiennej, przez co jej oszacowanie pogarsza się, co skutkuje zwiększeniem błędu klasyfikacji.
Największą trudność w projekcie sprawiło nam rozpoznanie w sygnale EMG fragmentów, w których odbywał się ruch. Trudność spowodowana była zakłóceniami, jakimi obarczone są pomiary.
Najlepsze wyniki klasyfikacji uzyskaliśmy dla autoregresji rzędu 3. Dla tego przypadku wyniki przy czterech klasach ruchu są zadowalające (85% poprawności rozpoznawania ruchu). Natomiast błąd rzędu 30% dla 5 klas nie jest zbyt dobrym rezultatem. Przyczynę błędu należy upatrywać w użytym klasyfikatorze NN (jego prostocie). Dodatkowo klasyfikator najbliższych sąsiadów wykazuje silną zależność poprawności klasyfikacji od ilości elementów ciągu uczącego, których w naszym przypadku nie było zbyt wiele. Prawdopodobnie lepsze wyniki zwróciłyby w tym przypadku bardziej skomplikowane klasyfikatory, jak np. klasyfikatory oparte o sieci neuronowe. Wykorzystanie sprzętu o większej czułości pomiarowej i odporności na zakłócenia również polepszyłoby jakość klasyfikacji..