Laboratorium EEG/Konwerter plików Svarog–Matlab: Różnice pomiędzy wersjami
(Utworzono nową stronę "Laboratorium_EEG/Kowerter Laboratorium_EEG/Kowerter") |
|||
Linia 1: | Linia 1: | ||
− | [[Laboratorium_EEG]]/ | + | [[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 cala 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ć posiadane pliki danych, niestety nie mamy już gotowej funkcji dla plików zapisywanych przez Svaroga, a także dostępne funkcje do obróbki zbiorów typu XML nie nadają się do tego celu. | ||
− | [[Laboratorium_EEG]]/ | + | Jak łatwo się domyśleć, pierwszym krokiem musi być „wyciągnięcie” z pliku XML podstawowych informacji o zapisanych danych. Jest to plik tekstowy, który możemy otworzyć w edytorze tekstu (na przykład matlabowym), ale ta metoda nie jest szczególnie użyteczna. 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; | ||
+ | • liczba zapisanych próbek; | ||
+ | • nazwy kanałów; | ||
+ | • wzmocnienia {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 wielo wierszo wy. Na szczęście jest 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ę strżdouble. | ||
+ | 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 A próbek): | ||
+ | |||
+ | |||
+ | |||
+ | 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 typ wczytywanych danych jest double (lub inny, w zależności od informacji z pliku XML). Po udanym wczytaniu danych, w pamięci mamy zmienną zawierającą dane z pliku o postaci 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. | ||
+ | |||
+ | |||
+ | [[Laboratorium_EEG]]/Konwerter |
Wersja z 11:49, 29 lut 2016
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 cala 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ć posiadane pliki danych, niestety nie mamy już gotowej funkcji dla plików zapisywanych przez Svaroga, a także dostępne 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. Jest to plik tekstowy, który możemy otworzyć w edytorze tekstu (na przykład matlabowym), ale ta metoda nie jest szczególnie użyteczna. 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; • liczba zapisanych próbek; • nazwy kanałów; • wzmocnienia {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 wielo wierszo wy. Na szczęście jest 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ę strżdouble. 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 A próbek):
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 typ wczytywanych danych jest double (lub inny, w zależności od informacji z pliku XML). Po udanym wczytaniu danych, w pamięci mamy zmienną zawierającą dane z pliku o postaci 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.
Laboratorium_EEG/Konwerter