Laboratorium EEG/Wprowadzenie do syg online

Z Brain-wiki
Wersja z dnia 17:15, 27 lut 2021 autorstwa Jarekz (dyskusja | edycje) (Utworzono nową stronę "=== Sygnał testowy === Do zabawy w dalszych częściach zajęć przyda nam się jakiś sygnał testowy. Dla ustalenia uwagi niech będzie to suma trzech sinusoid, niec...")
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)

Sygnał testowy

Do zabawy w dalszych częściach zajęć przyda nam się jakiś sygnał testowy. Dla ustalenia uwagi niech będzie to suma trzech sinusoid, nieco zaszumiona generowana przez poniższy kod:

import scipy.signal as ss
import numpy as np
import matplotlib.pyplot as plt

Fs = 256
T = 5
t = np.arange(0,T,1/Fs)
f0 = 10
f1 = 17
f2 = 23
x = (np.sin(2*np.pi*f0*t) +
     np.sin(2*np.pi*f1*t ) +
     np.cos(2*np.pi*f2*t))
xn = x + np.random.randn(len(t)) * 0.08
plt.plot(xn)
plt.show()


Buforowanie: kolejka FIFO

W niektórych analizach wygodnie mieć fragment sygnału, który zawiera aktualnie otrzymane ze sterownika próbki sygnału wraz z pewnąliczbą poprzednich próbek. Do tego celu przydatna jest kolejka typu first-in-first-out (FIFO).

Poroszę zaimplementować i zilustrować działanie kolejki FIFO, o długości 'N_probek'


Filtrowanie online

Ćwiczenie: Wykorzystanie pomiaru EMG do sterowania on-line

Przykładowy fragment kodu example.py umożliwiający odbieranie sygnału on line w pythonie przedstawiony jest poniżej.

from obci_cpp_amplifiers.amplifiers import TmsiCppAmplifier
import numpy as np
amps = TmsiCppAmplifier.get_available_amplifiers('usb')
amp = TmsiCppAmplifier(amps[0])

amp.sampling_rate = 512

amp.start_sampling()
gains = np.array(amp.current_description.channel_gains)
offsets = np.array(amp.current_description.channel_offsets)

def samples_to_microvolts(samples):  # z jednostek wzmacniacza do mikrowoltów
    return samples * gains + offsets
    
while True:
    # 16 próbek w pakiecie, nieodebrane próbki się bufurują i można odebrać je później
    packet = amp.get_samples(16)
    print(samples_to_microvolts(packet.samples))
    print(packet.ts[0])
    print(packet.samples.shape, amp.current_description.channel_names)

Aby wykonać go w terminalu należy uruchomić polecenie,

/opt/braintech/bin/python3 example.py
Uwaga
aby zadziałało trzeba wyłączyć SVAROGa.

Proszę przetestować czy po podłączeniu wzmacniacza i uruchomieniu tego skryptu pojawiają się w terminalu wartości próbek.