Konwerter plików Svarog

Transkrypt

Konwerter plików Svarog
Laboratorium_EEG/Konwerter
Konwerter plików Svarog-Matlab
Do zbierania danych podczas eksperymentów używamy na pracowniach programu Svarog. Zapisuje
on pliki z danymi w postaci binarnej, natomiast cała informacja o strukturze takiego pliku danych
(tzw. metadane) przechowywana jest w osobnym pliku typu XML. Aby móc analizować nasze pliki
danych w Matlabie musimy umieć wczytać i odpowiednio interpretować informacje w nich zawarte.
Niestety nie mamy gotowej funkcji dla wczytywania plików zapisywanych przez Svaroga, a także
dostępne domyślnie funkcje do obróbki zbiorów typu XML nie nadają się do tego celu.
Jak łatwo się domyśleć, pierwszym krokiem musi być „wyciągnięcie” z pliku XML podstawowych
informacji o zapisanych danych. Plik XML ma format tekstowy, możemy więc go otworzyć w edytorze
tekstu (na przykład matlabowym), ale ta metoda nie jest szczególnie użyteczna, jako bardzo
pracochłonna. Wczytajmy więc ten plik do Matlaba i postarajmy się automatycznie znaleźć wszystkie
potrzebne informacje. Będą to:
nazwa pliku z danymi;
liczba zapisanych kanałów;
częstość próbkowania danych;
format użyty do zapisu liczb;
liczba zapisanych próbek;
nazwy kanałów;
wzmocnienie (gain) i poziom (offset) w każdym kanale;
czas rozpoczęcia rejestracji.
Jak wczytać plik tekstowy do Maltaba? Wskazówką niech będzie przykład ze zliczaniem liter w
poprzednim rozdziale. Różnica jest tylko taka, że tam traktowaliśmy litery tekstu jako liczby, a teraz
potrzebujemy znaków tekstowych. Musimy zastosować inny typ wczytywanych danych: *char.
Jeśli udało nam się wczytać plik XML i mamy go w postaci wektora znaków w Matlabie, następnym
krokiem będzie wyszukanie w tym tekście potrzebnych nam informacji. Czego będziemy szukać w
naszym pliku XML? Jak łatwo zauważyć potrzebne nam informacje „opakowane” są specjalnymi
znacznikami. Na przykład nazwa „właściwego” pliku danych zawarta jest pomiędzy znacznikiem
<rs:exportFileName> a znacznikiem </rs:exportFileName>. Wystarczy więc znaleźć początek
i koniec każdego znacznika, a następnie „pobrać” informację spomiędzy tych pozycji.
Do przeszukiwania tekstów mamy dostępnych kilka różnych funkcji. Funkcje findstr i strfind
mają w naszym przypadku mniejsze zastosowanie, gdyż operują na tekstach jednowierszowych (bez
znaków nowego wiersza), a nasz tekst jest wielowierszowy. Na szczęście jest do dyspozycji funkcja
regexp, która poszukuje wyrażeń znakowych w wektorach znaków. Na dodatek zwraca indeksy
początków i końców każdego znalezionego fragmentu!
Wskazówki:
Transpozycję macierzy uzyskujemy dopisując apostrof ' na końcu transponowanego
wyrażenia.
Aby z tekstu (zawierającego cyfry) zrobić liczbę stosujemy funkcję str2double.
Jeśli już wszystko wiemy na temat naszych danych, możemy je odczytać. Dane są zapisane w
formacie binarnym, a jego struktura jest następująca (przy założeniu k kanałów i długości danych N
próbek):
x1(t1) x2(t1)
...
xk(t1) x1(t2) x2(t2)
...
xk(t2)
...
...
xk(tN)
Kolejne kratki oznaczają tu kolejne liczby w pliku. Format taki nazywamy przeplatanym lub
multipleksowanym.
Jeśli plik nie jest bardzo duży możemy go w całości wczytać do Matlaba. Operacja jest w zasadzie
analogiczna do wczytania pliku XML, z taką różnicą, że teraz format wczytywanych danych jest
double (lub inny, w zależności od informacji z pliku XML), czyli dane są binarne (nie da się ich
przeczytać w edytorze tekstu). Po udanym wczytaniu danych, w pamięci mamy zmienną zawierającą
dane z pliku o postaci jednowymiarowego wektora jak na przedstawionym powyżej rysunku. Należy
go przekształcić do postaci macierzy o właściwych rozmiarach komendą
reshape(dane,(liczba_kanalow, liczba_probek)) albo
dane.reshape((liczba_kanalow, liczba_probek)).
Ostatnim etapem przygotowywania danych będzie zastosowanie odpowiedniego montażu —
oczywiście jako procedury w Matlabie.
Plik zawierający przykłądowe dane do wczytania: Plik:Sygnal p300 kalib.tar.gz. proszę go pobrać i
wypakować do osobnego katalogu. Po wypakowaniu powinny się tam pojawić 3 pliki:
sygnał binarny: p_6301423_calibration_p300.obci.raw
opis xml: p_6301423_calibration_p300.obci.xml
plik ze znacznikami: p_6301423_calibration_p300.obci.tag - tym plikiem na dzisiejszych
zajęciach nie będziemy się zajmować
Proszę wczytać ten sygnał do SVAROGA żeby przekonać się jak te dane wyglądają, a następnie
napisać funkcję wczytującą te dane do Matlaba.
Laboratorium_EEG/Konwerter