<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Anna.chabuda</id>
	<title>Brain-wiki - Wkład użytkownika [pl]</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Anna.chabuda"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php/Specjalna:Wk%C5%82ad/Anna.chabuda"/>
	<updated>2026-04-23T10:29:33Z</updated>
	<subtitle>Wkład użytkownika</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Pracownia_Sygna%C5%82%C3%B3w_Biologicznych/Zajecia_7&amp;diff=7947</id>
		<title>Pracownia Sygnałów Biologicznych/Zajecia 7</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Pracownia_Sygna%C5%82%C3%B3w_Biologicznych/Zajecia_7&amp;diff=7947"/>
		<updated>2019-02-21T12:29:27Z</updated>

		<summary type="html">&lt;p&gt;Anna.chabuda: /* Ćwiczenie IV */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;Pomiar Elektrookulogramu&amp;lt;/b&amp;gt;&lt;br /&gt;
==Wstęp==&lt;br /&gt;
Kolejnym narządem, w którym znajdują się generatory czynności bioelektrycznej jest oko. W narządzie tym zachodzą skomplikowane procesy biochemiczne i elektryczne, umożliwiające widzenie. Procesy te zostaną omówione na oddzielnym wykładzie, w tym miejscu zaś wymienimy tylko te zjawiska, które mają wpływ na powstawanie w oku czynności elektrycznej.&lt;br /&gt;
# Jednym z najważniejszych części oka jest ''siatkówka'', której zadaniem jest odbieranie bodźców świetlnych oraz zamiana ich na sygnały elektryczne, przekazywane dalej do kory wzrokowej. W siatkówce płynie nieustannie prąd, którego natężenie zmienia się wraz z intensywnością padającego na nią światła. Związane z tym sygnały bioelektryczne można rejestrować za pomocą elektrod umieszczonych na powierzchni oka lub nawet za pomocą elektrod umieszczonych na powierzchni skóry wokół oka. Tak zarejestrowany sygnał elektryczny, powstały w oku w trakcie widzenia, nazywamy ''Elektroretinogramem'' (ERG). Sygnał ten ma amplitudę od kilku nanowoltów do kilku &amp;amp;mu;V i jest wykorzystywany w diagnostyce wielu chorób siatkówki. &lt;br /&gt;
# Rogówka (zewnętrzna warstwa oka znajdująca się w jego przedniej części) jest naładowana dodatnio względem siatkówki umiejscowionej po przeciwnej stronie oka. Rogówka wraz z siatkówką tworzą zatem w przybliżeniu układ dipola elektrycznego. W momencie ruchu okiem, dipol ten zmienia orientację w przestrzeni, zaburzając rozkład natężenia pola elektrycznego. Związany z tym sygnał o amplitudzie kilku miliwoltów można zmierzyć za pomocą elektrod umieszczonych na skórze wokół oka. Widoczny jest ona także na elektrodach umieszczonych na powierzchni głowy w trakcie pomiary czynności elektrycznej mózgu. Sygnał ten, czyli elektryczny zapis ruchu gałek ocznych, nazywamy Elektrookulogramem (EOG). Czynność elektryczną związaną z ruchem gałek ocznych obserwuje się również w trakcie mrugania, kiedy to gałki oczne skręcają nieco ku górze (tzw. zjawiska Bella), a także w trakcie badań diagnostycznych zaburzeń snu (w różnych etapach snu występują wolne lub szybkie ruchy gałek ocznych).&lt;br /&gt;
Sygnał EOG można też wykorzystać do konstrukcji interfejsów [[http://dl.acm.org/citation.cfm?id=1740647]].&lt;br /&gt;
# Ruch oka sterowany jest za pomocą mięśni. W trakcie rejestracji Elektrookulogramu widoczne będą również wyładowania elektryczne związane z działaniem mięśni.&lt;br /&gt;
===Ćwiczenie I ===&lt;br /&gt;
Wykonaj pomiar Elektrokulogramu za pomocą dwóch par elektrod połączonych w montażu dwubiegunowym. &lt;br /&gt;
&amp;lt;!--* Umieść jedną z elektrod nieco przyśrodkowo i nieznacznie powyżej szpary powiekowej, drugą zaś a po przeciwległej stronie, tj. nieco poniżej szpary powiekowej. --&amp;gt;&lt;br /&gt;
* Jedną parę elektrod umieść poniżej i powyżej oka, drugą w pobliżu lewej i prawej skroni.&lt;br /&gt;
* Skonfiguruj program do rejestracji i przeglądania mierzonego sygnału w czasie rzeczywistym.&lt;br /&gt;
* Wykonaj ruch oczami w górę i opisz zarejestrowany sygnał.&lt;br /&gt;
* Wykonaj ruch oczami w dół i opisz zarejestrowany sygnał.&lt;br /&gt;
* Wykonaj mrugnięcie i opisz zarejestrowany sygnał.&lt;br /&gt;
* Przeczytaj fragment tekstu, zaobserwuj efekty związane z ruchem sakadowym oka.&lt;br /&gt;
Zarejestruj sygnały w wyżej wymienionych sytuacjach. Wyświetl te sygnały w programie napisanym samodzielnie, bez stosowania filtra grórnoprzepustowego.&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie II ===&lt;br /&gt;
Powtórz ćwiczenie I, łącząc elektrody z monopolarnymi wejściami wzmacniacza, elektrodę odniesienia umieść na lewym płatku uszu lub wyrostku sutkowatym.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie III===&lt;br /&gt;
Napisz program wyświetlający na macierzy 5x5 następujące sekwencje:&lt;br /&gt;
* kwadrat środkowy - kwadrat górny - kwadrat środkowy&lt;br /&gt;
* kwadrat środkowy - kwadrat prawy - kwadrat środkowy&lt;br /&gt;
* kwadrat środkowy - kwadrat dolny - kwadrat środkowy&lt;br /&gt;
* kwadrat środkowy - kwadrat lewy - kwadrat środkowy&lt;br /&gt;
Zapisuj do pliku tekstowego czasy i kody poszczególnych sekwencji.&lt;br /&gt;
&lt;br /&gt;
Wyświetl te sygnały w programie napisanym samodzielnie, bez stosowania filtra grórnoprzepustowego.&lt;br /&gt;
&lt;br /&gt;
Zaprojektuj detektor, wykrywający, która sekwencja została wykonana.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie IV ===&lt;br /&gt;
Zrealizuj prosty system do rejestracji ruchu gałki ocznej, tzw. Eye tracker.  (http://laboratorium-eeg.braintech.pl/rozdz11.html)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w tym celu:&lt;br /&gt;
==== Napisz moduł:====&lt;br /&gt;
* Korzystając detektora sekwencji napisanego w ramach ćwiczenia III napisz moduł wykrywający sekwencje w czasie rzeczywistym.  Niech Twój moduł wypisuje wynik detekcji na konsolę.  '''Opis korzystania i pisania modułów do  systemu OBCI znajduje się''' [[http://bci.fuw.edu.pl/wiki/Tutorials tutaj]]. W dużym skrócie to co należy zrobić to:&lt;br /&gt;
 &lt;br /&gt;
* W  katalogu domowym utwórz podkatalog: &lt;br /&gt;
 ~/obci/scenarios&lt;br /&gt;
* w katalogu tym umieść plik:&lt;br /&gt;
 eog.ini&lt;br /&gt;
powinien on zawierać następującą treść:&lt;br /&gt;
&amp;lt;source lang = 'text'&amp;gt;&lt;br /&gt;
[peers]&lt;br /&gt;
scenario_dir=&lt;br /&gt;
;***********************************************&lt;br /&gt;
[peers.mx]&lt;br /&gt;
path=multiplexer-install/bin/mxcontrol&lt;br /&gt;
&lt;br /&gt;
;***********************************************&lt;br /&gt;
[peers.config_server]&lt;br /&gt;
path=control/peer/config_server.py&lt;br /&gt;
&lt;br /&gt;
;***********************************************&lt;br /&gt;
;***********************************************&lt;br /&gt;
[peers.amplifier]&lt;br /&gt;
path = drivers/eeg/cpp_amplifiers/amplifier_tmsi.py&lt;br /&gt;
;ponizsza sciezka pokazuje na plik zaierajacy nasze ustawienia parametrow wzmacniacza&lt;br /&gt;
config=~/obci/scenarios/eog_local_params.ini&lt;br /&gt;
&lt;br /&gt;
[peers.analysis]&lt;br /&gt;
path=~/obci/analysis/eog_realtime.py&lt;br /&gt;
config=~/obci/analysis/eog_realtime.ini&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* W powyższym pliku zadeklarowaliśmy, że lokalne parametry dla wzmacniacza znajduję się w pliku:&lt;br /&gt;
 ~/obci/scenarios/eog_local_params.ini&lt;br /&gt;
zatem musimy ten plik wytworzyć i wypełnić go np. taką treścią:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[local_params]&lt;br /&gt;
channel_names=gora;dol;lewa;prawa&lt;br /&gt;
active_channels=0;1;2;3&lt;br /&gt;
sampling_rate=256&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
* W pliku ze scenariuszem zadeklarowaliśmy też, że nasz moduł analizy danych znajduje się w pliku:&lt;br /&gt;
 ~/obci/analysis/eog_realtime.py&lt;br /&gt;
tak więc musimy ten plik stworzyć i tam właśnie wpisać algorytm detekcji. Dla zachowania konwencji w tym samym katalogu powinien znajdować się plik na ewentualne parametry dla modułu eog_realtime.py. Musi on się nazywać tak samo, tyle, że ma rozszerzenie .ini. Musimy więc wytworzyć pusty plik:  &lt;br /&gt;
 ~/obci/analysis/eog_realtime.ini&lt;br /&gt;
Ponieważ nasz algorytm musi on się komunikować z resztą systemu obci trzeba go opakować w poniższy kod-szkielet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = 'python'&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import random, time, numpy&lt;br /&gt;
 &lt;br /&gt;
from multiplexer.multiplexer_constants import peers, types&lt;br /&gt;
from obci.control.peer.configured_multiplexer_server import ConfiguredMultiplexerServer&lt;br /&gt;
from obci.configs import settings, variables_pb2&lt;br /&gt;
from collections import deque&lt;br /&gt;
 &lt;br /&gt;
import obci.utils.openbci_logging as logger&lt;br /&gt;
&lt;br /&gt;
#LOGGER = logger.get_logger(&amp;quot;sample_analysis&amp;quot;, &amp;quot;info&amp;quot;)&lt;br /&gt;
LOGGER = logger.get_logger(&amp;quot;sample_analysis&amp;quot;, &amp;quot;debug&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
class SampleAnalysis(ConfiguredMultiplexerServer):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;A class responsible for handling signal message and making proper decision.&lt;br /&gt;
    The class inherits from generic class for convinience - all technical stuff&lt;br /&gt;
    is being done in this super-class&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    def __init__(self, addresses):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Initialization - super() and ready() calls are required...&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        super(SampleAnalysis, self).__init__(addresses=addresses,&lt;br /&gt;
                                          type=peers.ANALYSIS)&lt;br /&gt;
        self.ready()&lt;br /&gt;
        LOGGER.info(&amp;quot;Sample analysis init finished!&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
    def handle_message(self, mxmsg):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;The only required function in the class&lt;br /&gt;
        that will be fired every time message is received&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        if mxmsg.type == types.AMPLIFIER_SIGNAL_MESSAGE:&lt;br /&gt;
            # Got proper message, let`s unpack it ...&lt;br /&gt;
 &lt;br /&gt;
            # Messages are transmitted in bunches so lets define SampleVector&lt;br /&gt;
            # in order to unpack bunch of Sample messages ...&lt;br /&gt;
	    l_vect = variables_pb2.SampleVector()&lt;br /&gt;
            l_vect.ParseFromString(mxmsg.message)&lt;br /&gt;
 &lt;br /&gt;
            # Now we have message unpacked, lets iterate over every sample ...&lt;br /&gt;
            for s in l_vect.samples:&lt;br /&gt;
 &lt;br /&gt;
                # Every sample has two fields:&lt;br /&gt;
                # timestamp - system clock time of a moment of Sample`s creation&lt;br /&gt;
                # channels - a list of values - one for every channel&lt;br /&gt;
                LOGGER.debug(&amp;quot;Got sample with timestamp: &amp;quot;+str(s.timestamp))&lt;br /&gt;
 &lt;br /&gt;
                # One can copy samples to numpy array ...&lt;br /&gt;
&lt;br /&gt;
                a = numpy.array(s.channels) # w tym miejscu mamy w tablicy a &amp;quot;paczke&amp;quot; próbek (domyślnie 4próbki ) ze wszystkich zadeklarowanych kanalow &lt;br /&gt;
#################### TU TRZEBA WPISAC SWOJ KOD BUFOROWANIA i ANALIZY  ##############&lt;br /&gt;
                print a #na dobry poczatek wypiszmy probki&lt;br /&gt;
&lt;br /&gt;
####################################################################&lt;br /&gt;
 &lt;br /&gt;
                # Or just iterate over values ...&lt;br /&gt;
                for ch in s.channels:&lt;br /&gt;
                    LOGGER.debug(ch)&lt;br /&gt;
 &lt;br /&gt;
            # Having a new bunch of values one can fire some magic analysis and &lt;br /&gt;
            # generate decision ....&lt;br /&gt;
 &lt;br /&gt;
            # Below we have quite simple decision-maker - it generates a random&lt;br /&gt;
            # decision every ~100 samples-bunch&lt;br /&gt;
########## TU NA PODSTAWIE ANALLIZY PODEJMUJEMY DECYZJE I MOZEMY JA PRZEKAZAC DO RESZTY SYSTEMU OBCI ######################&lt;br /&gt;
########## W TYM PRZYKLADZIE JEST TO LOSOWA DECYZJA ##############&lt;br /&gt;
########## W TYM CWICZENIU WYSTARCZY JESLI WYPISZECIE DECYZJE NA EKRAN ###########&lt;br /&gt;
            if random.random() &amp;gt; 0.99:&lt;br /&gt;
                # Here we send DECISION message somewhere-to-the-system ...&lt;br /&gt;
                # It's up to scenario's configuration how the decision will be used ...&lt;br /&gt;
                # Eg. it might be used by LOGIC module to push some button in speller.&lt;br /&gt;
                self.conn.send_message(message = str(random.randint(0,7)), &lt;br /&gt;
                                       type = types.DECISION_MESSAGE, &lt;br /&gt;
                                       flush=True)&lt;br /&gt;
        else:&lt;br /&gt;
            LOGGER.warning(&amp;quot;Got unrecognised message type: &amp;quot;+str(mxmsg.type))&lt;br /&gt;
 &lt;br /&gt;
        # Tell the system 'I`ll not respond to this message, I`m just receiving'&lt;br /&gt;
        self.no_response()&lt;br /&gt;
 &lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # Initialize and run an object in order to have your analysis up and running&lt;br /&gt;
    SampleAnalysis(settings.MULTIPLEXER_ADDRESSES).loop()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Aby uruchomić nasz scenariusz trzeba wywołać:&lt;br /&gt;
 obci launch ~/obci/scenarios/eog.ini&lt;br /&gt;
* Zatrzymanie scenariusza robimy tak:&lt;br /&gt;
 obci kill eog&lt;br /&gt;
W tym momencie komunikaty ze wszystkich modułów wypisywane są na jednej konsoli. Przydatne jest korzystanie z obiektu 'LOGGER' zamiast funkcji 'print' - w konsoli mamy informację o źródle komunikatu i jego czasie.&lt;br /&gt;
&lt;br /&gt;
OpenBCI działa tak, że jeśli w jednym module pojawi się błąd, to wszystkie inne moduły są zamykane, stąd komunikat podobny do poniższego sugeruje, że w którymś module wystąpił błąd. W takim wypadku należy przejrzeć konsolę i wyszukać komunikat błędu. Niezbędne jest ustawienie bufora konsoli na 'nieograniczony' wykonując: Edycja-&amp;gt;Preferencje profilu-&amp;gt;Przewijanie-&amp;gt;Nieograniczone .&lt;br /&gt;
&lt;br /&gt;
====Przetestuj moduł ====&lt;br /&gt;
* Umieść elektrody do rejestracji ruchu gałki ocznej jak w ćwiczeniu I i przetestuj działanie modułu. Miłej zabawy :-)&lt;/div&gt;</summary>
		<author><name>Anna.chabuda</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Nowe_technologie_w_fizyce_biomedycznej/Posturografia&amp;diff=7673</id>
		<title>Nowe technologie w fizyce biomedycznej/Posturografia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Nowe_technologie_w_fizyce_biomedycznej/Posturografia&amp;diff=7673"/>
		<updated>2018-03-29T12:38:28Z</updated>

		<summary type="html">&lt;p&gt;Anna.chabuda: /* Przygotowanie danych do analizy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Posturograf =&lt;br /&gt;
&lt;br /&gt;
Zajęcia warsztatowe składające się z wprowadzającego w tematykę zajęć wykładu i indywidualnych ćwiczeń wykonywanych przez studentów. Studenci w czasie zajęć przeprowadzają standardowe pomiary posturograficzne, a następnie analizują zebrane dane.&lt;br /&gt;
&lt;br /&gt;
==Plan zajęć==&lt;br /&gt;
&lt;br /&gt;
Zajęcia 1:&lt;br /&gt;
*Wstęp teoretyczny:&lt;br /&gt;
**Wii Balance Board (budowa, główne biblioteki obsługujące sensor, zastosowania)&lt;br /&gt;
**Projesjonalne systemy do rejestracji siły nacisku&lt;br /&gt;
**Równowaga a stabilność posturalna&lt;br /&gt;
**Podstawowe zadania posturograficzne&lt;br /&gt;
**Opis wybranych wskaźników do zadań posturograficznych&lt;br /&gt;
*Wprowadzenie do pomiarów przeprowadzanych na zajęciach (zapoznanie się z wybranymi scenariuszami oraz modułami do analizy)&lt;br /&gt;
*Zapoznanie się z działaniem Wii Balance Board&lt;br /&gt;
*Przeprowadzenie pomiarów&lt;br /&gt;
&lt;br /&gt;
[[Media: WiiBoard.pdf]] Informacje wstępne oraz opis zadań&lt;br /&gt;
&lt;br /&gt;
[[Media: WiiBoardENG.pdf]] Introduction and task description in English&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Media:wprowadzenie.pdf]] Wykład z zajęć wprowadzających&lt;br /&gt;
[[Media:Pomiary_wii.pdf]] Wstęp do pomiarów posturograficznych&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zajęcia 2,3,4:&lt;br /&gt;
*Analiza zebranych danych&lt;br /&gt;
*Prezentacja wyników&lt;br /&gt;
&lt;br /&gt;
==Pomiary==&lt;br /&gt;
Pomiary przeprowadzane są w środowisku OpenBCI przy użyciu aplikacji Brain4edu (na Ubuntu 16.04). Opis architektury systemu OpenBCI oraz podręcznik użytkownika Brain4edu dostępne są na stronie http://laboratorium-eeg.braintech.pl/. Z samego OpenBCI można również korzystać na systemie Windows -&amp;gt; instrukcja [[Media: obci_Windows.pdf]]. &lt;br /&gt;
&lt;br /&gt;
Zaczynamy od uruchomienia aplikacji Brain. W prawym górnym rogu ekranu pojawi się ikona mózgu będąca interfejsem graficznym aplikacji. Do pomiarów posturograficznych wybieramy opcję 'Wii App', która otworzy okno z wyborem scenariuszy.&lt;br /&gt;
&lt;br /&gt;
[[Plik:brain4edu.png|300px|thumb|left|&amp;lt;figure id=&amp;quot;fig:wbb&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Interfejs graficzny aplikacji Brain4edu]]&lt;br /&gt;
[[Plik:wiiApp.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:wbb&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Okno wyboru scenariuszy eksperymentalnych aplikacji WiiApp]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Pomiary przeprowadzane są w środowisku OpenBCI. Architektura systemu oraz opis wybranych scenariuszy jest dostępny na stronie http://bci.fuw.edu.pl/wiki/Tutorials.  Szczegółowe informacje dotyczące konfiguracji OpenBCI na Ubuntu 14.04 LTS można znaleźć pod adresem http://deb.braintech.pl/. Po zainstalowaniu pakietów źródła znajdą sie w katalogu &amp;lt;tt&amp;gt;/usr/share/openbci&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Z OpenBCI można również korzystać na systemie Windows -&amp;gt; instrukcja [[Media: obci_Windows.pdf]]&lt;br /&gt;
&lt;br /&gt;
Rejestracja danych odbywa się w środowisku OpenBCI. System ten uruchamiamy wykonując w terminalu polecenie: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;$ obci_gui --presets new_tech &amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podczas zajęć przeprowadzone zostaną następujące pomiary:&lt;br /&gt;
*stanie swobodne z oczami otwartymi/zamkniętymi,&lt;br /&gt;
*wychylenia szybkie i &amp;quot;z przytrzymaniem&amp;quot; bez informacji zwrotnej dla badanego (w przód, w tył, w prawo, w lewo),&lt;br /&gt;
*wychylenia szybkie i &amp;quot;z przytrzymaniem&amp;quot; z informacją zwrotną dla badanego (w przód, w tył, w prawo, w lewo).&lt;br /&gt;
&lt;br /&gt;
W wyniku każdego pomiaru otrzymujemy komplet trzech plików (domyślna lokalizacja to Katalog Domowy): &lt;br /&gt;
* Plik z sygnałem (.raw) zapisanym w formacie binarnym. W pliku znajdują się próbki z pięciu kanałów – wartości z czterech czujników WBB oraz momenty w czasie (w sekundach) mierzone względem pojawienia się pierwszej próbki.&lt;br /&gt;
* Plik z metadanymi (.xml), w którym znajdują się szczegółowe informacje dotyczące rejestracji (nazwy kanałów, częstość próbkowania, całkowita liczba próbek itp.).&lt;br /&gt;
* Plik ze znacznikami (.tag), w którym zapisywane są momenty kolejnych zdarzeń (np. początek i koniec wykonywania zadania) zsynchronizowane z sygnałem. Każdy znacznik posiada charakterystyczną nazwę, moment wystąpienia w sygnale, długość oraz ewentualnie opis. &lt;br /&gt;
&amp;lt;!--W przypadku zadań z informacją zwrotną dla badanego generowane są dwa pliki ze znacznikami. Interesujące nas informacje znajdują się w pliku z rozszerzeniem .game.tag.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Analiza danych==&lt;br /&gt;
&lt;br /&gt;
===Przygotowanie danych do analizy===&lt;br /&gt;
Pierwszym etapem analizy jest wczytanie danych. Korzystamy tutaj z funkcji klasy ReadManager. Otrzymany obiekt posiadaja metodę 'get_samples', która zwraca macierz 5-kanałową. Pierwszy kanał to próbki czasu wyrażone w [s] natomiast pozostałe kanały to dane z kolejnych sensorów TR, BR, TL, BL (górny prawy-TR, dolny prawy-BR, górny lewy-TL, dolny lewy-BL).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.signal_processing import read_manager&lt;br /&gt;
from obci.signal_processing.balance.wii_preprocessing import *&lt;br /&gt;
from obci.signal_processing.balance.wii_analysis import *&lt;br /&gt;
&lt;br /&gt;
file_name = 'still_eyes_closed_eyes_open'&lt;br /&gt;
wbr = read_manager.ReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.obci.tag')&lt;br /&gt;
TIME = wbr.get_samples()[0,:]&lt;br /&gt;
TR = wbr.get_samples()[1,:]&lt;br /&gt;
BR = wbr.get_samples()[2,:]&lt;br /&gt;
TL = wbr.get_samples()[3,:]&lt;br /&gt;
BL = wbr.get_samples()[4,:]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jednak w przypadku niektórych zadań należy jeszcze przed pobraniem próbek, odpowiednio wyciąć interesujące nas dane względem znaczników. Czynność tę wykonuje funkcja 'wii_cut_fragments' przyjmująca obiekt klasy ReadManager i znaczniki początkowe i końcowe, a zwracająca listę obiektów 'smart_tags'. Liczba tych obiektów odpowiada liczbie zdarzeń z danym znacznikiem (dla stania swobodnego lista będzie miała tylko jeden element, natomiast dla wielokrotnych wychyleń będzie ich kilka). Każdy element na tej liście, również posiada metodę 'get_samples'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.signal_processing import read_manager&lt;br /&gt;
from obci.signal_processing.balance.wii_preprocessing import *&lt;br /&gt;
from obci.signal_processing.balance.wii_analysis import *&lt;br /&gt;
&lt;br /&gt;
file_name = 'still_eyes_closed_eyes_open'&lt;br /&gt;
wbr = read_manager.ReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.obci.tag')&lt;br /&gt;
smart_tags = wii_cut_fragments(wbr, start_tag_name='ss_start', end_tags_names=['ss_stop'])&lt;br /&gt;
TR = smart_tags[0].get_samples()[1,:]&lt;br /&gt;
BR = smart_tags[0].get_samples()[2,:]&lt;br /&gt;
TL = smart_tags[0].get_samples()[3,:]&lt;br /&gt;
BL = smart_tags[0].get_samples()[4,:]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na podstawie danch z czterech czujników można wyznaczyć wartości wychyleń w kierunkach x i y  (&amp;lt;xr id=&amp;quot;fig:wbb&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;).:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;x=\frac{(TR+BR)-(TL+BL)}{TR+TL+BL+BR}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y=\frac{(TR+TL)-(BR+BL)}{TR+TL+BL+BR}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Należy pamiętać, że dane z czujników pochodzą z układu odniesienia deski Wii Board - zatem uzyskane wartości x i y mieszczą się w zakresie od -1 do 1. Aby uzyskać dane w cm trzeba przemnożyć współrzędne x i y przez odpowiednie czynniki:&lt;br /&gt;
[[Plik:wbb_axes.png|600px|thumb|center|&amp;lt;figure id=&amp;quot;fig:wbb&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Wii Balance Board z oznaczonymi płaszczyznami ML i AP. TR, TL, BR, BL ozanczają pozycje czterech czujników.]]&lt;br /&gt;
&lt;br /&gt;
Znaczniki 'start_tag_name' oraz 'end_tags_names' dla poszczególnych pomiarów:&lt;br /&gt;
&lt;br /&gt;
* stanie swobodne oczy otwarte: 'ss_start', 'ss_stop'&lt;br /&gt;
* stanie swobodne oczy zamknięte: 'ss_eyes_closed_start', 'ss_eyes_closed_stop'&lt;br /&gt;
&lt;br /&gt;
* wychylenia szybkie bez informacji zwrotnej: 'start_fast', 'stop_fast'&lt;br /&gt;
* wychylenia &amp;quot;z przytrzymaniem&amp;quot; bez informacji zwrotnej: 'start', 'stop'&lt;br /&gt;
&lt;br /&gt;
* stanie swobodne jako kalibracja do zadań z informacją zwrotną: 'baseline_start', 'baseline_stop'&lt;br /&gt;
* wychylenia szybkie z informacją zwrotną: nie ma znaczników - ciągły zapis danych&lt;br /&gt;
* wychylenia &amp;quot;z przytrzymaniem&amp;quot; z informacją zwrotną: 'start_1', 'finish'&lt;br /&gt;
&lt;br /&gt;
Dla przypadku wychyleń &amp;quot;z przytrzymaniem&amp;quot; obiekty w liście zwróconej przez funkcję 'wii_cut_fragments' odpowiadają kolejnym realizacjom zadania. Mają one jednak nieco inną strukturę. Oprócz metody 'get_samples()', za pomocą której tak jak poprzednio wczytamy dane z 4 czujników, posiadają również metody:&lt;br /&gt;
*'get_end_tag()' - zwraca strukturę, która w polu ['desc']['value'] przechowuje informację o tym czy zadanie zostało wykonane poprawnie (0-niepoprawnie, 1-poprawnie)&lt;br /&gt;
*'get_start_tag()' - zwraca strukturę, która w polu ['desc']['value'] przechowuje informację o kierunku wychylenia (pole 'direction', wartości: 'up','down','left','right') oraz o poziomie trudności zadania (pole 'level'). Aby wydobyć informację o kierunku wychylenia (analogicznie dla poziomiu trudności) można skorzystać z funkcji: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
eval(smart_tags[index].get_start_tag()['desc']['value'])['direction']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Informacje o poziomie trudności, poprawności wykonania zadania oraz kierunku będą potrzebne do podjęcia decyzji, które próby wykonania zadania będą brane do dalszej analizy. Interesują nas jedynie te poprawne o najwyższym poziomie trudności w każdym z kierunków. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Pierwszym etapem analizy jest wstępne przetworzenie danych. W tym celu należy wyestymować rzeczywistą częstość próbkowania Fs (w idealnym przypadku wynosi ona 65 Hz) oraz przepróbkować sygnał do częstości fs ok. 30 Hz (wychylenia swobodne widoczne są głównie w niższych częstościach).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
from obci.analysis.balance.wii_read_manager import WBBReadManager&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_baseline&lt;br /&gt;
from obci.analysis.balance.wii_preprocessing import *&lt;br /&gt;
from obci.analysis.balance.wii_analysis import *&lt;br /&gt;
&lt;br /&gt;
def read_file(file_path, file_name, tag_format = 'obci'):&lt;br /&gt;
    file_name = file_path+file_name&lt;br /&gt;
    wbb_mgr = WBBReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.' + tag_format + '.tag')&lt;br /&gt;
    return wbb_mgr&lt;br /&gt;
&lt;br /&gt;
FILE_PATH = '/home/newtech/'&lt;br /&gt;
FILE_NAME = 'wii_baseline_2015-03-04_15-02-01' #przykładowa nazwa pliku&lt;br /&gt;
&lt;br /&gt;
#wczytanie danych&lt;br /&gt;
wbr_baseline = read_file(FILE_PATH, FILE_NAME)&lt;br /&gt;
#estymacja częstości próbkowania Fs                                  &lt;br /&gt;
Fs = analysis_baseline.estimate_fs(wbr_baseline.mgr.get_channel_samples('TSS')) &lt;br /&gt;
#wpisanie częstości Fs do obiektu&lt;br /&gt;
wbr_baseline.mgr.set_param('sampling_frequency', Fs)   &lt;br /&gt;
#przepróbkowanie z czynnikiem 2                         &lt;br /&gt;
wbr_baseline = wii_downsample_signal(wbr_baseline, factor=2, pre_filter=True, use_filtfilt=True) &lt;br /&gt;
#odczytanie nowej częstości próbkowania fs&lt;br /&gt;
fs = float(wbr_baseline.mgr.get_param('sampling_frequency'))                           &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Po takich operacjach dane przechowywane w obiekcie 'wbr_baseline' klasy WBBReadManager są gotowe do użycia. Klasa ta posiada metodę 'get_raw_signal', która zwraca 4-kanałową macierz z danymi z 4 czujników (są to kanały odpowiadające kolejno czujnikom: górny lewy-TL, górny prawy-TR, dolny prawy-BR, dolny lewy-BL). Można wyznaczyć wartości wychyleń w kierunkach x i y na podstawie informacji z czterech czujników (&amp;lt;xr id=&amp;quot;fig:wbb&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;).:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;x=\frac{(TR+BR)-(TL+BL)}{TR+TL+BL+BR}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y=\frac{(TR+TL)-(BR+BL)}{TR+TL+BL+BR}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Należy pamiętać, że dane z czujników pochodzą z układu odniesienia deski Wii Board - zatem uzyskane wartości x i y mieszczą się w zakresie od -1 do 1. Aby uzyskać dane w cm trzeba przemnożyć współrzędne x i y przez odpowiednie czynniki:&lt;br /&gt;
[[Plik:wbb_axes.png|600px|thumb|center|&amp;lt;figure id=&amp;quot;fig:wbb&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Wii Balance Board z oznaczonymi płaszczyznami ML i AP. TR, TL, BR, BL ozanczają pozycje czterech czujników.]]&lt;br /&gt;
&lt;br /&gt;
Jednak w przypadku niektórych zadań należy jeszcze, przed wyznaczaniem x i y, odpowiednio wyciąć interesujące nas dane względem znaczników. Czynność tę wykonuje funkcja 'wii_cut_fragments', która zwraca listę obiektów 'smart_tags'. Liczba tych obiektów odpowiada liczbie zdarzeń z danym znacznikiem (dla stania swobodnego lista będzie miała tylko jeden element, natomiast dla wielokrotnych wychyleń będzie ich kilka). Każdy element na tej liście, posiada metodę 'get_samples' zwracającą dane w macierzy 7 kanałowej. W pierwszych 4 kanałach znajdują się dane z czujników TL,TR,BR,BL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
smart_tags = wii_cut_fragments(wbr_baseline, start_tag_name='ss_start', end_tags_names=['ss_stop'])&lt;br /&gt;
TL = smart_tags[0].get_samples()[0,:]&lt;br /&gt;
TR = smart_tags[0].get_samples()[1,:]&lt;br /&gt;
BR = smart_tags[0].get_samples()[2,:]&lt;br /&gt;
BL = smart_tags[0].get_samples()[3,:]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Znaczniki 'start_tag_name' oraz 'end_tags_names' dla poszczególnych pomiarów:&lt;br /&gt;
&lt;br /&gt;
* stanie swobodne oczy otwarte: 'ss_start', 'ss_stop'&lt;br /&gt;
* stanie swobodne oczy zamknięte: 'ss_oczy_start', 'ss_oczy_stop'&lt;br /&gt;
&lt;br /&gt;
* wychylenia szybkie bez informacji zwrotnej: 'szybkie_start', 'szybkie_stop'&lt;br /&gt;
* wychylenia &amp;quot;z przytrzymaniem&amp;quot; bez informacji zwrotnej: 'start', 'stop'&lt;br /&gt;
&lt;br /&gt;
* stanie swobodne jako kalibracja do zadań z informacją zwrotną: 'ss_start', 'ss_stop'&lt;br /&gt;
* wychylenia szybkie z informacją zwrotną: nie ma znaczników - ciągły zapis danych&lt;br /&gt;
* wychylenia &amp;quot;z przytrzymaniem&amp;quot; z informacją zwrotną: 'start_1', 'finish'&lt;br /&gt;
&lt;br /&gt;
Podczas wczytywania danych z informacją zwrotną interesujące nas informacje znajdują się w pliku z rozszerzeniem .game.tag. Zatem należy ustawić parametr 'tag_format' w wywołaniu funkcji read_file na 'game' (zamiast domyślnie ustawionego 'obci'). Znaczniki czasowe gry nie są zsynchronizowane z sygnałem, ponieważ gra uruchamiana jest w osobnym wątku, który nie ma możliwości komunikacji z multiplekserem. Z tego względu każdy znacznik zapisany w tym pliku posiada czas systemowy, który należy wyrównać względem pierwszej próbki w sygnale. Procedura ta została zaimplementowana w poniższej funkcji, którą należy wykonać przed przepróbkowaniem sygnału:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_helper&lt;br /&gt;
wbr_sway.mgr = analysis_helper.set_first_timestamp(wbr_sway.mgr)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dalsze kroki przygotowania danych do analizy wykonujemy tak samo. Dla przypadku wychyleń &amp;quot;z przytrzymaniem&amp;quot; obiekty w liście zwróconej przez funkcję 'wii_cut_fragments' odpowiadają kolejnym realizacjom zadania. Mają one jednak nieco inną strukturę. Oprócz metody 'get_samples()', za pomocą której tak jak poprzednio wczytamy dane z 4 czujników, posiadają również metody:&lt;br /&gt;
*'get_end_tag()' - zwraca strukturę, która w polu ['desc']['type'] przechowuje informację o tym czy zadanie zostało wykonane poprawnie (0-niepoprawnie, 1-poprawnie)&lt;br /&gt;
*'get_start_tag()' - zwraca strukturę, która w polu ['desc']['type'] przechowuje informację o kierunku wychylenia (pole 'direction', wartości: 'up','down','left','right') oraz o poziomie trudności zadania (pole 'level'). Aby wydobyć informację o kierunku wychylenia (analogicznie dla poziomiu trudności) można skorzystać z funkcji: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
eval(smart_tags[index].get_start_tag()['desc']['type'])['direction']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Informacje o poziomie trudności, poprawności wykonania zadania oraz kierunku będą potrzebne do podjęcia decyzji, które próby wykonania zadania będą brane do dalszej analizy. Interesują nas jedynie te poprawne o najwyższym poziomie trudności w każdym z kierunków. &lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--Dokumentacja funkcji klasy WBBReadManager (przy pomcy której wczytujemy dane. Korzysta ona z obiektu klasy ReadManager, która została zaprojektowana do wczytywania i segmentacji danych rejestrowanych przy pomocy systemu OpenBCI. Moduł &amp;lt;tt&amp;gt;obci.analysis.balance.wii_preprocessing&amp;lt;/tt&amp;gt; umożliwia dodatkowo przepróbkowanie oraz filtrację danych): &lt;br /&gt;
&lt;br /&gt;
*Przepróbkowanie danych&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr       - obiekt klasy WBBReadManager&lt;br /&gt;
# factor        - nowa_fs = fs / factor (int)&lt;br /&gt;
# pre_filter    - True/False w zależności czy ma być użyty filtr dolnoprzepustowy z częstością&lt;br /&gt;
#                 odcięcia: częstość próbkowania / 2&lt;br /&gt;
# use_filtfilt  - True/False w zależności czy ma być użyta procedura &lt;br /&gt;
#                 filtrowania filtfilt/lfilter (bool)&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca obiekt klasy WBBReadManager z przepróbkowanym sygnałem.&lt;br /&gt;
&lt;br /&gt;
factor = 2&lt;br /&gt;
pre_filter = False&lt;br /&gt;
use_filtfilt = True&lt;br /&gt;
&lt;br /&gt;
wbb_mgr = wii_downsample_signal(wbb_mgr, &lt;br /&gt;
                                factor, &lt;br /&gt;
                                pre_factor, &lt;br /&gt;
                                use_filtfilt)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Segmentacja danych&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr         - obiekt klasy WBBReadManager,&lt;br /&gt;
# start_tag_name  - nazwa znacznika określającego początek fragmentu,&lt;br /&gt;
# end_tags_names  - lista z nazwami znaczników określających koniec fragmentu.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca obiekt klasy SmartTagsManager.&lt;br /&gt;
&lt;br /&gt;
smart_tags = wii_cut_fragments(wbb_mgr,&lt;br /&gt;
                               start_tag_name='start', &lt;br /&gt;
                               end_tags_names=['stop'])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Filtracja danych&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr       - obiekt klasy  WBBReadManager&lt;br /&gt;
# cutoff_upper  - częstość odcięcia (float)&lt;br /&gt;
# order         - rząd filtru (int)&lt;br /&gt;
# use_filtfilt  - True/False w zależności, czy ma być użyta procedura &lt;br /&gt;
#                 filtrowania filtfilt/lfilter (bool)&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca obiekt klasy WBBReadManager z przefiltrowanym sygnałem.&lt;br /&gt;
&lt;br /&gt;
cutoff_upper = 20&lt;br /&gt;
order = 2&lt;br /&gt;
use_filtfilt = False&lt;br /&gt;
wbb_mgr = wii_filter_signal(wbb_mgr, &lt;br /&gt;
                            cutoff_upper, &lt;br /&gt;
                            order, &lt;br /&gt;
                            use_filtfilt)&lt;br /&gt;
&amp;lt;/source&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Analiza danych: stanie swobodne===&lt;br /&gt;
&lt;br /&gt;
W przypadku stania swobodnego z oczami zamkniętymi oraz otwartymi, studenci mają za zadanie wyznaczyć następujące wskaźniki posturograficzne:&lt;br /&gt;
&amp;lt;!-- (korzystając z funkcji zaimplentowanych w bibliotece &amp;lt;tt&amp;gt;obci.analysis.balance.wii_analysis&amp;lt;/tt&amp;gt;): --&amp;gt;&lt;br /&gt;
*położenie środka równowagi COP (''center of pressure'')&lt;br /&gt;
*maksymalne przemieszczenie względem położenia środka równowagi (w AP,ML oraz płaszczyźnie AP/ML),&lt;br /&gt;
*długość drogi względem położenia środka równowagi (w AP,ML oraz płaszczyźnie AP/ML),&lt;br /&gt;
*średnia prędkość przemieszczenia (w AP,ML oraz płaszczyźnie AP/ML),&lt;br /&gt;
*wskaźnik Romberga - stosunek różnicy długości drogi przy oczach zamkniętych i otwartych, do sumy długości drogi przy oczach zamkniętych i otwartych&lt;br /&gt;
&amp;lt;!--*95% powierzchnia ufności elipsy - powierzchnia elipsy, w której powinno zawierać się około 95% punktów drogi COP,&lt;br /&gt;
*RMS (''root mean square'') (w AP i ML).---&amp;gt;&lt;br /&gt;
Dokładny opis matematyczny wyżej wymienionych wskaźników znajduje się w pracy (Prieto, 1996). &lt;br /&gt;
&lt;br /&gt;
Należy również przedstawić na wykresie przebieg ruchu COP oddzielnie w płaszczyźnie AP, ML oraz w przestrzeni AP/ML.&lt;br /&gt;
&lt;br /&gt;
Dodatkowo studenci mają za zadanie przeprowadzić analizę rozkładu przestrzennego punktów statokinezjogramu. Statokinezjogramem lub posturogramem nazywamy wędrówkę COP w dwuwymiarowej płaszczyźnie podparcia. Kierunki na tej płaszczyźnie określa się jako AP (y) lub ML (x), przy czym ML oznacza wychylenia w płaszczyźnie czołowej (''medio-lateral''), a AP w płaszczyźnie strzałkowej (''anterio-posterior''). W celu przeprowadzenie takiej analizy, cały zakres zostaje podzielony na jednakowe komórki. Następnie obliczony zostaje histogram przestrzenny czasu przebywania w każdej z nich. Taki histogram pozwala ocenić, czy kontrola położenia referencyjnego COG (''center of gravity''), a tym samym pionowa orientacja ciała, jest prawidłowa. Wyznacznikiem prawidłowej kontroli jest histogram o skupionym rozkładzie i z wyraźnym maksimum. Upośledzenie kontroli objawia się tym, że histogram przestrzenny staje się rozmyty lub wyraźnie niesymetryczny (Błaszczyk, 2004).&lt;br /&gt;
&lt;br /&gt;
===Analiza danych: wychylenia dynamiczne===&lt;br /&gt;
&lt;br /&gt;
Oprócz wskaźników statycznych stabilności do oceny kontroli posturalnej wykorzystuje się również miary dynamiczne. Z punktu widzenia miar bezpośrednich, istotna jest ocena kontroli środka ciężkości ciała w czasie jego świadomego przemieszczania w wyznaczonym kierunku. W ramach pomiarów, studenci mieli za zadanie wykonać dwa rodzaje wychyleń (szybkie i &amp;quot;z przytrzymaniem&amp;quot;) w dwóch warunkach: bez informacji zwrotnej dla badanego oraz z informacją zwrotną dla badanego. Dla każdego z przypadków należy wyznaczyć następujące parametry:&lt;br /&gt;
&lt;br /&gt;
*położenie środka równowagi (dla warunku bez informacji zwrotnej będzie to COP ze stania swobodnego z oczami otwartymi, natomiast dla warunku z informacją zwrotną będzie to COP z sesji kalibracyjnej)&lt;br /&gt;
*wartość maksymalnego wychylenia (w określonym kierunku) względem położenia równowagi,&lt;br /&gt;
*wykresy składowych wychwiań względem położenia równowagi w płaszczyźnie AP, ML w zależności od czasu oraz wypadkowa trajektoria przemieszczeń COP (w dwuwymiarowej płaszczyźnie AP, ML).&lt;br /&gt;
&lt;br /&gt;
i zbadać czy informacja zwrotna wpływa na rezultaty badanego.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
*Błaszczyk J., Biomechanika kliniczna, PZWL, 2004&lt;br /&gt;
*Prieto T.E. et al., Measures of postural steadiness: differences between healthy young and elderly adults, IEEE Trans Biomed Eng, 1996, 43(9):956-66&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Przykładowe skrypty do analizy:&lt;br /&gt;
&lt;br /&gt;
*zadanie &amp;quot;stanie swobodne&amp;quot;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.analysis.balance.wii_read_manager import WBBReadManager&lt;br /&gt;
from obci.analysis.balance.wii_preprocessing import *&lt;br /&gt;
from obci.analysis.balance.wii_analysis import *&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as py&lt;br /&gt;
&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_baseline&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_helper&lt;br /&gt;
&lt;br /&gt;
from obci.acquisition import acquisition_helper&lt;br /&gt;
&lt;br /&gt;
FILE_PATH = '~/' #full path&lt;br /&gt;
FILE_NAME = 'wii_baseline_2015-03-03_20-51-48' #file name without extension&lt;br /&gt;
&lt;br /&gt;
def read_file(file_path, file_name, tag_format = 'obci'):&lt;br /&gt;
    file_name = acquisition_helper.get_file_path(file_path, file_name)&lt;br /&gt;
    wbb_mgr = WBBReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.' + tag_format + '.tag')&lt;br /&gt;
    return wbb_mgr&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    #load data&lt;br /&gt;
    wbb_mgr = read_file(FILE_PATH, FILE_NAME)&lt;br /&gt;
&lt;br /&gt;
    #add two additional (x, y) channels (computed from sensor values)&lt;br /&gt;
    wbb_mgr.get_x()&lt;br /&gt;
    wbb_mgr.get_y()&lt;br /&gt;
&lt;br /&gt;
    #estimate true sampling frequency value&lt;br /&gt;
    fs = analysis_baseline.estimate_fs(wbb_mgr.mgr.get_channel_samples('TSS'))&lt;br /&gt;
    wbb_mgr.mgr.set_param('sampling_frequency', analysis_baseline.estimate_fs(wbb_mgr.mgr.get_channel_samples('TSS')))&lt;br /&gt;
&lt;br /&gt;
    #preprocessing&lt;br /&gt;
    wbb_mgr = wii_downsample_signal(wbb_mgr, factor=2, pre_filter=True, use_filtfilt=True)&lt;br /&gt;
&lt;br /&gt;
    #extract fragments from standing task with eyes open&lt;br /&gt;
    smart_tags = wii_cut_fragments(wbb_mgr, start_tag_name='ss_start', end_tags_names=['ss_stop'])&lt;br /&gt;
    sm_x = smart_tags[0].get_channel_samples('x')&lt;br /&gt;
    sm_y = smart_tags[0].get_channel_samples('y')&lt;br /&gt;
    py.figure()&lt;br /&gt;
    print(wii_COP_path(wbb_mgr, sm_x, sm_y, plot=True))&lt;br /&gt;
    py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*zadanie &amp;quot;wychylenia bez informacji zwrotnej&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.analysis.balance.wii_read_manager import WBBReadManager&lt;br /&gt;
from obci.analysis.balance.wii_preprocessing import *&lt;br /&gt;
&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_baseline&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_helper&lt;br /&gt;
&lt;br /&gt;
from obci.acquisition import acquisition_helper&lt;br /&gt;
&lt;br /&gt;
FILE_PATH_LEFT = '' #full path&lt;br /&gt;
FILE_NAME_LEFT = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
FILE_PATH_RIGHT = '' #full path&lt;br /&gt;
FILE_NAME_RIGHT = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
FILE_PATH_DOWN = '' #full path&lt;br /&gt;
FILE_NAME_DOWN = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
FILE_PATH_UP = '' #full path&lt;br /&gt;
FILE_NAME_UP = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
def read_file(file_path, file_name, tag_format = 'obci'):&lt;br /&gt;
    file_name = acquisition_helper.get_file_path(file_path, file_name)&lt;br /&gt;
    wbb_mgr = WBBReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.' + tag_format + '.tag')&lt;br /&gt;
    return wbb_mgr&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    #load data from right sway task&lt;br /&gt;
    wbb_mgr_right = read_file(FILE_PATH_RIGHT, FILE_NAME_RIGHT)&lt;br /&gt;
&lt;br /&gt;
    #here should be preprocessing... &lt;br /&gt;
&lt;br /&gt;
    #extract fragments from sway task (right)&lt;br /&gt;
    smart_tags_quick = wii_cut_fragments(wbb_mgr_right, start_tag_name='szybkie_start', end_tags_names=['szybkie_stop'])&lt;br /&gt;
    x_fragments_quick = [i.get_channel_samples('x') for i in smart_tags_quick]&lt;br /&gt;
    y_fragments_quick = [i.get_channel_samples('y') for i in smart_tags_quick]&lt;br /&gt;
&lt;br /&gt;
    #extract fragments from sway&amp;amp;stay task (right)&lt;br /&gt;
    smart_tags_long = wii_cut_fragments(wbb_mgr_right, start_tag_name='start', end_tags_names=['stop'])&lt;br /&gt;
    x_fragments_long = [i.get_channel_samples('x') for i in smart_tags_long]&lt;br /&gt;
    y_fragments_long = [i.get_channel_samples('y') for i in smart_tags_long]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*zadanie &amp;quot;wychylenia z informacją zwrotną&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.analysis.balance.wii_read_manager import WBBReadManager&lt;br /&gt;
from obci.analysis.balance.wii_preprocessing import *&lt;br /&gt;
&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_baseline&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_helper&lt;br /&gt;
&lt;br /&gt;
from obci.acquisition import acquisition_helper&lt;br /&gt;
&lt;br /&gt;
BASELINE_FILE_PATH = '' #full path&lt;br /&gt;
BASELINE_FILE_NAME = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
FILE_PATH = '' #full path&lt;br /&gt;
FILE_NAME = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
def get_baseline_points(file_path, file_name):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot; baseline area is a rectangle with parameters:&lt;br /&gt;
        center point: xc, yc,&lt;br /&gt;
        width:        2*xa,&lt;br /&gt;
        height:       2*yb.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    xa, ya, xb, yb, xc, yc  = analysis_baseline.calculate(file_path, file_name, show=False)&lt;br /&gt;
    return xa, ya, xb, yb, xc, yc&lt;br /&gt;
&lt;br /&gt;
def read_file(file_path, file_name, tag_format = 'game'):&lt;br /&gt;
    file_name = acquisition_helper.get_file_path(file_path, file_name)&lt;br /&gt;
    wbb_mgr = WBBReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.' + tag_format + '.tag')&lt;br /&gt;
    return wbb_mgr&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    xa, ya, xb, yb, xc, yc = get_baseline_points(BASELINE_FILE_PATH, BASELINE_FILE_NAME)&lt;br /&gt;
    wbb_mgr = read_file(FILE_PATH, FILE_NAME)&lt;br /&gt;
    wbb_mgr.mgr = analysis_helper.set_first_timestamp(wbb_mgr.mgr) #adjusting tags to signal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moduł &amp;lt;tt&amp;gt;obci.analysis.balance.wii_analysis&amp;lt;/tt&amp;gt; umożliwia wyznaczenie podstawowych wskaźników posturograficznych z zadania eksperymentalnego &amp;quot;stanie swobodne&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*Maksymalna wartość wychwiań w AP i ML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# x  - macierz reprezentująca kanał x,&lt;br /&gt;
# y  - macierz reprezentująca kanał y.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# max_sway  - maksymalne wychwianie (float),&lt;br /&gt;
# max_AP    - maksymalne wychwianie w kierunku AP (float), &lt;br /&gt;
# max_ML    - maksymalne wychwianie w kierunku ML (float).&lt;br /&gt;
&lt;br /&gt;
max_sway, max_AP, max_ML = wii_max_sway_AP_MP(x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Średnia wartość wychwiań COP od punktu (0,0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# x  - macierz reprezentująca kanał x,&lt;br /&gt;
# y  - macierz reprezentująca kanał y.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# cop         - średnią wartość wychwiań do punktu (0, 0) (float),&lt;br /&gt;
# mean_y_COP  - średnią wartość wychwiań do punktu (0, 0) w AP (float),&lt;br /&gt;
# mean_x_COP  - średnią wartość wychwiań do punktu (0, 0) w  ML (float).&lt;br /&gt;
&lt;br /&gt;
mean_COP, mean_y_COP, mean_x_COP = wii_mean_COP_sway_AP_ML(x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Długość drogi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr  - obiekt klasy  WBBReadManager,&lt;br /&gt;
# x        - macierz reprezentująca kanał x,&lt;br /&gt;
# y        - macierz reprezentująca kanał y,&lt;br /&gt;
# plot     - True/False (opcjonalnie). &lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# path_length    - długość drogi COP (float),&lt;br /&gt;
# path_length_x  - długość drogi COP w ML (float),&lt;br /&gt;
# path_length_y  - długość drogi COP w AP (float).&lt;br /&gt;
&lt;br /&gt;
path_length, path_length_x, path_length_y = wii_COP_path(wbb_mgr, x, y, plot=False)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*RMS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# x  - macierz reprezentująca kanał x,&lt;br /&gt;
# y  - macierz reprezentująca kanał y.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# RMS     - (float),&lt;br /&gt;
# RMS_AP  - (float),&lt;br /&gt;
# RMS_ML  - (float).&lt;br /&gt;
&lt;br /&gt;
RMS, RMS_AP, RMS_ML = wii_RMS_AP_ML(x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*95% powierzchnia ufności elipsy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# x  - macierz reprezentująca kanał x,&lt;br /&gt;
# y  - macierz reprezentująca kanał y.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# e  - 95% powierzchnia ufności elipsy (float).&lt;br /&gt;
&lt;br /&gt;
e = wii_confidence_ellipse_area(x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Średnia prędkość przemieszczenia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr  - obiekt klasy WBBReadManager&lt;br /&gt;
# x        - macierz reprezentująca kanał x,&lt;br /&gt;
# y        - macierz reprezentująca kanał y,&lt;br /&gt;
# plot     - True/False (opcjonalnie).&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# mean_velocity - średnia prędkość przemieszczenia,&lt;br /&gt;
# velocity_AP   - średnia prędkość przemieszczenia w AP,&lt;br /&gt;
# velocity_ML   - średnia prędkość przemieszczenia w ML.&lt;br /&gt;
&lt;br /&gt;
mean_velocity, velocity_AP, velocity_ML = wii_mean_velocity(wbb_mgr, x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Procentowa wartość przebywania w czterech ćwiartkach układu współrzędnych&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr  - obiekt klasy  WBBReadManager,&lt;br /&gt;
# x        - macierz reprezentująca kanał x,&lt;br /&gt;
# y        - macierz reprezentująca kanał y,&lt;br /&gt;
# plot     - True/False (opcjonalnie). &lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# top_right     - procentowa wartość przebywania w prawej górnej ćwiartce układu współrzędnych (float),&lt;br /&gt;
# top_left      - procentowa wartość przebywania w lewej górnej ćwiartce układu współrzędnych (float),&lt;br /&gt;
# bottom_right  - procentowa wartość przebywania w prawej dolnej ćwiartce układu współrzędnych (float),&lt;br /&gt;
# bottom_left   - procentowa wartość przebywania w lewej dolnej ćwiartce układu współrzędnych (float).&lt;br /&gt;
&lt;br /&gt;
top_right, top_left, bottom_right, bottom_left = wii_get_percentages_values(wbb_mgr, x, y, plot=False)&lt;br /&gt;
&amp;lt;/source&amp;gt; --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Anna.chabuda</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Nowe_technologie_w_fizyce_biomedycznej/Posturografia&amp;diff=7672</id>
		<title>Nowe technologie w fizyce biomedycznej/Posturografia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Nowe_technologie_w_fizyce_biomedycznej/Posturografia&amp;diff=7672"/>
		<updated>2018-03-29T12:37:11Z</updated>

		<summary type="html">&lt;p&gt;Anna.chabuda: /* Przygotowanie danych do analizy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Posturograf =&lt;br /&gt;
&lt;br /&gt;
Zajęcia warsztatowe składające się z wprowadzającego w tematykę zajęć wykładu i indywidualnych ćwiczeń wykonywanych przez studentów. Studenci w czasie zajęć przeprowadzają standardowe pomiary posturograficzne, a następnie analizują zebrane dane.&lt;br /&gt;
&lt;br /&gt;
==Plan zajęć==&lt;br /&gt;
&lt;br /&gt;
Zajęcia 1:&lt;br /&gt;
*Wstęp teoretyczny:&lt;br /&gt;
**Wii Balance Board (budowa, główne biblioteki obsługujące sensor, zastosowania)&lt;br /&gt;
**Projesjonalne systemy do rejestracji siły nacisku&lt;br /&gt;
**Równowaga a stabilność posturalna&lt;br /&gt;
**Podstawowe zadania posturograficzne&lt;br /&gt;
**Opis wybranych wskaźników do zadań posturograficznych&lt;br /&gt;
*Wprowadzenie do pomiarów przeprowadzanych na zajęciach (zapoznanie się z wybranymi scenariuszami oraz modułami do analizy)&lt;br /&gt;
*Zapoznanie się z działaniem Wii Balance Board&lt;br /&gt;
*Przeprowadzenie pomiarów&lt;br /&gt;
&lt;br /&gt;
[[Media: WiiBoard.pdf]] Informacje wstępne oraz opis zadań&lt;br /&gt;
&lt;br /&gt;
[[Media: WiiBoardENG.pdf]] Introduction and task description in English&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Media:wprowadzenie.pdf]] Wykład z zajęć wprowadzających&lt;br /&gt;
[[Media:Pomiary_wii.pdf]] Wstęp do pomiarów posturograficznych&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zajęcia 2,3,4:&lt;br /&gt;
*Analiza zebranych danych&lt;br /&gt;
*Prezentacja wyników&lt;br /&gt;
&lt;br /&gt;
==Pomiary==&lt;br /&gt;
Pomiary przeprowadzane są w środowisku OpenBCI przy użyciu aplikacji Brain4edu (na Ubuntu 16.04). Opis architektury systemu OpenBCI oraz podręcznik użytkownika Brain4edu dostępne są na stronie http://laboratorium-eeg.braintech.pl/. Z samego OpenBCI można również korzystać na systemie Windows -&amp;gt; instrukcja [[Media: obci_Windows.pdf]]. &lt;br /&gt;
&lt;br /&gt;
Zaczynamy od uruchomienia aplikacji Brain. W prawym górnym rogu ekranu pojawi się ikona mózgu będąca interfejsem graficznym aplikacji. Do pomiarów posturograficznych wybieramy opcję 'Wii App', która otworzy okno z wyborem scenariuszy.&lt;br /&gt;
&lt;br /&gt;
[[Plik:brain4edu.png|300px|thumb|left|&amp;lt;figure id=&amp;quot;fig:wbb&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Interfejs graficzny aplikacji Brain4edu]]&lt;br /&gt;
[[Plik:wiiApp.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:wbb&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Okno wyboru scenariuszy eksperymentalnych aplikacji WiiApp]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Pomiary przeprowadzane są w środowisku OpenBCI. Architektura systemu oraz opis wybranych scenariuszy jest dostępny na stronie http://bci.fuw.edu.pl/wiki/Tutorials.  Szczegółowe informacje dotyczące konfiguracji OpenBCI na Ubuntu 14.04 LTS można znaleźć pod adresem http://deb.braintech.pl/. Po zainstalowaniu pakietów źródła znajdą sie w katalogu &amp;lt;tt&amp;gt;/usr/share/openbci&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Z OpenBCI można również korzystać na systemie Windows -&amp;gt; instrukcja [[Media: obci_Windows.pdf]]&lt;br /&gt;
&lt;br /&gt;
Rejestracja danych odbywa się w środowisku OpenBCI. System ten uruchamiamy wykonując w terminalu polecenie: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;$ obci_gui --presets new_tech &amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podczas zajęć przeprowadzone zostaną następujące pomiary:&lt;br /&gt;
*stanie swobodne z oczami otwartymi/zamkniętymi,&lt;br /&gt;
*wychylenia szybkie i &amp;quot;z przytrzymaniem&amp;quot; bez informacji zwrotnej dla badanego (w przód, w tył, w prawo, w lewo),&lt;br /&gt;
*wychylenia szybkie i &amp;quot;z przytrzymaniem&amp;quot; z informacją zwrotną dla badanego (w przód, w tył, w prawo, w lewo).&lt;br /&gt;
&lt;br /&gt;
W wyniku każdego pomiaru otrzymujemy komplet trzech plików (domyślna lokalizacja to Katalog Domowy): &lt;br /&gt;
* Plik z sygnałem (.raw) zapisanym w formacie binarnym. W pliku znajdują się próbki z pięciu kanałów – wartości z czterech czujników WBB oraz momenty w czasie (w sekundach) mierzone względem pojawienia się pierwszej próbki.&lt;br /&gt;
* Plik z metadanymi (.xml), w którym znajdują się szczegółowe informacje dotyczące rejestracji (nazwy kanałów, częstość próbkowania, całkowita liczba próbek itp.).&lt;br /&gt;
* Plik ze znacznikami (.tag), w którym zapisywane są momenty kolejnych zdarzeń (np. początek i koniec wykonywania zadania) zsynchronizowane z sygnałem. Każdy znacznik posiada charakterystyczną nazwę, moment wystąpienia w sygnale, długość oraz ewentualnie opis. &lt;br /&gt;
&amp;lt;!--W przypadku zadań z informacją zwrotną dla badanego generowane są dwa pliki ze znacznikami. Interesujące nas informacje znajdują się w pliku z rozszerzeniem .game.tag.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Analiza danych==&lt;br /&gt;
&lt;br /&gt;
===Przygotowanie danych do analizy===&lt;br /&gt;
Pierwszym etapem analizy jest wczytanie danych. Korzystamy tutaj z funkcji klasy ReadManager. Otrzymany obiekt posiadaja metodę 'get_samples', która zwraca macierz 5-kanałową. Pierwszy kanał to próbki czasu wyrażone w [s] natomiast pozostałe kanały to dane z kolejnych sensorów TR, BR, TL, BL (górny prawy-TR, dolny prawy-BR, górny lewy-TL, dolny lewy-BL).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.signal_processing import read_manager&lt;br /&gt;
from obci.signal_processing.balance.wii_preprocessing import *&lt;br /&gt;
from obci.signal_processing.balance.wii_analysis import *&lt;br /&gt;
&lt;br /&gt;
file_name = 'still_eyes_closed_eyes_open'&lt;br /&gt;
wbr = read_manager.ReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.obci.tag')&lt;br /&gt;
TIME = wbr.get_samples()[0,:]&lt;br /&gt;
TR = wbr.get_samples()[1,:]&lt;br /&gt;
BR = wbr.get_samples()[2,:]&lt;br /&gt;
TL = wbr.get_samples()[3,:]&lt;br /&gt;
BL = wbr.get_samples()[4,:]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jednak w przypadku niektórych zadań należy jeszcze przed pobraniem próbek, odpowiednio wyciąć interesujące nas dane względem znaczników. Czynność tę wykonuje funkcja 'wii_cut_fragments' przyjmująca obiekt klasy ReadManager i znaczniki początkowe i końcowe, a zwracająca listę obiektów 'smart_tags'. Liczba tych obiektów odpowiada liczbie zdarzeń z danym znacznikiem (dla stania swobodnego lista będzie miała tylko jeden element, natomiast dla wielokrotnych wychyleń będzie ich kilka). Każdy element na tej liście, również posiada metodę 'get_samples'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.signal_processing import read_manager&lt;br /&gt;
from obci.signal_processing.balance.wii_preprocessing import *&lt;br /&gt;
from obci.signal_processing.balance.wii_analysis import *&lt;br /&gt;
&lt;br /&gt;
file_name = 'still_eyes_closed_eyes_open'&lt;br /&gt;
wbr = read_manager.ReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.obci.tag')&lt;br /&gt;
smart_tags = wii_cut_fragments(wbr, start_tag_name='ss_start', end_tags_names=['ss_stop'])&lt;br /&gt;
TL = smart_tags[0].get_samples()[3,:]&lt;br /&gt;
TR = smart_tags[0].get_samples()[1,:]&lt;br /&gt;
BR = smart_tags[0].get_samples()[2,:]&lt;br /&gt;
BL = smart_tags[0].get_samples()[4,:]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na podstawie danch z czterech czujników można wyznaczyć wartości wychyleń w kierunkach x i y  (&amp;lt;xr id=&amp;quot;fig:wbb&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;).:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;x=\frac{(TR+BR)-(TL+BL)}{TR+TL+BL+BR}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y=\frac{(TR+TL)-(BR+BL)}{TR+TL+BL+BR}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Należy pamiętać, że dane z czujników pochodzą z układu odniesienia deski Wii Board - zatem uzyskane wartości x i y mieszczą się w zakresie od -1 do 1. Aby uzyskać dane w cm trzeba przemnożyć współrzędne x i y przez odpowiednie czynniki:&lt;br /&gt;
[[Plik:wbb_axes.png|600px|thumb|center|&amp;lt;figure id=&amp;quot;fig:wbb&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Wii Balance Board z oznaczonymi płaszczyznami ML i AP. TR, TL, BR, BL ozanczają pozycje czterech czujników.]]&lt;br /&gt;
&lt;br /&gt;
Znaczniki 'start_tag_name' oraz 'end_tags_names' dla poszczególnych pomiarów:&lt;br /&gt;
&lt;br /&gt;
* stanie swobodne oczy otwarte: 'ss_start', 'ss_stop'&lt;br /&gt;
* stanie swobodne oczy zamknięte: 'ss_eyes_closed_start', 'ss_eyes_closed_stop'&lt;br /&gt;
&lt;br /&gt;
* wychylenia szybkie bez informacji zwrotnej: 'start_fast', 'stop_fast'&lt;br /&gt;
* wychylenia &amp;quot;z przytrzymaniem&amp;quot; bez informacji zwrotnej: 'start', 'stop'&lt;br /&gt;
&lt;br /&gt;
* stanie swobodne jako kalibracja do zadań z informacją zwrotną: 'baseline_start', 'baseline_stop'&lt;br /&gt;
* wychylenia szybkie z informacją zwrotną: nie ma znaczników - ciągły zapis danych&lt;br /&gt;
* wychylenia &amp;quot;z przytrzymaniem&amp;quot; z informacją zwrotną: 'start_1', 'finish'&lt;br /&gt;
&lt;br /&gt;
Dla przypadku wychyleń &amp;quot;z przytrzymaniem&amp;quot; obiekty w liście zwróconej przez funkcję 'wii_cut_fragments' odpowiadają kolejnym realizacjom zadania. Mają one jednak nieco inną strukturę. Oprócz metody 'get_samples()', za pomocą której tak jak poprzednio wczytamy dane z 4 czujników, posiadają również metody:&lt;br /&gt;
*'get_end_tag()' - zwraca strukturę, która w polu ['desc']['value'] przechowuje informację o tym czy zadanie zostało wykonane poprawnie (0-niepoprawnie, 1-poprawnie)&lt;br /&gt;
*'get_start_tag()' - zwraca strukturę, która w polu ['desc']['value'] przechowuje informację o kierunku wychylenia (pole 'direction', wartości: 'up','down','left','right') oraz o poziomie trudności zadania (pole 'level'). Aby wydobyć informację o kierunku wychylenia (analogicznie dla poziomiu trudności) można skorzystać z funkcji: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
eval(smart_tags[index].get_start_tag()['desc']['value'])['direction']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Informacje o poziomie trudności, poprawności wykonania zadania oraz kierunku będą potrzebne do podjęcia decyzji, które próby wykonania zadania będą brane do dalszej analizy. Interesują nas jedynie te poprawne o najwyższym poziomie trudności w każdym z kierunków. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Pierwszym etapem analizy jest wstępne przetworzenie danych. W tym celu należy wyestymować rzeczywistą częstość próbkowania Fs (w idealnym przypadku wynosi ona 65 Hz) oraz przepróbkować sygnał do częstości fs ok. 30 Hz (wychylenia swobodne widoczne są głównie w niższych częstościach).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
from obci.analysis.balance.wii_read_manager import WBBReadManager&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_baseline&lt;br /&gt;
from obci.analysis.balance.wii_preprocessing import *&lt;br /&gt;
from obci.analysis.balance.wii_analysis import *&lt;br /&gt;
&lt;br /&gt;
def read_file(file_path, file_name, tag_format = 'obci'):&lt;br /&gt;
    file_name = file_path+file_name&lt;br /&gt;
    wbb_mgr = WBBReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.' + tag_format + '.tag')&lt;br /&gt;
    return wbb_mgr&lt;br /&gt;
&lt;br /&gt;
FILE_PATH = '/home/newtech/'&lt;br /&gt;
FILE_NAME = 'wii_baseline_2015-03-04_15-02-01' #przykładowa nazwa pliku&lt;br /&gt;
&lt;br /&gt;
#wczytanie danych&lt;br /&gt;
wbr_baseline = read_file(FILE_PATH, FILE_NAME)&lt;br /&gt;
#estymacja częstości próbkowania Fs                                  &lt;br /&gt;
Fs = analysis_baseline.estimate_fs(wbr_baseline.mgr.get_channel_samples('TSS')) &lt;br /&gt;
#wpisanie częstości Fs do obiektu&lt;br /&gt;
wbr_baseline.mgr.set_param('sampling_frequency', Fs)   &lt;br /&gt;
#przepróbkowanie z czynnikiem 2                         &lt;br /&gt;
wbr_baseline = wii_downsample_signal(wbr_baseline, factor=2, pre_filter=True, use_filtfilt=True) &lt;br /&gt;
#odczytanie nowej częstości próbkowania fs&lt;br /&gt;
fs = float(wbr_baseline.mgr.get_param('sampling_frequency'))                           &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Po takich operacjach dane przechowywane w obiekcie 'wbr_baseline' klasy WBBReadManager są gotowe do użycia. Klasa ta posiada metodę 'get_raw_signal', która zwraca 4-kanałową macierz z danymi z 4 czujników (są to kanały odpowiadające kolejno czujnikom: górny lewy-TL, górny prawy-TR, dolny prawy-BR, dolny lewy-BL). Można wyznaczyć wartości wychyleń w kierunkach x i y na podstawie informacji z czterech czujników (&amp;lt;xr id=&amp;quot;fig:wbb&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;).:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;x=\frac{(TR+BR)-(TL+BL)}{TR+TL+BL+BR}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y=\frac{(TR+TL)-(BR+BL)}{TR+TL+BL+BR}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Należy pamiętać, że dane z czujników pochodzą z układu odniesienia deski Wii Board - zatem uzyskane wartości x i y mieszczą się w zakresie od -1 do 1. Aby uzyskać dane w cm trzeba przemnożyć współrzędne x i y przez odpowiednie czynniki:&lt;br /&gt;
[[Plik:wbb_axes.png|600px|thumb|center|&amp;lt;figure id=&amp;quot;fig:wbb&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Wii Balance Board z oznaczonymi płaszczyznami ML i AP. TR, TL, BR, BL ozanczają pozycje czterech czujników.]]&lt;br /&gt;
&lt;br /&gt;
Jednak w przypadku niektórych zadań należy jeszcze, przed wyznaczaniem x i y, odpowiednio wyciąć interesujące nas dane względem znaczników. Czynność tę wykonuje funkcja 'wii_cut_fragments', która zwraca listę obiektów 'smart_tags'. Liczba tych obiektów odpowiada liczbie zdarzeń z danym znacznikiem (dla stania swobodnego lista będzie miała tylko jeden element, natomiast dla wielokrotnych wychyleń będzie ich kilka). Każdy element na tej liście, posiada metodę 'get_samples' zwracającą dane w macierzy 7 kanałowej. W pierwszych 4 kanałach znajdują się dane z czujników TL,TR,BR,BL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
smart_tags = wii_cut_fragments(wbr_baseline, start_tag_name='ss_start', end_tags_names=['ss_stop'])&lt;br /&gt;
TL = smart_tags[0].get_samples()[0,:]&lt;br /&gt;
TR = smart_tags[0].get_samples()[1,:]&lt;br /&gt;
BR = smart_tags[0].get_samples()[2,:]&lt;br /&gt;
BL = smart_tags[0].get_samples()[3,:]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Znaczniki 'start_tag_name' oraz 'end_tags_names' dla poszczególnych pomiarów:&lt;br /&gt;
&lt;br /&gt;
* stanie swobodne oczy otwarte: 'ss_start', 'ss_stop'&lt;br /&gt;
* stanie swobodne oczy zamknięte: 'ss_oczy_start', 'ss_oczy_stop'&lt;br /&gt;
&lt;br /&gt;
* wychylenia szybkie bez informacji zwrotnej: 'szybkie_start', 'szybkie_stop'&lt;br /&gt;
* wychylenia &amp;quot;z przytrzymaniem&amp;quot; bez informacji zwrotnej: 'start', 'stop'&lt;br /&gt;
&lt;br /&gt;
* stanie swobodne jako kalibracja do zadań z informacją zwrotną: 'ss_start', 'ss_stop'&lt;br /&gt;
* wychylenia szybkie z informacją zwrotną: nie ma znaczników - ciągły zapis danych&lt;br /&gt;
* wychylenia &amp;quot;z przytrzymaniem&amp;quot; z informacją zwrotną: 'start_1', 'finish'&lt;br /&gt;
&lt;br /&gt;
Podczas wczytywania danych z informacją zwrotną interesujące nas informacje znajdują się w pliku z rozszerzeniem .game.tag. Zatem należy ustawić parametr 'tag_format' w wywołaniu funkcji read_file na 'game' (zamiast domyślnie ustawionego 'obci'). Znaczniki czasowe gry nie są zsynchronizowane z sygnałem, ponieważ gra uruchamiana jest w osobnym wątku, który nie ma możliwości komunikacji z multiplekserem. Z tego względu każdy znacznik zapisany w tym pliku posiada czas systemowy, który należy wyrównać względem pierwszej próbki w sygnale. Procedura ta została zaimplementowana w poniższej funkcji, którą należy wykonać przed przepróbkowaniem sygnału:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_helper&lt;br /&gt;
wbr_sway.mgr = analysis_helper.set_first_timestamp(wbr_sway.mgr)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dalsze kroki przygotowania danych do analizy wykonujemy tak samo. Dla przypadku wychyleń &amp;quot;z przytrzymaniem&amp;quot; obiekty w liście zwróconej przez funkcję 'wii_cut_fragments' odpowiadają kolejnym realizacjom zadania. Mają one jednak nieco inną strukturę. Oprócz metody 'get_samples()', za pomocą której tak jak poprzednio wczytamy dane z 4 czujników, posiadają również metody:&lt;br /&gt;
*'get_end_tag()' - zwraca strukturę, która w polu ['desc']['type'] przechowuje informację o tym czy zadanie zostało wykonane poprawnie (0-niepoprawnie, 1-poprawnie)&lt;br /&gt;
*'get_start_tag()' - zwraca strukturę, która w polu ['desc']['type'] przechowuje informację o kierunku wychylenia (pole 'direction', wartości: 'up','down','left','right') oraz o poziomie trudności zadania (pole 'level'). Aby wydobyć informację o kierunku wychylenia (analogicznie dla poziomiu trudności) można skorzystać z funkcji: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
eval(smart_tags[index].get_start_tag()['desc']['type'])['direction']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Informacje o poziomie trudności, poprawności wykonania zadania oraz kierunku będą potrzebne do podjęcia decyzji, które próby wykonania zadania będą brane do dalszej analizy. Interesują nas jedynie te poprawne o najwyższym poziomie trudności w każdym z kierunków. &lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--Dokumentacja funkcji klasy WBBReadManager (przy pomcy której wczytujemy dane. Korzysta ona z obiektu klasy ReadManager, która została zaprojektowana do wczytywania i segmentacji danych rejestrowanych przy pomocy systemu OpenBCI. Moduł &amp;lt;tt&amp;gt;obci.analysis.balance.wii_preprocessing&amp;lt;/tt&amp;gt; umożliwia dodatkowo przepróbkowanie oraz filtrację danych): &lt;br /&gt;
&lt;br /&gt;
*Przepróbkowanie danych&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr       - obiekt klasy WBBReadManager&lt;br /&gt;
# factor        - nowa_fs = fs / factor (int)&lt;br /&gt;
# pre_filter    - True/False w zależności czy ma być użyty filtr dolnoprzepustowy z częstością&lt;br /&gt;
#                 odcięcia: częstość próbkowania / 2&lt;br /&gt;
# use_filtfilt  - True/False w zależności czy ma być użyta procedura &lt;br /&gt;
#                 filtrowania filtfilt/lfilter (bool)&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca obiekt klasy WBBReadManager z przepróbkowanym sygnałem.&lt;br /&gt;
&lt;br /&gt;
factor = 2&lt;br /&gt;
pre_filter = False&lt;br /&gt;
use_filtfilt = True&lt;br /&gt;
&lt;br /&gt;
wbb_mgr = wii_downsample_signal(wbb_mgr, &lt;br /&gt;
                                factor, &lt;br /&gt;
                                pre_factor, &lt;br /&gt;
                                use_filtfilt)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Segmentacja danych&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr         - obiekt klasy WBBReadManager,&lt;br /&gt;
# start_tag_name  - nazwa znacznika określającego początek fragmentu,&lt;br /&gt;
# end_tags_names  - lista z nazwami znaczników określających koniec fragmentu.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca obiekt klasy SmartTagsManager.&lt;br /&gt;
&lt;br /&gt;
smart_tags = wii_cut_fragments(wbb_mgr,&lt;br /&gt;
                               start_tag_name='start', &lt;br /&gt;
                               end_tags_names=['stop'])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Filtracja danych&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr       - obiekt klasy  WBBReadManager&lt;br /&gt;
# cutoff_upper  - częstość odcięcia (float)&lt;br /&gt;
# order         - rząd filtru (int)&lt;br /&gt;
# use_filtfilt  - True/False w zależności, czy ma być użyta procedura &lt;br /&gt;
#                 filtrowania filtfilt/lfilter (bool)&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca obiekt klasy WBBReadManager z przefiltrowanym sygnałem.&lt;br /&gt;
&lt;br /&gt;
cutoff_upper = 20&lt;br /&gt;
order = 2&lt;br /&gt;
use_filtfilt = False&lt;br /&gt;
wbb_mgr = wii_filter_signal(wbb_mgr, &lt;br /&gt;
                            cutoff_upper, &lt;br /&gt;
                            order, &lt;br /&gt;
                            use_filtfilt)&lt;br /&gt;
&amp;lt;/source&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Analiza danych: stanie swobodne===&lt;br /&gt;
&lt;br /&gt;
W przypadku stania swobodnego z oczami zamkniętymi oraz otwartymi, studenci mają za zadanie wyznaczyć następujące wskaźniki posturograficzne:&lt;br /&gt;
&amp;lt;!-- (korzystając z funkcji zaimplentowanych w bibliotece &amp;lt;tt&amp;gt;obci.analysis.balance.wii_analysis&amp;lt;/tt&amp;gt;): --&amp;gt;&lt;br /&gt;
*położenie środka równowagi COP (''center of pressure'')&lt;br /&gt;
*maksymalne przemieszczenie względem położenia środka równowagi (w AP,ML oraz płaszczyźnie AP/ML),&lt;br /&gt;
*długość drogi względem położenia środka równowagi (w AP,ML oraz płaszczyźnie AP/ML),&lt;br /&gt;
*średnia prędkość przemieszczenia (w AP,ML oraz płaszczyźnie AP/ML),&lt;br /&gt;
*wskaźnik Romberga - stosunek różnicy długości drogi przy oczach zamkniętych i otwartych, do sumy długości drogi przy oczach zamkniętych i otwartych&lt;br /&gt;
&amp;lt;!--*95% powierzchnia ufności elipsy - powierzchnia elipsy, w której powinno zawierać się około 95% punktów drogi COP,&lt;br /&gt;
*RMS (''root mean square'') (w AP i ML).---&amp;gt;&lt;br /&gt;
Dokładny opis matematyczny wyżej wymienionych wskaźników znajduje się w pracy (Prieto, 1996). &lt;br /&gt;
&lt;br /&gt;
Należy również przedstawić na wykresie przebieg ruchu COP oddzielnie w płaszczyźnie AP, ML oraz w przestrzeni AP/ML.&lt;br /&gt;
&lt;br /&gt;
Dodatkowo studenci mają za zadanie przeprowadzić analizę rozkładu przestrzennego punktów statokinezjogramu. Statokinezjogramem lub posturogramem nazywamy wędrówkę COP w dwuwymiarowej płaszczyźnie podparcia. Kierunki na tej płaszczyźnie określa się jako AP (y) lub ML (x), przy czym ML oznacza wychylenia w płaszczyźnie czołowej (''medio-lateral''), a AP w płaszczyźnie strzałkowej (''anterio-posterior''). W celu przeprowadzenie takiej analizy, cały zakres zostaje podzielony na jednakowe komórki. Następnie obliczony zostaje histogram przestrzenny czasu przebywania w każdej z nich. Taki histogram pozwala ocenić, czy kontrola położenia referencyjnego COG (''center of gravity''), a tym samym pionowa orientacja ciała, jest prawidłowa. Wyznacznikiem prawidłowej kontroli jest histogram o skupionym rozkładzie i z wyraźnym maksimum. Upośledzenie kontroli objawia się tym, że histogram przestrzenny staje się rozmyty lub wyraźnie niesymetryczny (Błaszczyk, 2004).&lt;br /&gt;
&lt;br /&gt;
===Analiza danych: wychylenia dynamiczne===&lt;br /&gt;
&lt;br /&gt;
Oprócz wskaźników statycznych stabilności do oceny kontroli posturalnej wykorzystuje się również miary dynamiczne. Z punktu widzenia miar bezpośrednich, istotna jest ocena kontroli środka ciężkości ciała w czasie jego świadomego przemieszczania w wyznaczonym kierunku. W ramach pomiarów, studenci mieli za zadanie wykonać dwa rodzaje wychyleń (szybkie i &amp;quot;z przytrzymaniem&amp;quot;) w dwóch warunkach: bez informacji zwrotnej dla badanego oraz z informacją zwrotną dla badanego. Dla każdego z przypadków należy wyznaczyć następujące parametry:&lt;br /&gt;
&lt;br /&gt;
*położenie środka równowagi (dla warunku bez informacji zwrotnej będzie to COP ze stania swobodnego z oczami otwartymi, natomiast dla warunku z informacją zwrotną będzie to COP z sesji kalibracyjnej)&lt;br /&gt;
*wartość maksymalnego wychylenia (w określonym kierunku) względem położenia równowagi,&lt;br /&gt;
*wykresy składowych wychwiań względem położenia równowagi w płaszczyźnie AP, ML w zależności od czasu oraz wypadkowa trajektoria przemieszczeń COP (w dwuwymiarowej płaszczyźnie AP, ML).&lt;br /&gt;
&lt;br /&gt;
i zbadać czy informacja zwrotna wpływa na rezultaty badanego.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
*Błaszczyk J., Biomechanika kliniczna, PZWL, 2004&lt;br /&gt;
*Prieto T.E. et al., Measures of postural steadiness: differences between healthy young and elderly adults, IEEE Trans Biomed Eng, 1996, 43(9):956-66&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Przykładowe skrypty do analizy:&lt;br /&gt;
&lt;br /&gt;
*zadanie &amp;quot;stanie swobodne&amp;quot;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.analysis.balance.wii_read_manager import WBBReadManager&lt;br /&gt;
from obci.analysis.balance.wii_preprocessing import *&lt;br /&gt;
from obci.analysis.balance.wii_analysis import *&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as py&lt;br /&gt;
&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_baseline&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_helper&lt;br /&gt;
&lt;br /&gt;
from obci.acquisition import acquisition_helper&lt;br /&gt;
&lt;br /&gt;
FILE_PATH = '~/' #full path&lt;br /&gt;
FILE_NAME = 'wii_baseline_2015-03-03_20-51-48' #file name without extension&lt;br /&gt;
&lt;br /&gt;
def read_file(file_path, file_name, tag_format = 'obci'):&lt;br /&gt;
    file_name = acquisition_helper.get_file_path(file_path, file_name)&lt;br /&gt;
    wbb_mgr = WBBReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.' + tag_format + '.tag')&lt;br /&gt;
    return wbb_mgr&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    #load data&lt;br /&gt;
    wbb_mgr = read_file(FILE_PATH, FILE_NAME)&lt;br /&gt;
&lt;br /&gt;
    #add two additional (x, y) channels (computed from sensor values)&lt;br /&gt;
    wbb_mgr.get_x()&lt;br /&gt;
    wbb_mgr.get_y()&lt;br /&gt;
&lt;br /&gt;
    #estimate true sampling frequency value&lt;br /&gt;
    fs = analysis_baseline.estimate_fs(wbb_mgr.mgr.get_channel_samples('TSS'))&lt;br /&gt;
    wbb_mgr.mgr.set_param('sampling_frequency', analysis_baseline.estimate_fs(wbb_mgr.mgr.get_channel_samples('TSS')))&lt;br /&gt;
&lt;br /&gt;
    #preprocessing&lt;br /&gt;
    wbb_mgr = wii_downsample_signal(wbb_mgr, factor=2, pre_filter=True, use_filtfilt=True)&lt;br /&gt;
&lt;br /&gt;
    #extract fragments from standing task with eyes open&lt;br /&gt;
    smart_tags = wii_cut_fragments(wbb_mgr, start_tag_name='ss_start', end_tags_names=['ss_stop'])&lt;br /&gt;
    sm_x = smart_tags[0].get_channel_samples('x')&lt;br /&gt;
    sm_y = smart_tags[0].get_channel_samples('y')&lt;br /&gt;
    py.figure()&lt;br /&gt;
    print(wii_COP_path(wbb_mgr, sm_x, sm_y, plot=True))&lt;br /&gt;
    py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*zadanie &amp;quot;wychylenia bez informacji zwrotnej&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.analysis.balance.wii_read_manager import WBBReadManager&lt;br /&gt;
from obci.analysis.balance.wii_preprocessing import *&lt;br /&gt;
&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_baseline&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_helper&lt;br /&gt;
&lt;br /&gt;
from obci.acquisition import acquisition_helper&lt;br /&gt;
&lt;br /&gt;
FILE_PATH_LEFT = '' #full path&lt;br /&gt;
FILE_NAME_LEFT = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
FILE_PATH_RIGHT = '' #full path&lt;br /&gt;
FILE_NAME_RIGHT = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
FILE_PATH_DOWN = '' #full path&lt;br /&gt;
FILE_NAME_DOWN = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
FILE_PATH_UP = '' #full path&lt;br /&gt;
FILE_NAME_UP = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
def read_file(file_path, file_name, tag_format = 'obci'):&lt;br /&gt;
    file_name = acquisition_helper.get_file_path(file_path, file_name)&lt;br /&gt;
    wbb_mgr = WBBReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.' + tag_format + '.tag')&lt;br /&gt;
    return wbb_mgr&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    #load data from right sway task&lt;br /&gt;
    wbb_mgr_right = read_file(FILE_PATH_RIGHT, FILE_NAME_RIGHT)&lt;br /&gt;
&lt;br /&gt;
    #here should be preprocessing... &lt;br /&gt;
&lt;br /&gt;
    #extract fragments from sway task (right)&lt;br /&gt;
    smart_tags_quick = wii_cut_fragments(wbb_mgr_right, start_tag_name='szybkie_start', end_tags_names=['szybkie_stop'])&lt;br /&gt;
    x_fragments_quick = [i.get_channel_samples('x') for i in smart_tags_quick]&lt;br /&gt;
    y_fragments_quick = [i.get_channel_samples('y') for i in smart_tags_quick]&lt;br /&gt;
&lt;br /&gt;
    #extract fragments from sway&amp;amp;stay task (right)&lt;br /&gt;
    smart_tags_long = wii_cut_fragments(wbb_mgr_right, start_tag_name='start', end_tags_names=['stop'])&lt;br /&gt;
    x_fragments_long = [i.get_channel_samples('x') for i in smart_tags_long]&lt;br /&gt;
    y_fragments_long = [i.get_channel_samples('y') for i in smart_tags_long]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*zadanie &amp;quot;wychylenia z informacją zwrotną&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.analysis.balance.wii_read_manager import WBBReadManager&lt;br /&gt;
from obci.analysis.balance.wii_preprocessing import *&lt;br /&gt;
&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_baseline&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_helper&lt;br /&gt;
&lt;br /&gt;
from obci.acquisition import acquisition_helper&lt;br /&gt;
&lt;br /&gt;
BASELINE_FILE_PATH = '' #full path&lt;br /&gt;
BASELINE_FILE_NAME = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
FILE_PATH = '' #full path&lt;br /&gt;
FILE_NAME = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
def get_baseline_points(file_path, file_name):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot; baseline area is a rectangle with parameters:&lt;br /&gt;
        center point: xc, yc,&lt;br /&gt;
        width:        2*xa,&lt;br /&gt;
        height:       2*yb.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    xa, ya, xb, yb, xc, yc  = analysis_baseline.calculate(file_path, file_name, show=False)&lt;br /&gt;
    return xa, ya, xb, yb, xc, yc&lt;br /&gt;
&lt;br /&gt;
def read_file(file_path, file_name, tag_format = 'game'):&lt;br /&gt;
    file_name = acquisition_helper.get_file_path(file_path, file_name)&lt;br /&gt;
    wbb_mgr = WBBReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.' + tag_format + '.tag')&lt;br /&gt;
    return wbb_mgr&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    xa, ya, xb, yb, xc, yc = get_baseline_points(BASELINE_FILE_PATH, BASELINE_FILE_NAME)&lt;br /&gt;
    wbb_mgr = read_file(FILE_PATH, FILE_NAME)&lt;br /&gt;
    wbb_mgr.mgr = analysis_helper.set_first_timestamp(wbb_mgr.mgr) #adjusting tags to signal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moduł &amp;lt;tt&amp;gt;obci.analysis.balance.wii_analysis&amp;lt;/tt&amp;gt; umożliwia wyznaczenie podstawowych wskaźników posturograficznych z zadania eksperymentalnego &amp;quot;stanie swobodne&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*Maksymalna wartość wychwiań w AP i ML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# x  - macierz reprezentująca kanał x,&lt;br /&gt;
# y  - macierz reprezentująca kanał y.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# max_sway  - maksymalne wychwianie (float),&lt;br /&gt;
# max_AP    - maksymalne wychwianie w kierunku AP (float), &lt;br /&gt;
# max_ML    - maksymalne wychwianie w kierunku ML (float).&lt;br /&gt;
&lt;br /&gt;
max_sway, max_AP, max_ML = wii_max_sway_AP_MP(x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Średnia wartość wychwiań COP od punktu (0,0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# x  - macierz reprezentująca kanał x,&lt;br /&gt;
# y  - macierz reprezentująca kanał y.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# cop         - średnią wartość wychwiań do punktu (0, 0) (float),&lt;br /&gt;
# mean_y_COP  - średnią wartość wychwiań do punktu (0, 0) w AP (float),&lt;br /&gt;
# mean_x_COP  - średnią wartość wychwiań do punktu (0, 0) w  ML (float).&lt;br /&gt;
&lt;br /&gt;
mean_COP, mean_y_COP, mean_x_COP = wii_mean_COP_sway_AP_ML(x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Długość drogi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr  - obiekt klasy  WBBReadManager,&lt;br /&gt;
# x        - macierz reprezentująca kanał x,&lt;br /&gt;
# y        - macierz reprezentująca kanał y,&lt;br /&gt;
# plot     - True/False (opcjonalnie). &lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# path_length    - długość drogi COP (float),&lt;br /&gt;
# path_length_x  - długość drogi COP w ML (float),&lt;br /&gt;
# path_length_y  - długość drogi COP w AP (float).&lt;br /&gt;
&lt;br /&gt;
path_length, path_length_x, path_length_y = wii_COP_path(wbb_mgr, x, y, plot=False)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*RMS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# x  - macierz reprezentująca kanał x,&lt;br /&gt;
# y  - macierz reprezentująca kanał y.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# RMS     - (float),&lt;br /&gt;
# RMS_AP  - (float),&lt;br /&gt;
# RMS_ML  - (float).&lt;br /&gt;
&lt;br /&gt;
RMS, RMS_AP, RMS_ML = wii_RMS_AP_ML(x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*95% powierzchnia ufności elipsy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# x  - macierz reprezentująca kanał x,&lt;br /&gt;
# y  - macierz reprezentująca kanał y.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# e  - 95% powierzchnia ufności elipsy (float).&lt;br /&gt;
&lt;br /&gt;
e = wii_confidence_ellipse_area(x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Średnia prędkość przemieszczenia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr  - obiekt klasy WBBReadManager&lt;br /&gt;
# x        - macierz reprezentująca kanał x,&lt;br /&gt;
# y        - macierz reprezentująca kanał y,&lt;br /&gt;
# plot     - True/False (opcjonalnie).&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# mean_velocity - średnia prędkość przemieszczenia,&lt;br /&gt;
# velocity_AP   - średnia prędkość przemieszczenia w AP,&lt;br /&gt;
# velocity_ML   - średnia prędkość przemieszczenia w ML.&lt;br /&gt;
&lt;br /&gt;
mean_velocity, velocity_AP, velocity_ML = wii_mean_velocity(wbb_mgr, x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Procentowa wartość przebywania w czterech ćwiartkach układu współrzędnych&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr  - obiekt klasy  WBBReadManager,&lt;br /&gt;
# x        - macierz reprezentująca kanał x,&lt;br /&gt;
# y        - macierz reprezentująca kanał y,&lt;br /&gt;
# plot     - True/False (opcjonalnie). &lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# top_right     - procentowa wartość przebywania w prawej górnej ćwiartce układu współrzędnych (float),&lt;br /&gt;
# top_left      - procentowa wartość przebywania w lewej górnej ćwiartce układu współrzędnych (float),&lt;br /&gt;
# bottom_right  - procentowa wartość przebywania w prawej dolnej ćwiartce układu współrzędnych (float),&lt;br /&gt;
# bottom_left   - procentowa wartość przebywania w lewej dolnej ćwiartce układu współrzędnych (float).&lt;br /&gt;
&lt;br /&gt;
top_right, top_left, bottom_right, bottom_left = wii_get_percentages_values(wbb_mgr, x, y, plot=False)&lt;br /&gt;
&amp;lt;/source&amp;gt; --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Anna.chabuda</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Nowe_technologie_w_fizyce_biomedycznej/Posturografia&amp;diff=7671</id>
		<title>Nowe technologie w fizyce biomedycznej/Posturografia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Nowe_technologie_w_fizyce_biomedycznej/Posturografia&amp;diff=7671"/>
		<updated>2018-03-29T12:35:42Z</updated>

		<summary type="html">&lt;p&gt;Anna.chabuda: /* Przygotowanie danych do analizy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Posturograf =&lt;br /&gt;
&lt;br /&gt;
Zajęcia warsztatowe składające się z wprowadzającego w tematykę zajęć wykładu i indywidualnych ćwiczeń wykonywanych przez studentów. Studenci w czasie zajęć przeprowadzają standardowe pomiary posturograficzne, a następnie analizują zebrane dane.&lt;br /&gt;
&lt;br /&gt;
==Plan zajęć==&lt;br /&gt;
&lt;br /&gt;
Zajęcia 1:&lt;br /&gt;
*Wstęp teoretyczny:&lt;br /&gt;
**Wii Balance Board (budowa, główne biblioteki obsługujące sensor, zastosowania)&lt;br /&gt;
**Projesjonalne systemy do rejestracji siły nacisku&lt;br /&gt;
**Równowaga a stabilność posturalna&lt;br /&gt;
**Podstawowe zadania posturograficzne&lt;br /&gt;
**Opis wybranych wskaźników do zadań posturograficznych&lt;br /&gt;
*Wprowadzenie do pomiarów przeprowadzanych na zajęciach (zapoznanie się z wybranymi scenariuszami oraz modułami do analizy)&lt;br /&gt;
*Zapoznanie się z działaniem Wii Balance Board&lt;br /&gt;
*Przeprowadzenie pomiarów&lt;br /&gt;
&lt;br /&gt;
[[Media: WiiBoard.pdf]] Informacje wstępne oraz opis zadań&lt;br /&gt;
&lt;br /&gt;
[[Media: WiiBoardENG.pdf]] Introduction and task description in English&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Media:wprowadzenie.pdf]] Wykład z zajęć wprowadzających&lt;br /&gt;
[[Media:Pomiary_wii.pdf]] Wstęp do pomiarów posturograficznych&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zajęcia 2,3,4:&lt;br /&gt;
*Analiza zebranych danych&lt;br /&gt;
*Prezentacja wyników&lt;br /&gt;
&lt;br /&gt;
==Pomiary==&lt;br /&gt;
Pomiary przeprowadzane są w środowisku OpenBCI przy użyciu aplikacji Brain4edu (na Ubuntu 16.04). Opis architektury systemu OpenBCI oraz podręcznik użytkownika Brain4edu dostępne są na stronie http://laboratorium-eeg.braintech.pl/. Z samego OpenBCI można również korzystać na systemie Windows -&amp;gt; instrukcja [[Media: obci_Windows.pdf]]. &lt;br /&gt;
&lt;br /&gt;
Zaczynamy od uruchomienia aplikacji Brain. W prawym górnym rogu ekranu pojawi się ikona mózgu będąca interfejsem graficznym aplikacji. Do pomiarów posturograficznych wybieramy opcję 'Wii App', która otworzy okno z wyborem scenariuszy.&lt;br /&gt;
&lt;br /&gt;
[[Plik:brain4edu.png|300px|thumb|left|&amp;lt;figure id=&amp;quot;fig:wbb&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Interfejs graficzny aplikacji Brain4edu]]&lt;br /&gt;
[[Plik:wiiApp.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:wbb&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Okno wyboru scenariuszy eksperymentalnych aplikacji WiiApp]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Pomiary przeprowadzane są w środowisku OpenBCI. Architektura systemu oraz opis wybranych scenariuszy jest dostępny na stronie http://bci.fuw.edu.pl/wiki/Tutorials.  Szczegółowe informacje dotyczące konfiguracji OpenBCI na Ubuntu 14.04 LTS można znaleźć pod adresem http://deb.braintech.pl/. Po zainstalowaniu pakietów źródła znajdą sie w katalogu &amp;lt;tt&amp;gt;/usr/share/openbci&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Z OpenBCI można również korzystać na systemie Windows -&amp;gt; instrukcja [[Media: obci_Windows.pdf]]&lt;br /&gt;
&lt;br /&gt;
Rejestracja danych odbywa się w środowisku OpenBCI. System ten uruchamiamy wykonując w terminalu polecenie: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;$ obci_gui --presets new_tech &amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podczas zajęć przeprowadzone zostaną następujące pomiary:&lt;br /&gt;
*stanie swobodne z oczami otwartymi/zamkniętymi,&lt;br /&gt;
*wychylenia szybkie i &amp;quot;z przytrzymaniem&amp;quot; bez informacji zwrotnej dla badanego (w przód, w tył, w prawo, w lewo),&lt;br /&gt;
*wychylenia szybkie i &amp;quot;z przytrzymaniem&amp;quot; z informacją zwrotną dla badanego (w przód, w tył, w prawo, w lewo).&lt;br /&gt;
&lt;br /&gt;
W wyniku każdego pomiaru otrzymujemy komplet trzech plików (domyślna lokalizacja to Katalog Domowy): &lt;br /&gt;
* Plik z sygnałem (.raw) zapisanym w formacie binarnym. W pliku znajdują się próbki z pięciu kanałów – wartości z czterech czujników WBB oraz momenty w czasie (w sekundach) mierzone względem pojawienia się pierwszej próbki.&lt;br /&gt;
* Plik z metadanymi (.xml), w którym znajdują się szczegółowe informacje dotyczące rejestracji (nazwy kanałów, częstość próbkowania, całkowita liczba próbek itp.).&lt;br /&gt;
* Plik ze znacznikami (.tag), w którym zapisywane są momenty kolejnych zdarzeń (np. początek i koniec wykonywania zadania) zsynchronizowane z sygnałem. Każdy znacznik posiada charakterystyczną nazwę, moment wystąpienia w sygnale, długość oraz ewentualnie opis. &lt;br /&gt;
&amp;lt;!--W przypadku zadań z informacją zwrotną dla badanego generowane są dwa pliki ze znacznikami. Interesujące nas informacje znajdują się w pliku z rozszerzeniem .game.tag.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Analiza danych==&lt;br /&gt;
&lt;br /&gt;
===Przygotowanie danych do analizy===&lt;br /&gt;
Pierwszym etapem analizy jest wczytanie danych. Korzystamy tutaj z funkcji klasy ReadManager. Otrzymany obiekt posiadaja metodę 'get_samples', która zwraca macierz 5-kanałową. Pierwszy kanał to próbki czasu wyrażone w [s] natomiast pozostałe kanały to dane z kolejnych sensorów TR, BR, TL, BL (górny prawy-TR, dolny prawy-BR, górny lewy-TL, dolny lewy-BL).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.signal_processing import read_manager&lt;br /&gt;
from obci.signal_processing.balance.wii_preprocessing import *&lt;br /&gt;
from obci.signal_processing.balance.wii_analysis import *&lt;br /&gt;
&lt;br /&gt;
file_name = 'still_eyes_closed_eyes_open'&lt;br /&gt;
wbr = read_manager.ReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.obci.tag')&lt;br /&gt;
TIME = wbr.get_samples()[0,:]&lt;br /&gt;
TR = wbr.get_samples()[1,:]&lt;br /&gt;
BR = wbr.get_samples()[2,:]&lt;br /&gt;
TL = wbr.get_samples()[3,:]&lt;br /&gt;
BL = wbr.get_samples()[4,:]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jednak w przypadku niektórych zadań należy jeszcze przed pobraniem próbek, odpowiednio wyciąć interesujące nas dane względem znaczników. Czynność tę wykonuje funkcja 'wii_cut_fragments' przyjmująca obiekt klasy ReadManager i znaczniki początkowe i końcowe, a zwracająca listę obiektów 'smart_tags'. Liczba tych obiektów odpowiada liczbie zdarzeń z danym znacznikiem (dla stania swobodnego lista będzie miała tylko jeden element, natomiast dla wielokrotnych wychyleń będzie ich kilka). Każdy element na tej liście, również posiada metodę 'get_samples'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.signal_processing import read_manager&lt;br /&gt;
from obci.signal_processing.balance.wii_preprocessing import *&lt;br /&gt;
from obci.signal_processing.balance.wii_analysis import *&lt;br /&gt;
&lt;br /&gt;
file_name = 'still_eyes_closed_eyes_open'&lt;br /&gt;
wbr = read_manager.ReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.obci.tag')&lt;br /&gt;
smart_tags = wii_cut_fragments(wbr, start_tag_name='ss_start', end_tags_names=['ss_stop'])&lt;br /&gt;
TL = smart_tags[0].get_samples()[0,:]&lt;br /&gt;
TR = smart_tags[0].get_samples()[1,:]&lt;br /&gt;
BR = smart_tags[0].get_samples()[2,:]&lt;br /&gt;
BL = smart_tags[0].get_samples()[3,:]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na podstawie danch z czterech czujników można wyznaczyć wartości wychyleń w kierunkach x i y  (&amp;lt;xr id=&amp;quot;fig:wbb&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;).:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;x=\frac{(TR+BR)-(TL+BL)}{TR+TL+BL+BR}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y=\frac{(TR+TL)-(BR+BL)}{TR+TL+BL+BR}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Należy pamiętać, że dane z czujników pochodzą z układu odniesienia deski Wii Board - zatem uzyskane wartości x i y mieszczą się w zakresie od -1 do 1. Aby uzyskać dane w cm trzeba przemnożyć współrzędne x i y przez odpowiednie czynniki:&lt;br /&gt;
[[Plik:wbb_axes.png|600px|thumb|center|&amp;lt;figure id=&amp;quot;fig:wbb&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Wii Balance Board z oznaczonymi płaszczyznami ML i AP. TR, TL, BR, BL ozanczają pozycje czterech czujników.]]&lt;br /&gt;
&lt;br /&gt;
Znaczniki 'start_tag_name' oraz 'end_tags_names' dla poszczególnych pomiarów:&lt;br /&gt;
&lt;br /&gt;
* stanie swobodne oczy otwarte: 'ss_start', 'ss_stop'&lt;br /&gt;
* stanie swobodne oczy zamknięte: 'ss_eyes_closed_start', 'ss_eyes_closed_stop'&lt;br /&gt;
&lt;br /&gt;
* wychylenia szybkie bez informacji zwrotnej: 'start_fast', 'stop_fast'&lt;br /&gt;
* wychylenia &amp;quot;z przytrzymaniem&amp;quot; bez informacji zwrotnej: 'start', 'stop'&lt;br /&gt;
&lt;br /&gt;
* stanie swobodne jako kalibracja do zadań z informacją zwrotną: 'baseline_start', 'baseline_stop'&lt;br /&gt;
* wychylenia szybkie z informacją zwrotną: nie ma znaczników - ciągły zapis danych&lt;br /&gt;
* wychylenia &amp;quot;z przytrzymaniem&amp;quot; z informacją zwrotną: 'start_1', 'finish'&lt;br /&gt;
&lt;br /&gt;
Dla przypadku wychyleń &amp;quot;z przytrzymaniem&amp;quot; obiekty w liście zwróconej przez funkcję 'wii_cut_fragments' odpowiadają kolejnym realizacjom zadania. Mają one jednak nieco inną strukturę. Oprócz metody 'get_samples()', za pomocą której tak jak poprzednio wczytamy dane z 4 czujników, posiadają również metody:&lt;br /&gt;
*'get_end_tag()' - zwraca strukturę, która w polu ['desc']['value'] przechowuje informację o tym czy zadanie zostało wykonane poprawnie (0-niepoprawnie, 1-poprawnie)&lt;br /&gt;
*'get_start_tag()' - zwraca strukturę, która w polu ['desc']['value'] przechowuje informację o kierunku wychylenia (pole 'direction', wartości: 'up','down','left','right') oraz o poziomie trudności zadania (pole 'level'). Aby wydobyć informację o kierunku wychylenia (analogicznie dla poziomiu trudności) można skorzystać z funkcji: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
eval(smart_tags[index].get_start_tag()['desc']['value'])['direction']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Informacje o poziomie trudności, poprawności wykonania zadania oraz kierunku będą potrzebne do podjęcia decyzji, które próby wykonania zadania będą brane do dalszej analizy. Interesują nas jedynie te poprawne o najwyższym poziomie trudności w każdym z kierunków. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Pierwszym etapem analizy jest wstępne przetworzenie danych. W tym celu należy wyestymować rzeczywistą częstość próbkowania Fs (w idealnym przypadku wynosi ona 65 Hz) oraz przepróbkować sygnał do częstości fs ok. 30 Hz (wychylenia swobodne widoczne są głównie w niższych częstościach).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
from obci.analysis.balance.wii_read_manager import WBBReadManager&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_baseline&lt;br /&gt;
from obci.analysis.balance.wii_preprocessing import *&lt;br /&gt;
from obci.analysis.balance.wii_analysis import *&lt;br /&gt;
&lt;br /&gt;
def read_file(file_path, file_name, tag_format = 'obci'):&lt;br /&gt;
    file_name = file_path+file_name&lt;br /&gt;
    wbb_mgr = WBBReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.' + tag_format + '.tag')&lt;br /&gt;
    return wbb_mgr&lt;br /&gt;
&lt;br /&gt;
FILE_PATH = '/home/newtech/'&lt;br /&gt;
FILE_NAME = 'wii_baseline_2015-03-04_15-02-01' #przykładowa nazwa pliku&lt;br /&gt;
&lt;br /&gt;
#wczytanie danych&lt;br /&gt;
wbr_baseline = read_file(FILE_PATH, FILE_NAME)&lt;br /&gt;
#estymacja częstości próbkowania Fs                                  &lt;br /&gt;
Fs = analysis_baseline.estimate_fs(wbr_baseline.mgr.get_channel_samples('TSS')) &lt;br /&gt;
#wpisanie częstości Fs do obiektu&lt;br /&gt;
wbr_baseline.mgr.set_param('sampling_frequency', Fs)   &lt;br /&gt;
#przepróbkowanie z czynnikiem 2                         &lt;br /&gt;
wbr_baseline = wii_downsample_signal(wbr_baseline, factor=2, pre_filter=True, use_filtfilt=True) &lt;br /&gt;
#odczytanie nowej częstości próbkowania fs&lt;br /&gt;
fs = float(wbr_baseline.mgr.get_param('sampling_frequency'))                           &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Po takich operacjach dane przechowywane w obiekcie 'wbr_baseline' klasy WBBReadManager są gotowe do użycia. Klasa ta posiada metodę 'get_raw_signal', która zwraca 4-kanałową macierz z danymi z 4 czujników (są to kanały odpowiadające kolejno czujnikom: górny lewy-TL, górny prawy-TR, dolny prawy-BR, dolny lewy-BL). Można wyznaczyć wartości wychyleń w kierunkach x i y na podstawie informacji z czterech czujników (&amp;lt;xr id=&amp;quot;fig:wbb&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;).:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;x=\frac{(TR+BR)-(TL+BL)}{TR+TL+BL+BR}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y=\frac{(TR+TL)-(BR+BL)}{TR+TL+BL+BR}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Należy pamiętać, że dane z czujników pochodzą z układu odniesienia deski Wii Board - zatem uzyskane wartości x i y mieszczą się w zakresie od -1 do 1. Aby uzyskać dane w cm trzeba przemnożyć współrzędne x i y przez odpowiednie czynniki:&lt;br /&gt;
[[Plik:wbb_axes.png|600px|thumb|center|&amp;lt;figure id=&amp;quot;fig:wbb&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Wii Balance Board z oznaczonymi płaszczyznami ML i AP. TR, TL, BR, BL ozanczają pozycje czterech czujników.]]&lt;br /&gt;
&lt;br /&gt;
Jednak w przypadku niektórych zadań należy jeszcze, przed wyznaczaniem x i y, odpowiednio wyciąć interesujące nas dane względem znaczników. Czynność tę wykonuje funkcja 'wii_cut_fragments', która zwraca listę obiektów 'smart_tags'. Liczba tych obiektów odpowiada liczbie zdarzeń z danym znacznikiem (dla stania swobodnego lista będzie miała tylko jeden element, natomiast dla wielokrotnych wychyleń będzie ich kilka). Każdy element na tej liście, posiada metodę 'get_samples' zwracającą dane w macierzy 7 kanałowej. W pierwszych 4 kanałach znajdują się dane z czujników TL,TR,BR,BL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
smart_tags = wii_cut_fragments(wbr_baseline, start_tag_name='ss_start', end_tags_names=['ss_stop'])&lt;br /&gt;
TL = smart_tags[0].get_samples()[0,:]&lt;br /&gt;
TR = smart_tags[0].get_samples()[1,:]&lt;br /&gt;
BR = smart_tags[0].get_samples()[2,:]&lt;br /&gt;
BL = smart_tags[0].get_samples()[3,:]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Znaczniki 'start_tag_name' oraz 'end_tags_names' dla poszczególnych pomiarów:&lt;br /&gt;
&lt;br /&gt;
* stanie swobodne oczy otwarte: 'ss_start', 'ss_stop'&lt;br /&gt;
* stanie swobodne oczy zamknięte: 'ss_oczy_start', 'ss_oczy_stop'&lt;br /&gt;
&lt;br /&gt;
* wychylenia szybkie bez informacji zwrotnej: 'szybkie_start', 'szybkie_stop'&lt;br /&gt;
* wychylenia &amp;quot;z przytrzymaniem&amp;quot; bez informacji zwrotnej: 'start', 'stop'&lt;br /&gt;
&lt;br /&gt;
* stanie swobodne jako kalibracja do zadań z informacją zwrotną: 'ss_start', 'ss_stop'&lt;br /&gt;
* wychylenia szybkie z informacją zwrotną: nie ma znaczników - ciągły zapis danych&lt;br /&gt;
* wychylenia &amp;quot;z przytrzymaniem&amp;quot; z informacją zwrotną: 'start_1', 'finish'&lt;br /&gt;
&lt;br /&gt;
Podczas wczytywania danych z informacją zwrotną interesujące nas informacje znajdują się w pliku z rozszerzeniem .game.tag. Zatem należy ustawić parametr 'tag_format' w wywołaniu funkcji read_file na 'game' (zamiast domyślnie ustawionego 'obci'). Znaczniki czasowe gry nie są zsynchronizowane z sygnałem, ponieważ gra uruchamiana jest w osobnym wątku, który nie ma możliwości komunikacji z multiplekserem. Z tego względu każdy znacznik zapisany w tym pliku posiada czas systemowy, który należy wyrównać względem pierwszej próbki w sygnale. Procedura ta została zaimplementowana w poniższej funkcji, którą należy wykonać przed przepróbkowaniem sygnału:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_helper&lt;br /&gt;
wbr_sway.mgr = analysis_helper.set_first_timestamp(wbr_sway.mgr)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dalsze kroki przygotowania danych do analizy wykonujemy tak samo. Dla przypadku wychyleń &amp;quot;z przytrzymaniem&amp;quot; obiekty w liście zwróconej przez funkcję 'wii_cut_fragments' odpowiadają kolejnym realizacjom zadania. Mają one jednak nieco inną strukturę. Oprócz metody 'get_samples()', za pomocą której tak jak poprzednio wczytamy dane z 4 czujników, posiadają również metody:&lt;br /&gt;
*'get_end_tag()' - zwraca strukturę, która w polu ['desc']['type'] przechowuje informację o tym czy zadanie zostało wykonane poprawnie (0-niepoprawnie, 1-poprawnie)&lt;br /&gt;
*'get_start_tag()' - zwraca strukturę, która w polu ['desc']['type'] przechowuje informację o kierunku wychylenia (pole 'direction', wartości: 'up','down','left','right') oraz o poziomie trudności zadania (pole 'level'). Aby wydobyć informację o kierunku wychylenia (analogicznie dla poziomiu trudności) można skorzystać z funkcji: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
eval(smart_tags[index].get_start_tag()['desc']['type'])['direction']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Informacje o poziomie trudności, poprawności wykonania zadania oraz kierunku będą potrzebne do podjęcia decyzji, które próby wykonania zadania będą brane do dalszej analizy. Interesują nas jedynie te poprawne o najwyższym poziomie trudności w każdym z kierunków. &lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--Dokumentacja funkcji klasy WBBReadManager (przy pomcy której wczytujemy dane. Korzysta ona z obiektu klasy ReadManager, która została zaprojektowana do wczytywania i segmentacji danych rejestrowanych przy pomocy systemu OpenBCI. Moduł &amp;lt;tt&amp;gt;obci.analysis.balance.wii_preprocessing&amp;lt;/tt&amp;gt; umożliwia dodatkowo przepróbkowanie oraz filtrację danych): &lt;br /&gt;
&lt;br /&gt;
*Przepróbkowanie danych&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr       - obiekt klasy WBBReadManager&lt;br /&gt;
# factor        - nowa_fs = fs / factor (int)&lt;br /&gt;
# pre_filter    - True/False w zależności czy ma być użyty filtr dolnoprzepustowy z częstością&lt;br /&gt;
#                 odcięcia: częstość próbkowania / 2&lt;br /&gt;
# use_filtfilt  - True/False w zależności czy ma być użyta procedura &lt;br /&gt;
#                 filtrowania filtfilt/lfilter (bool)&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca obiekt klasy WBBReadManager z przepróbkowanym sygnałem.&lt;br /&gt;
&lt;br /&gt;
factor = 2&lt;br /&gt;
pre_filter = False&lt;br /&gt;
use_filtfilt = True&lt;br /&gt;
&lt;br /&gt;
wbb_mgr = wii_downsample_signal(wbb_mgr, &lt;br /&gt;
                                factor, &lt;br /&gt;
                                pre_factor, &lt;br /&gt;
                                use_filtfilt)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Segmentacja danych&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr         - obiekt klasy WBBReadManager,&lt;br /&gt;
# start_tag_name  - nazwa znacznika określającego początek fragmentu,&lt;br /&gt;
# end_tags_names  - lista z nazwami znaczników określających koniec fragmentu.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca obiekt klasy SmartTagsManager.&lt;br /&gt;
&lt;br /&gt;
smart_tags = wii_cut_fragments(wbb_mgr,&lt;br /&gt;
                               start_tag_name='start', &lt;br /&gt;
                               end_tags_names=['stop'])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Filtracja danych&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr       - obiekt klasy  WBBReadManager&lt;br /&gt;
# cutoff_upper  - częstość odcięcia (float)&lt;br /&gt;
# order         - rząd filtru (int)&lt;br /&gt;
# use_filtfilt  - True/False w zależności, czy ma być użyta procedura &lt;br /&gt;
#                 filtrowania filtfilt/lfilter (bool)&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca obiekt klasy WBBReadManager z przefiltrowanym sygnałem.&lt;br /&gt;
&lt;br /&gt;
cutoff_upper = 20&lt;br /&gt;
order = 2&lt;br /&gt;
use_filtfilt = False&lt;br /&gt;
wbb_mgr = wii_filter_signal(wbb_mgr, &lt;br /&gt;
                            cutoff_upper, &lt;br /&gt;
                            order, &lt;br /&gt;
                            use_filtfilt)&lt;br /&gt;
&amp;lt;/source&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Analiza danych: stanie swobodne===&lt;br /&gt;
&lt;br /&gt;
W przypadku stania swobodnego z oczami zamkniętymi oraz otwartymi, studenci mają za zadanie wyznaczyć następujące wskaźniki posturograficzne:&lt;br /&gt;
&amp;lt;!-- (korzystając z funkcji zaimplentowanych w bibliotece &amp;lt;tt&amp;gt;obci.analysis.balance.wii_analysis&amp;lt;/tt&amp;gt;): --&amp;gt;&lt;br /&gt;
*położenie środka równowagi COP (''center of pressure'')&lt;br /&gt;
*maksymalne przemieszczenie względem położenia środka równowagi (w AP,ML oraz płaszczyźnie AP/ML),&lt;br /&gt;
*długość drogi względem położenia środka równowagi (w AP,ML oraz płaszczyźnie AP/ML),&lt;br /&gt;
*średnia prędkość przemieszczenia (w AP,ML oraz płaszczyźnie AP/ML),&lt;br /&gt;
*wskaźnik Romberga - stosunek różnicy długości drogi przy oczach zamkniętych i otwartych, do sumy długości drogi przy oczach zamkniętych i otwartych&lt;br /&gt;
&amp;lt;!--*95% powierzchnia ufności elipsy - powierzchnia elipsy, w której powinno zawierać się około 95% punktów drogi COP,&lt;br /&gt;
*RMS (''root mean square'') (w AP i ML).---&amp;gt;&lt;br /&gt;
Dokładny opis matematyczny wyżej wymienionych wskaźników znajduje się w pracy (Prieto, 1996). &lt;br /&gt;
&lt;br /&gt;
Należy również przedstawić na wykresie przebieg ruchu COP oddzielnie w płaszczyźnie AP, ML oraz w przestrzeni AP/ML.&lt;br /&gt;
&lt;br /&gt;
Dodatkowo studenci mają za zadanie przeprowadzić analizę rozkładu przestrzennego punktów statokinezjogramu. Statokinezjogramem lub posturogramem nazywamy wędrówkę COP w dwuwymiarowej płaszczyźnie podparcia. Kierunki na tej płaszczyźnie określa się jako AP (y) lub ML (x), przy czym ML oznacza wychylenia w płaszczyźnie czołowej (''medio-lateral''), a AP w płaszczyźnie strzałkowej (''anterio-posterior''). W celu przeprowadzenie takiej analizy, cały zakres zostaje podzielony na jednakowe komórki. Następnie obliczony zostaje histogram przestrzenny czasu przebywania w każdej z nich. Taki histogram pozwala ocenić, czy kontrola położenia referencyjnego COG (''center of gravity''), a tym samym pionowa orientacja ciała, jest prawidłowa. Wyznacznikiem prawidłowej kontroli jest histogram o skupionym rozkładzie i z wyraźnym maksimum. Upośledzenie kontroli objawia się tym, że histogram przestrzenny staje się rozmyty lub wyraźnie niesymetryczny (Błaszczyk, 2004).&lt;br /&gt;
&lt;br /&gt;
===Analiza danych: wychylenia dynamiczne===&lt;br /&gt;
&lt;br /&gt;
Oprócz wskaźników statycznych stabilności do oceny kontroli posturalnej wykorzystuje się również miary dynamiczne. Z punktu widzenia miar bezpośrednich, istotna jest ocena kontroli środka ciężkości ciała w czasie jego świadomego przemieszczania w wyznaczonym kierunku. W ramach pomiarów, studenci mieli za zadanie wykonać dwa rodzaje wychyleń (szybkie i &amp;quot;z przytrzymaniem&amp;quot;) w dwóch warunkach: bez informacji zwrotnej dla badanego oraz z informacją zwrotną dla badanego. Dla każdego z przypadków należy wyznaczyć następujące parametry:&lt;br /&gt;
&lt;br /&gt;
*położenie środka równowagi (dla warunku bez informacji zwrotnej będzie to COP ze stania swobodnego z oczami otwartymi, natomiast dla warunku z informacją zwrotną będzie to COP z sesji kalibracyjnej)&lt;br /&gt;
*wartość maksymalnego wychylenia (w określonym kierunku) względem położenia równowagi,&lt;br /&gt;
*wykresy składowych wychwiań względem położenia równowagi w płaszczyźnie AP, ML w zależności od czasu oraz wypadkowa trajektoria przemieszczeń COP (w dwuwymiarowej płaszczyźnie AP, ML).&lt;br /&gt;
&lt;br /&gt;
i zbadać czy informacja zwrotna wpływa na rezultaty badanego.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
*Błaszczyk J., Biomechanika kliniczna, PZWL, 2004&lt;br /&gt;
*Prieto T.E. et al., Measures of postural steadiness: differences between healthy young and elderly adults, IEEE Trans Biomed Eng, 1996, 43(9):956-66&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Przykładowe skrypty do analizy:&lt;br /&gt;
&lt;br /&gt;
*zadanie &amp;quot;stanie swobodne&amp;quot;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.analysis.balance.wii_read_manager import WBBReadManager&lt;br /&gt;
from obci.analysis.balance.wii_preprocessing import *&lt;br /&gt;
from obci.analysis.balance.wii_analysis import *&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as py&lt;br /&gt;
&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_baseline&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_helper&lt;br /&gt;
&lt;br /&gt;
from obci.acquisition import acquisition_helper&lt;br /&gt;
&lt;br /&gt;
FILE_PATH = '~/' #full path&lt;br /&gt;
FILE_NAME = 'wii_baseline_2015-03-03_20-51-48' #file name without extension&lt;br /&gt;
&lt;br /&gt;
def read_file(file_path, file_name, tag_format = 'obci'):&lt;br /&gt;
    file_name = acquisition_helper.get_file_path(file_path, file_name)&lt;br /&gt;
    wbb_mgr = WBBReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.' + tag_format + '.tag')&lt;br /&gt;
    return wbb_mgr&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    #load data&lt;br /&gt;
    wbb_mgr = read_file(FILE_PATH, FILE_NAME)&lt;br /&gt;
&lt;br /&gt;
    #add two additional (x, y) channels (computed from sensor values)&lt;br /&gt;
    wbb_mgr.get_x()&lt;br /&gt;
    wbb_mgr.get_y()&lt;br /&gt;
&lt;br /&gt;
    #estimate true sampling frequency value&lt;br /&gt;
    fs = analysis_baseline.estimate_fs(wbb_mgr.mgr.get_channel_samples('TSS'))&lt;br /&gt;
    wbb_mgr.mgr.set_param('sampling_frequency', analysis_baseline.estimate_fs(wbb_mgr.mgr.get_channel_samples('TSS')))&lt;br /&gt;
&lt;br /&gt;
    #preprocessing&lt;br /&gt;
    wbb_mgr = wii_downsample_signal(wbb_mgr, factor=2, pre_filter=True, use_filtfilt=True)&lt;br /&gt;
&lt;br /&gt;
    #extract fragments from standing task with eyes open&lt;br /&gt;
    smart_tags = wii_cut_fragments(wbb_mgr, start_tag_name='ss_start', end_tags_names=['ss_stop'])&lt;br /&gt;
    sm_x = smart_tags[0].get_channel_samples('x')&lt;br /&gt;
    sm_y = smart_tags[0].get_channel_samples('y')&lt;br /&gt;
    py.figure()&lt;br /&gt;
    print(wii_COP_path(wbb_mgr, sm_x, sm_y, plot=True))&lt;br /&gt;
    py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*zadanie &amp;quot;wychylenia bez informacji zwrotnej&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.analysis.balance.wii_read_manager import WBBReadManager&lt;br /&gt;
from obci.analysis.balance.wii_preprocessing import *&lt;br /&gt;
&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_baseline&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_helper&lt;br /&gt;
&lt;br /&gt;
from obci.acquisition import acquisition_helper&lt;br /&gt;
&lt;br /&gt;
FILE_PATH_LEFT = '' #full path&lt;br /&gt;
FILE_NAME_LEFT = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
FILE_PATH_RIGHT = '' #full path&lt;br /&gt;
FILE_NAME_RIGHT = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
FILE_PATH_DOWN = '' #full path&lt;br /&gt;
FILE_NAME_DOWN = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
FILE_PATH_UP = '' #full path&lt;br /&gt;
FILE_NAME_UP = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
def read_file(file_path, file_name, tag_format = 'obci'):&lt;br /&gt;
    file_name = acquisition_helper.get_file_path(file_path, file_name)&lt;br /&gt;
    wbb_mgr = WBBReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.' + tag_format + '.tag')&lt;br /&gt;
    return wbb_mgr&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    #load data from right sway task&lt;br /&gt;
    wbb_mgr_right = read_file(FILE_PATH_RIGHT, FILE_NAME_RIGHT)&lt;br /&gt;
&lt;br /&gt;
    #here should be preprocessing... &lt;br /&gt;
&lt;br /&gt;
    #extract fragments from sway task (right)&lt;br /&gt;
    smart_tags_quick = wii_cut_fragments(wbb_mgr_right, start_tag_name='szybkie_start', end_tags_names=['szybkie_stop'])&lt;br /&gt;
    x_fragments_quick = [i.get_channel_samples('x') for i in smart_tags_quick]&lt;br /&gt;
    y_fragments_quick = [i.get_channel_samples('y') for i in smart_tags_quick]&lt;br /&gt;
&lt;br /&gt;
    #extract fragments from sway&amp;amp;stay task (right)&lt;br /&gt;
    smart_tags_long = wii_cut_fragments(wbb_mgr_right, start_tag_name='start', end_tags_names=['stop'])&lt;br /&gt;
    x_fragments_long = [i.get_channel_samples('x') for i in smart_tags_long]&lt;br /&gt;
    y_fragments_long = [i.get_channel_samples('y') for i in smart_tags_long]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*zadanie &amp;quot;wychylenia z informacją zwrotną&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
from obci.analysis.balance.wii_read_manager import WBBReadManager&lt;br /&gt;
from obci.analysis.balance.wii_preprocessing import *&lt;br /&gt;
&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_baseline&lt;br /&gt;
from obci.exps.ventures.analysis import analysis_helper&lt;br /&gt;
&lt;br /&gt;
from obci.acquisition import acquisition_helper&lt;br /&gt;
&lt;br /&gt;
BASELINE_FILE_PATH = '' #full path&lt;br /&gt;
BASELINE_FILE_NAME = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
FILE_PATH = '' #full path&lt;br /&gt;
FILE_NAME = '' #file name without extension&lt;br /&gt;
&lt;br /&gt;
def get_baseline_points(file_path, file_name):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot; baseline area is a rectangle with parameters:&lt;br /&gt;
        center point: xc, yc,&lt;br /&gt;
        width:        2*xa,&lt;br /&gt;
        height:       2*yb.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    xa, ya, xb, yb, xc, yc  = analysis_baseline.calculate(file_path, file_name, show=False)&lt;br /&gt;
    return xa, ya, xb, yb, xc, yc&lt;br /&gt;
&lt;br /&gt;
def read_file(file_path, file_name, tag_format = 'game'):&lt;br /&gt;
    file_name = acquisition_helper.get_file_path(file_path, file_name)&lt;br /&gt;
    wbb_mgr = WBBReadManager(file_name+'.obci.xml', file_name+'.obci.raw', file_name + '.' + tag_format + '.tag')&lt;br /&gt;
    return wbb_mgr&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    xa, ya, xb, yb, xc, yc = get_baseline_points(BASELINE_FILE_PATH, BASELINE_FILE_NAME)&lt;br /&gt;
    wbb_mgr = read_file(FILE_PATH, FILE_NAME)&lt;br /&gt;
    wbb_mgr.mgr = analysis_helper.set_first_timestamp(wbb_mgr.mgr) #adjusting tags to signal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moduł &amp;lt;tt&amp;gt;obci.analysis.balance.wii_analysis&amp;lt;/tt&amp;gt; umożliwia wyznaczenie podstawowych wskaźników posturograficznych z zadania eksperymentalnego &amp;quot;stanie swobodne&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*Maksymalna wartość wychwiań w AP i ML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# x  - macierz reprezentująca kanał x,&lt;br /&gt;
# y  - macierz reprezentująca kanał y.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# max_sway  - maksymalne wychwianie (float),&lt;br /&gt;
# max_AP    - maksymalne wychwianie w kierunku AP (float), &lt;br /&gt;
# max_ML    - maksymalne wychwianie w kierunku ML (float).&lt;br /&gt;
&lt;br /&gt;
max_sway, max_AP, max_ML = wii_max_sway_AP_MP(x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Średnia wartość wychwiań COP od punktu (0,0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# x  - macierz reprezentująca kanał x,&lt;br /&gt;
# y  - macierz reprezentująca kanał y.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# cop         - średnią wartość wychwiań do punktu (0, 0) (float),&lt;br /&gt;
# mean_y_COP  - średnią wartość wychwiań do punktu (0, 0) w AP (float),&lt;br /&gt;
# mean_x_COP  - średnią wartość wychwiań do punktu (0, 0) w  ML (float).&lt;br /&gt;
&lt;br /&gt;
mean_COP, mean_y_COP, mean_x_COP = wii_mean_COP_sway_AP_ML(x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Długość drogi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr  - obiekt klasy  WBBReadManager,&lt;br /&gt;
# x        - macierz reprezentująca kanał x,&lt;br /&gt;
# y        - macierz reprezentująca kanał y,&lt;br /&gt;
# plot     - True/False (opcjonalnie). &lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# path_length    - długość drogi COP (float),&lt;br /&gt;
# path_length_x  - długość drogi COP w ML (float),&lt;br /&gt;
# path_length_y  - długość drogi COP w AP (float).&lt;br /&gt;
&lt;br /&gt;
path_length, path_length_x, path_length_y = wii_COP_path(wbb_mgr, x, y, plot=False)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*RMS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# x  - macierz reprezentująca kanał x,&lt;br /&gt;
# y  - macierz reprezentująca kanał y.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# RMS     - (float),&lt;br /&gt;
# RMS_AP  - (float),&lt;br /&gt;
# RMS_ML  - (float).&lt;br /&gt;
&lt;br /&gt;
RMS, RMS_AP, RMS_ML = wii_RMS_AP_ML(x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*95% powierzchnia ufności elipsy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# x  - macierz reprezentująca kanał x,&lt;br /&gt;
# y  - macierz reprezentująca kanał y.&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# e  - 95% powierzchnia ufności elipsy (float).&lt;br /&gt;
&lt;br /&gt;
e = wii_confidence_ellipse_area(x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Średnia prędkość przemieszczenia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr  - obiekt klasy WBBReadManager&lt;br /&gt;
# x        - macierz reprezentująca kanał x,&lt;br /&gt;
# y        - macierz reprezentująca kanał y,&lt;br /&gt;
# plot     - True/False (opcjonalnie).&lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# mean_velocity - średnia prędkość przemieszczenia,&lt;br /&gt;
# velocity_AP   - średnia prędkość przemieszczenia w AP,&lt;br /&gt;
# velocity_ML   - średnia prędkość przemieszczenia w ML.&lt;br /&gt;
&lt;br /&gt;
mean_velocity, velocity_AP, velocity_ML = wii_mean_velocity(wbb_mgr, x, y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Procentowa wartość przebywania w czterech ćwiartkach układu współrzędnych&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
# Parametry wejściowe:&lt;br /&gt;
# wbb_mgr  - obiekt klasy  WBBReadManager,&lt;br /&gt;
# x        - macierz reprezentująca kanał x,&lt;br /&gt;
# y        - macierz reprezentująca kanał y,&lt;br /&gt;
# plot     - True/False (opcjonalnie). &lt;br /&gt;
&lt;br /&gt;
# Funkcja zwraca:&lt;br /&gt;
# top_right     - procentowa wartość przebywania w prawej górnej ćwiartce układu współrzędnych (float),&lt;br /&gt;
# top_left      - procentowa wartość przebywania w lewej górnej ćwiartce układu współrzędnych (float),&lt;br /&gt;
# bottom_right  - procentowa wartość przebywania w prawej dolnej ćwiartce układu współrzędnych (float),&lt;br /&gt;
# bottom_left   - procentowa wartość przebywania w lewej dolnej ćwiartce układu współrzędnych (float).&lt;br /&gt;
&lt;br /&gt;
top_right, top_left, bottom_right, bottom_left = wii_get_percentages_values(wbb_mgr, x, y, plot=False)&lt;br /&gt;
&amp;lt;/source&amp;gt; --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Anna.chabuda</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Podr%C4%99cznik_u%C5%BCytkownika_systemu_do_bada%C5%84_dost%C4%99pnego_w_laboratorium_EEG_Wydzia%C5%82u_Fizyki_Uniwersytetu_Warszawskiego&amp;diff=7261</id>
		<title>Podręcznik użytkownika systemu do badań dostępnego w laboratorium EEG Wydziału Fizyki Uniwersytetu Warszawskiego</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Podr%C4%99cznik_u%C5%BCytkownika_systemu_do_bada%C5%84_dost%C4%99pnego_w_laboratorium_EEG_Wydzia%C5%82u_Fizyki_Uniwersytetu_Warszawskiego&amp;diff=7261"/>
		<updated>2017-10-11T13:23:24Z</updated>

		<summary type="html">&lt;p&gt;Anna.chabuda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Brain4fuw''' - system do badań dostępny w laboratorium EEG Wydziału Fizyki Uniwersytetu Warszawskiego ==&lt;br /&gt;
Brain4fuw to pakiet programów użytkowych zapewniający kompleksową obsługę badań prowadzonych w ramach zajęć w laboratorium EEG Wydziału Fizyki Uniwersytetu Warszawskiego. Stanowi wygodny i intuicyjny w obsłudze system do projektowania eksperymentów, prowadzenia pomiarów oraz analizy zebranych danych. W skład Brain4fuw wchodzą:&lt;br /&gt;
&lt;br /&gt;
* program do projektowania eksperymentów - Psychopy&lt;br /&gt;
* program do analizy postawy - Kinect App&lt;br /&gt;
* program do badań posturograficznych - Wii App&lt;br /&gt;
* program do rejestracji oraz analizy sygału - Svarog&lt;br /&gt;
&lt;br /&gt;
Podręcznik użytkownika systemu znajduje się na stronie: http://laboratorium-eeg.braintech.pl/.&lt;br /&gt;
&lt;br /&gt;
Do systemu dołączona jest biblioteka ReadManager. Jest to biblioteka umożliwiająca analizę sygnału zapisanego w programie Svarog oraz przez moduł SignalSaver biblioteki BCI Framework. Jest ona dostępna w języku Python i Matlab. Dokumentacje biblioteki można znaleźć na stronie: http://moduly-analizy-danych.braintech.pl/index.html.&lt;/div&gt;</summary>
		<author><name>Anna.chabuda</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Podr%C4%99cznik_u%C5%BCytkownika_systemu_do_bada%C5%84_dost%C4%99pnego_w_laboratorium_EEG_Wydzia%C5%82u_Fizyki_Uniwersytetu_Warszawskiego&amp;diff=7260</id>
		<title>Podręcznik użytkownika systemu do badań dostępnego w laboratorium EEG Wydziału Fizyki Uniwersytetu Warszawskiego</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Podr%C4%99cznik_u%C5%BCytkownika_systemu_do_bada%C5%84_dost%C4%99pnego_w_laboratorium_EEG_Wydzia%C5%82u_Fizyki_Uniwersytetu_Warszawskiego&amp;diff=7260"/>
		<updated>2017-10-11T13:15:37Z</updated>

		<summary type="html">&lt;p&gt;Anna.chabuda: Utworzono nową stronę &amp;quot;Brain4fuw to pakiet programów użytkowych zapewniający kompleksową obsługę badań prowadzonych w ramach zajęć w laboratorium EEG Wydziału Fizyki Uniwersytetu War...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Brain4fuw to pakiet programów użytkowych zapewniający kompleksową obsługę badań prowadzonych w ramach zajęć w laboratorium EEG Wydziału Fizyki Uniwersytetu Warszawskiego. Stanowi wygodny i intuicyjny w obsłudze system do projektowania eksperymentów, prowadzenia pomiarów oraz analizy zebranych danych. W skład Brain4fuw wchodzą:&lt;br /&gt;
&lt;br /&gt;
* program do projektowania eksperymentów - Psychopy&lt;br /&gt;
* program do analizy postawy - Kinect App&lt;br /&gt;
* program do badań posturograficznych - Wii App&lt;br /&gt;
* program do rejestracji oraz analizy sygału - Svarog&lt;br /&gt;
&lt;br /&gt;
Podręcznik użytkownika systemu znajduje się na stronie: http://laboratorium-eeg.braintech.pl/.&lt;br /&gt;
&lt;br /&gt;
Do systemu dołączona jest biblioteka ReadManager. Jest to biblioteka umożliwiająca analizę sygnału zapisanego w programie Svarog oraz przez moduł SignalSaver biblioteki BCI Framework. Jest ona dostępna w języku Python i Matlab. Dokumentacje biblioteki można znaleźć na stronie: http://moduly-analizy-danych.braintech.pl/index.html.&lt;/div&gt;</summary>
		<author><name>Anna.chabuda</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Strona_g%C5%82%C3%B3wna&amp;diff=7259</id>
		<title>Strona główna</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Strona_g%C5%82%C3%B3wna&amp;diff=7259"/>
		<updated>2017-10-11T13:14:30Z</updated>

		<summary type="html">&lt;p&gt;Anna.chabuda: /* Strony dodatkowe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Materiały dydaktycznie dla studentów kierunku [http://fizykaxxi.fuw.edu.pl/zastosowania-fizyki-w-biologii-i-medycynie/ Zastosowania Fizyki w Biologii i Medycynie]=&lt;br /&gt;
&lt;br /&gt;
==Informatyka:==&lt;br /&gt;
 [[Plik:Pętla_while.svg|175px|right]]&lt;br /&gt;
* Technologia Informacyjna:&lt;br /&gt;
** Wykład    [[&amp;quot;Technologia informacyjna&amp;quot;]] &lt;br /&gt;
** Wykład [[Slajdy z wykładów dla optyki okularowej z roku 2015|&amp;quot;Technologie cyfrowe&amp;quot;]] (dla specjalności Optyka Okularowa)&lt;br /&gt;
** Ćwiczenia [[&amp;quot;Programowanie z Pythonem&amp;quot;]] (dla studentów Wydziału Fizyki) '''STARE'''&lt;br /&gt;
** Ćwiczenia [[&amp;quot;Programowanie z Pythonem3&amp;quot;]] (dla studentów Wydziału Fizyki) '''2017/18'''&lt;br /&gt;
** Ćwiczenia [[dla studentów Wydziału Biologii|&amp;quot;Technologia informacyjna&amp;quot;]] (dla studentów Wydziału Biologii)&lt;br /&gt;
* Programowanie dla Neuroinformatyków:&lt;br /&gt;
** Ćwiczenia [[&amp;quot;Programowanie dla Neuroinformatyków&amp;quot;]]&lt;br /&gt;
* Programowanie dla Fizyków Medycznych:&lt;br /&gt;
** Ćwiczenia [[&amp;quot;Programowanie dla Fizyków Medycznych&amp;quot;]]&lt;br /&gt;
* Bazy danych:&lt;br /&gt;
** Wykład    [[TI:WTBD|&amp;quot;Wstęp do technologii baz danych&amp;quot;]]&lt;br /&gt;
** Ćwiczenia [[TI:WTBD|&amp;quot;Wstęp do technologii baz danych&amp;quot;]]&lt;br /&gt;
* [[TI/Pracownia wykorzystania zasobów internetowych|Pracownia wykorzystania zasobów internetowych]]&lt;br /&gt;
==Matematyka:==&lt;br /&gt;
* Wykład    [[Matematyka I - FMiN lecture|Matematyka I]] (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Ćwiczenia [[Matematyka I - FMiN exercises|Matematyka I]] (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Ćwiczenia [[Matematyka I - OO exercises|Matematyka I]] (dla specjalności Optyka Okularowa)&lt;br /&gt;
 [[Plik:main_math.png|175px|right]]&lt;br /&gt;
* Wykład    [[Matematyka II - FMiN lecture|Matematyka II]] (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Ćwiczenia [[Matematyka II - FMiN exercises|Matematyka II]] (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
&lt;br /&gt;
==Fizyka:==&lt;br /&gt;
* Fizyka I:&lt;br /&gt;
** Wykład [[Fizyka I - FMiN lecture|Fizyka I]] - Mechanika (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Wykład [[Fizyka I - OO lecture|Fizyka I]] - Mechanika (dla specjalności Optyka Okularowa)&lt;br /&gt;
** Ćwiczenia [[Fizyka I - FMiN exercises|Fizyka I]] - Mechanika (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
* Fizyka II: [[Plik:main_phys.png|220px|right]]&lt;br /&gt;
** Wykład [[Fizyka II - OO lecture|Fizyka II]] - Elektrostatyka (dla specjalności Optyka Okularowa)&lt;br /&gt;
** Wykład [[Fizyka II - NI lecture|Fizyka II]] - Elektrostatyka (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Ćwiczenia [[Fizyka II - FMiN exercises|Fizyka II]] - Elektrostatyka (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Ćwiczenia [[Fizyka II - OO exercises|Fizyka II]] - Elektrostatyka (dla specjalności Optyka Okularowa)&lt;br /&gt;
* Fizyka III:&lt;br /&gt;
** Wykład [[Fizyka III - FMiN lecture|Fizyka III]] - Drgania i Fale (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Ćwiczenia [[Fizyka III - FMiN exercises|Fizyka III]] - Drgania i Fale (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
* Elektrodynamika:&lt;br /&gt;
** Ćwiczenia [[Ćwiczenia z elektrodynamiki dla neuroinformatyków|Elektrodynamika]] (dla specjalności Neuroinformatyka)&lt;br /&gt;
* Ćwiczenia [[Fizyka Promieniowania Jądrowego]]&lt;br /&gt;
* Ćwiczenia [[Fizyka atomów oraz cząstek i makrocząstek biologicznych]]&lt;br /&gt;
&lt;br /&gt;
==Chemia:==&lt;br /&gt;
* Wykład [[Podstawy chemii z elementami biochemii]]&lt;br /&gt;
* Wykład [[Chemia ogólna - lecture|Chemia ogólna]] &lt;br /&gt;
* Pracownia [[Chemia ogólna - workshop|Chemia ogólna]]&lt;br /&gt;
* Wykład [[Chemia organiczna]]&lt;br /&gt;
&lt;br /&gt;
==Biologia:==&lt;br /&gt;
 [[Plik:main_biol.jpg|220px|right]]&lt;br /&gt;
* Wykład [[Biologia komórki]] &lt;br /&gt;
* Wykład [[Histologia]]&lt;br /&gt;
* Pracownia [[Biologia molekularna]]&lt;br /&gt;
&lt;br /&gt;
==Biofizyka molekularna:==&lt;br /&gt;
* Wykład [[Metody Biofizyki Molekularnej - lecture|Metody Biofizyki Molekularnej]]&lt;br /&gt;
** Ćwiczenia [[Metody Biofizyki Molekularnej - exercises|Metody Biofizyki Molekularnej]]&lt;br /&gt;
*[[Pracownia podstaw biofizyki]] (dla specjalności Biofizyka molekularna)&lt;br /&gt;
* Pracownia [[Podstawy Biofizyki]]&lt;br /&gt;
* Pracownia [[Pracownia Biofizyki dla Zaawansowanych]]&lt;br /&gt;
*[[Pracownia biofizyki dla zaawansowanych]] (dla specjalności Biofizyka Molekularna)&lt;br /&gt;
&lt;br /&gt;
== Przedmioty specjalizacyjne: ==&lt;br /&gt;
* Wykład [[Obrazowanie Medyczne]]&lt;br /&gt;
&amp;lt;!--* Wykład [[Metody fizyczne w biologii i medycynie]]--&amp;gt;&lt;br /&gt;
* Wykład [[Ochrona radiologiczna]]&lt;br /&gt;
* Wykład [[Ochrona radilogiczna 2]]&lt;br /&gt;
&amp;lt;!--* Wykład [[Sygnały Bioelektryczne]]--&amp;gt;&lt;br /&gt;
* Wykład [[Elektroencefalografia]]&lt;br /&gt;
* Wykład [[Wnioskowanie Statystyczne - lecture|Wnioskowanie Statystyczne]] [[Plik:main_eeg2.png|220px|right]]&lt;br /&gt;
** Ćwiczenia [[Wnioskowanie Statystyczne - exercises|Wnioskowanie Statystyczne]]&lt;br /&gt;
* Wykład [[Analiza sygnałów - lecture|Analiza sygnałów]]&lt;br /&gt;
** Ćwiczenia [[Analiza sygnałów - exercises|Analiza sygnałów]]&lt;br /&gt;
* Wykład [[Uczenie maszynowe i sztuczne sieci neuronowe]]&lt;br /&gt;
** Ćwiczenia [[Uczenie maszynowe i sztuczne sieci neuronowe_cw|Uczenie maszynowe i sztuczne sieci neuronowe]]&lt;br /&gt;
* Warsztaty [[Metody diagnostyczne]]&lt;br /&gt;
* Warsztaty [[Warsztaty_z_Metod_Terapeutycznych|z Metod Terapeutycznych]] (dla specjalności Fizyka Medyczna)&lt;br /&gt;
* Warsztaty [[Modelowanie molekularne 2]]&lt;br /&gt;
&lt;br /&gt;
== Pracownie specjalistyczne: ==&lt;br /&gt;
 [[Plik:main_eeg1.jpg|220px|right]]&lt;br /&gt;
*[[INFORMACJE O OPROGRAMOWANIU DO PRACOWNI EEG i SYGNAŁÓW BIOELEKTRYCZNYCH]]&lt;br /&gt;
*[[Pracownia Sygnałów Bioelektrycznych]] (dla specjalności Neuroinformatyka)&lt;br /&gt;
*[[Pracownia EEG|Pracownia EEG]] (dla specjalności Neuroinformatyka)&lt;br /&gt;
*[[Laboratorium EEG|Laboratorium EEG]] (dla specjalności Neuroinformatyka)&lt;br /&gt;
*[[Nowe technologie w fizyce biomedycznej]] (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
*[[USG|Warsztaty z metod obrazowania ultradźwiękowego]]&lt;br /&gt;
&lt;br /&gt;
== Inne: == &lt;br /&gt;
[[Plik:Bookstack.svg|130px|right]]&lt;br /&gt;
&amp;lt;!--* Wykład [[&amp;quot;Własność intelektualna i ochrona danych osobowych&amp;quot;]]--&amp;gt;&lt;br /&gt;
* Pracownia [[&amp;quot;Wykorzystanie zasobów internetowych&amp;quot;]]&lt;br /&gt;
* Proseminarium [[Proseminarium licencjackie|licencjackie]]&lt;br /&gt;
&lt;br /&gt;
==Strony dodatkowe==&lt;br /&gt;
* [[Podręcznik użytkownika systemu do badań dostępnego w laboratorium EEG Wydziału Fizyki Uniwersytetu Warszawskiego]]: http://laboratorium-eeg.braintech.pl/ w tym:&lt;br /&gt;
** dokumentacja SVAROG: http://laboratorium-eeg.braintech.pl/svarog/index.html&lt;br /&gt;
** dokumentacja PSYCHOPY: http://laboratorium-eeg.braintech.pl/psychopy/index.html&lt;br /&gt;
** dokumentacja techniczna BCI framework: http://laboratorium-eeg.braintech.pl/openbci/&lt;br /&gt;
** dokumentacja i tutorial biblioteki ReadManager (Python, Matlab): http://moduly-analizy-danych.braintech.pl/&lt;br /&gt;
&lt;br /&gt;
* [[Instalacja i konfiguracja Kinect, Wiimote i Eyetrackera]]&lt;br /&gt;
* Strona [http://www.fuw.edu.pl/biblioteki.html Biblioteki Wydziału Fizyki]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Pracownia [[Pracownia Pokazów Wykładowych|Pokazów Wykładowych]]&lt;br /&gt;
* [[Tematy prac licencjackich]]&lt;br /&gt;
* AI, czyli [http://shanghailectures.org/lectures Sztuczna Inteligencja]&lt;br /&gt;
*[[dokumentacja SVAROG]]&lt;br /&gt;
*[[dokumentacja OBCI]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Anna.chabuda</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Podr%C4%99cznik_u%C5%BCytkownika_systemu_do_bada%C5%84_dost%C4%99pnego_w_laboratorium_studenckim&amp;diff=7258</id>
		<title>Podręcznik użytkownika systemu do badań dostępnego w laboratorium studenckim</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Podr%C4%99cznik_u%C5%BCytkownika_systemu_do_bada%C5%84_dost%C4%99pnego_w_laboratorium_studenckim&amp;diff=7258"/>
		<updated>2017-10-11T13:11:21Z</updated>

		<summary type="html">&lt;p&gt;Anna.chabuda: Utworzono nową stronę &amp;quot;Brain4fuw to pakiet programów użytkowych zapewniający kompleksową obsługę badań prowadzonych w ramach zajęć w laboratorium EEG Wydziału Fizyki Uniwersytetu War...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Brain4fuw to pakiet programów użytkowych zapewniający kompleksową obsługę badań prowadzonych w ramach zajęć w laboratorium EEG Wydziału Fizyki Uniwersytetu Warszawskiego. &lt;br /&gt;
Stanowi wygodny i intuicyjny w obsłudze system do projektowania eksperymentów, prowadzenia pomiarów oraz analizy zebranych danych. &lt;br /&gt;
W skład Brain4fuw wchodzą:&lt;br /&gt;
* program do projektowania eksperymentów - Psychopy&lt;br /&gt;
* program do analizy postawy - Kinect App&lt;br /&gt;
* program do badań posturograficznych - Wii App&lt;br /&gt;
* program do rejestracji oraz analizy sygału - Svarog&lt;br /&gt;
&lt;br /&gt;
Podręcznik użytkownika systemu znajduje się na stronie: http://laboratorium-eeg.braintech.pl/.&lt;br /&gt;
&lt;br /&gt;
Do systemu dołączona jest biblioteka Readmanager. Jest to biblioteka umożliwiająca analizę sygnału zapisanego w programie Svarog. Svarog oraz moduł SignalSaver biblioteki BCI Framework.&lt;br /&gt;
Jest ona dostępna w języku Python i Matlab. Dokumentacje biblioteki można znaleźć na stronie: http://moduly-analizy-danych.braintech.pl/index.html.&lt;/div&gt;</summary>
		<author><name>Anna.chabuda</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Strona_g%C5%82%C3%B3wna&amp;diff=7257</id>
		<title>Strona główna</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Strona_g%C5%82%C3%B3wna&amp;diff=7257"/>
		<updated>2017-10-11T13:03:55Z</updated>

		<summary type="html">&lt;p&gt;Anna.chabuda: /* Strony dodatkowe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Materiały dydaktycznie dla studentów kierunku [http://fizykaxxi.fuw.edu.pl/zastosowania-fizyki-w-biologii-i-medycynie/ Zastosowania Fizyki w Biologii i Medycynie]=&lt;br /&gt;
&lt;br /&gt;
==Informatyka:==&lt;br /&gt;
 [[Plik:Pętla_while.svg|175px|right]]&lt;br /&gt;
* Technologia Informacyjna:&lt;br /&gt;
** Wykład    [[&amp;quot;Technologia informacyjna&amp;quot;]] &lt;br /&gt;
** Wykład [[Slajdy z wykładów dla optyki okularowej z roku 2015|&amp;quot;Technologie cyfrowe&amp;quot;]] (dla specjalności Optyka Okularowa)&lt;br /&gt;
** Ćwiczenia [[&amp;quot;Programowanie z Pythonem&amp;quot;]] (dla studentów Wydziału Fizyki) '''STARE'''&lt;br /&gt;
** Ćwiczenia [[&amp;quot;Programowanie z Pythonem3&amp;quot;]] (dla studentów Wydziału Fizyki) '''2017/18'''&lt;br /&gt;
** Ćwiczenia [[dla studentów Wydziału Biologii|&amp;quot;Technologia informacyjna&amp;quot;]] (dla studentów Wydziału Biologii)&lt;br /&gt;
* Programowanie dla Neuroinformatyków:&lt;br /&gt;
** Ćwiczenia [[&amp;quot;Programowanie dla Neuroinformatyków&amp;quot;]]&lt;br /&gt;
* Programowanie dla Fizyków Medycznych:&lt;br /&gt;
** Ćwiczenia [[&amp;quot;Programowanie dla Fizyków Medycznych&amp;quot;]]&lt;br /&gt;
* Bazy danych:&lt;br /&gt;
** Wykład    [[TI:WTBD|&amp;quot;Wstęp do technologii baz danych&amp;quot;]]&lt;br /&gt;
** Ćwiczenia [[TI:WTBD|&amp;quot;Wstęp do technologii baz danych&amp;quot;]]&lt;br /&gt;
* [[TI/Pracownia wykorzystania zasobów internetowych|Pracownia wykorzystania zasobów internetowych]]&lt;br /&gt;
==Matematyka:==&lt;br /&gt;
* Wykład    [[Matematyka I - FMiN lecture|Matematyka I]] (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Ćwiczenia [[Matematyka I - FMiN exercises|Matematyka I]] (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Ćwiczenia [[Matematyka I - OO exercises|Matematyka I]] (dla specjalności Optyka Okularowa)&lt;br /&gt;
 [[Plik:main_math.png|175px|right]]&lt;br /&gt;
* Wykład    [[Matematyka II - FMiN lecture|Matematyka II]] (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Ćwiczenia [[Matematyka II - FMiN exercises|Matematyka II]] (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
&lt;br /&gt;
==Fizyka:==&lt;br /&gt;
* Fizyka I:&lt;br /&gt;
** Wykład [[Fizyka I - FMiN lecture|Fizyka I]] - Mechanika (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Wykład [[Fizyka I - OO lecture|Fizyka I]] - Mechanika (dla specjalności Optyka Okularowa)&lt;br /&gt;
** Ćwiczenia [[Fizyka I - FMiN exercises|Fizyka I]] - Mechanika (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
* Fizyka II: [[Plik:main_phys.png|220px|right]]&lt;br /&gt;
** Wykład [[Fizyka II - OO lecture|Fizyka II]] - Elektrostatyka (dla specjalności Optyka Okularowa)&lt;br /&gt;
** Wykład [[Fizyka II - NI lecture|Fizyka II]] - Elektrostatyka (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Ćwiczenia [[Fizyka II - FMiN exercises|Fizyka II]] - Elektrostatyka (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Ćwiczenia [[Fizyka II - OO exercises|Fizyka II]] - Elektrostatyka (dla specjalności Optyka Okularowa)&lt;br /&gt;
* Fizyka III:&lt;br /&gt;
** Wykład [[Fizyka III - FMiN lecture|Fizyka III]] - Drgania i Fale (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
** Ćwiczenia [[Fizyka III - FMiN exercises|Fizyka III]] - Drgania i Fale (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
* Elektrodynamika:&lt;br /&gt;
** Ćwiczenia [[Ćwiczenia z elektrodynamiki dla neuroinformatyków|Elektrodynamika]] (dla specjalności Neuroinformatyka)&lt;br /&gt;
* Ćwiczenia [[Fizyka Promieniowania Jądrowego]]&lt;br /&gt;
* Ćwiczenia [[Fizyka atomów oraz cząstek i makrocząstek biologicznych]]&lt;br /&gt;
&lt;br /&gt;
==Chemia:==&lt;br /&gt;
* Wykład [[Podstawy chemii z elementami biochemii]]&lt;br /&gt;
* Wykład [[Chemia ogólna - lecture|Chemia ogólna]] &lt;br /&gt;
* Pracownia [[Chemia ogólna - workshop|Chemia ogólna]]&lt;br /&gt;
* Wykład [[Chemia organiczna]]&lt;br /&gt;
&lt;br /&gt;
==Biologia:==&lt;br /&gt;
 [[Plik:main_biol.jpg|220px|right]]&lt;br /&gt;
* Wykład [[Biologia komórki]] &lt;br /&gt;
* Wykład [[Histologia]]&lt;br /&gt;
* Pracownia [[Biologia molekularna]]&lt;br /&gt;
&lt;br /&gt;
==Biofizyka molekularna:==&lt;br /&gt;
* Wykład [[Metody Biofizyki Molekularnej - lecture|Metody Biofizyki Molekularnej]]&lt;br /&gt;
** Ćwiczenia [[Metody Biofizyki Molekularnej - exercises|Metody Biofizyki Molekularnej]]&lt;br /&gt;
*[[Pracownia podstaw biofizyki]] (dla specjalności Biofizyka molekularna)&lt;br /&gt;
* Pracownia [[Podstawy Biofizyki]]&lt;br /&gt;
* Pracownia [[Pracownia Biofizyki dla Zaawansowanych]]&lt;br /&gt;
*[[Pracownia biofizyki dla zaawansowanych]] (dla specjalności Biofizyka Molekularna)&lt;br /&gt;
&lt;br /&gt;
== Przedmioty specjalizacyjne: ==&lt;br /&gt;
* Wykład [[Obrazowanie Medyczne]]&lt;br /&gt;
&amp;lt;!--* Wykład [[Metody fizyczne w biologii i medycynie]]--&amp;gt;&lt;br /&gt;
* Wykład [[Ochrona radiologiczna]]&lt;br /&gt;
* Wykład [[Ochrona radilogiczna 2]]&lt;br /&gt;
&amp;lt;!--* Wykład [[Sygnały Bioelektryczne]]--&amp;gt;&lt;br /&gt;
* Wykład [[Elektroencefalografia]]&lt;br /&gt;
* Wykład [[Wnioskowanie Statystyczne - lecture|Wnioskowanie Statystyczne]] [[Plik:main_eeg2.png|220px|right]]&lt;br /&gt;
** Ćwiczenia [[Wnioskowanie Statystyczne - exercises|Wnioskowanie Statystyczne]]&lt;br /&gt;
* Wykład [[Analiza sygnałów - lecture|Analiza sygnałów]]&lt;br /&gt;
** Ćwiczenia [[Analiza sygnałów - exercises|Analiza sygnałów]]&lt;br /&gt;
* Wykład [[Uczenie maszynowe i sztuczne sieci neuronowe]]&lt;br /&gt;
** Ćwiczenia [[Uczenie maszynowe i sztuczne sieci neuronowe_cw|Uczenie maszynowe i sztuczne sieci neuronowe]]&lt;br /&gt;
* Warsztaty [[Metody diagnostyczne]]&lt;br /&gt;
* Warsztaty [[Warsztaty_z_Metod_Terapeutycznych|z Metod Terapeutycznych]] (dla specjalności Fizyka Medyczna)&lt;br /&gt;
* Warsztaty [[Modelowanie molekularne 2]]&lt;br /&gt;
&lt;br /&gt;
== Pracownie specjalistyczne: ==&lt;br /&gt;
 [[Plik:main_eeg1.jpg|220px|right]]&lt;br /&gt;
*[[INFORMACJE O OPROGRAMOWANIU DO PRACOWNI EEG i SYGNAŁÓW BIOELEKTRYCZNYCH]]&lt;br /&gt;
*[[Pracownia Sygnałów Bioelektrycznych]] (dla specjalności Neuroinformatyka)&lt;br /&gt;
*[[Pracownia EEG|Pracownia EEG]] (dla specjalności Neuroinformatyka)&lt;br /&gt;
*[[Laboratorium EEG|Laboratorium EEG]] (dla specjalności Neuroinformatyka)&lt;br /&gt;
*[[Nowe technologie w fizyce biomedycznej]] (dla specjalności Fizyka Medyczna i Neuroinformatyka)&lt;br /&gt;
*[[USG|Warsztaty z metod obrazowania ultradźwiękowego]]&lt;br /&gt;
&lt;br /&gt;
== Inne: == &lt;br /&gt;
[[Plik:Bookstack.svg|130px|right]]&lt;br /&gt;
&amp;lt;!--* Wykład [[&amp;quot;Własność intelektualna i ochrona danych osobowych&amp;quot;]]--&amp;gt;&lt;br /&gt;
* Pracownia [[&amp;quot;Wykorzystanie zasobów internetowych&amp;quot;]]&lt;br /&gt;
* Proseminarium [[Proseminarium licencjackie|licencjackie]]&lt;br /&gt;
&lt;br /&gt;
==Strony dodatkowe==&lt;br /&gt;
* [[Podręcznik użytkownika systemu do badań dostępnego w laboratorium studenckim]]: http://laboratorium-eeg.braintech.pl/ w tym:&lt;br /&gt;
** dokumentacja SVAROG: http://laboratorium-eeg.braintech.pl/svarog/index.html&lt;br /&gt;
** dokumentacja PSYCHOPY: http://laboratorium-eeg.braintech.pl/psychopy/index.html&lt;br /&gt;
** dokumentacja techniczna BCI framework: http://laboratorium-eeg.braintech.pl/openbci/&lt;br /&gt;
** dokumentacja i tutorial biblioteki ReadManager (Python, Matlab): http://moduly-analizy-danych.braintech.pl/&lt;br /&gt;
&lt;br /&gt;
* [[Instalacja i konfiguracja Kinect, Wiimote i Eyetrackera]]&lt;br /&gt;
* Strona [http://www.fuw.edu.pl/biblioteki.html Biblioteki Wydziału Fizyki]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Pracownia [[Pracownia Pokazów Wykładowych|Pokazów Wykładowych]]&lt;br /&gt;
* [[Tematy prac licencjackich]]&lt;br /&gt;
* AI, czyli [http://shanghailectures.org/lectures Sztuczna Inteligencja]&lt;br /&gt;
*[[dokumentacja SVAROG]]&lt;br /&gt;
*[[dokumentacja OBCI]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Anna.chabuda</name></author>
		
	</entry>
</feed>