PortiloopDemo / README.md
Milo Sobral
Fixed readme
dfbb81f
metadata
title: Portiloop Demo
emoji: 💤
colorFrom: blue
colorTo: grey
sdk: gradio
sdk_version: 3.12.0
app_file: portiloop/src/demo/demo.py
pinned: false

Portiloop software

This software works with the Coral implementation of the Portiloop EEG closed-loop stimulation device.

It enables controlling the Portiloop from a simple Graphical User Interface (GUI).

Quick links

Usage:

The Portiloop GUI is a web-based interface running as a jupyter server.

  • Connect to the Portiloop WiFi network.
  • Open your favorite web browser
  • Enter the following address: 192.168.0.1:9000

You should now be connected to the jupyter server.

If the jupyter notebook is not yet created:

  • Hit New and select Python 3.

This creates a jupyter notebook, in which you can simply paste and execute te following:

from portiloop.capture import Capture

cap = Capture()

When the jupyter notebook is created:

You can open the notebook and simply execute the cell.

The GUI now looks like this:

gui

Channels:

The Channels pannel enables you to configure each electrode:

  • disabled: the electrode is not used
  • simple: the electrode is simply used to measure signal (not recommended)
  • with bias: the electrode is used to measure signal and to compute a bias ("ground") signal
  • bias out: the electrode is used to output the bias ("ground") signal

General controls:

  • Freq is the desired sampling rate
  • Time is the maximum duration of the experiment (you can also stop the experiment manually)
  • Recording is the name of the .edf output file if you wish to record the signal locally
  • Tick Filter to enable the online filtering pipeline
  • Tick Detect to enable the online detection pipeline
  • Tick Stimulate to enable the online stimulation pipeline
  • Tick Record EDF to record the signal in the file designated in Recording
  • Tick Stream LSL to broadcast the signal on the local network via LSL
  • Tick Display to display the signal in the GUI
  • Threshold enables customizing the optional detection threshold from the GUI (e.g., for classifiers)
  • The Clock widget lets you select the sampling method:
    • Coral sets the ADS1299 sampling rate to twice your target sampling rate, and uses the Coral Real-Time clock to stick to your target sampling rate
    • ADS sets the ADS1299 sampling rate to the closest compatible to your target sampling rate and uses the ADS interrupts

Custom Filtering

The Filtering section lets you customize the filtering pipeline from the GUI.

  • The FIR filter switch lets you select between the default low-pass FIR filter (used in the Portiloop paper), or customize this filter according to your needs (FIR order and FIR cutoff)
  • Polyak mean, Polyak std and Epsilon let you customize the online standardization pipeline, which also acts as a high-pass filter

Capture

The Capture switch lets you start and stop the experiment at any point in time

Note: once the experiment is started, all widgets are deactivated until you stop the experiment.

Installation:

Follow these instruction if the software is not readily installed on your Portiloop device.

Install the library:

(Requires python 3)

Install the following libraries from apt to avoid issues:

  • sudo apt install python3-numpy
  • sudo apt install python3-scipy
  • sudo apt install python3-pycoral
  • Clone this repository on the Coral board
  • cd to he root of the repository where the setup.py file is located
  • Execute pip3 install -e .

Setup the Coral board as a wifi access point

You can find instructions here to set Linux as a WiFi access point.

Setup a jupyter server:

  • On your Portiloop device, execute pip3 install notebook
  • Generate a jupyter password and copy the result:
from notebook.auth import passwd
passwd()
  • Execute jupyter notebook --generate-config
  • cd to the .jupyter folder and edit jupyter_notebook_config.py
  • Find the relevant lines, and uncomment them while setting the following values:
    • c.NotebookApp.ip = '*'
    • c.NotebookApp.open_browser = False
    • c.NotebookApp.password = u'your_generated_password_here'
    • c.NotebookApp.port = 9000

Setup a service for your jupyter server to start automatically:

  • cd /etc/systemd/system
  • create an empty file named notebook.service and open it.
  • paste the following and save:
[Unit]
Description=Autostarts jupyter server

[Service]
User=mendel
WorkingDirectory=~
ExecStart=jupyter notebook
Restart=always

[Install]
WantedBy=multi-user.target
  • Execute sudo systemctl daemon-reload
  • Execute sudo systemctl start notebook.service
  • Check that your service is up and running: sudo systemctl status notebook.service