BIOBSS
A package for processing signals recorded using wearable sensors, such as Electrocardiogram (ECG), Photoplethysmogram (PPG), Electrodermal activity (EDA) and 3-axis acceleration (ACC).
Install / Use
/learn @obss/BIOBSSREADME
<div align="center"> BIOBSS </div>
<p align="center"> <a href="https://pypi.org/project/biobss"><img src="https://img.shields.io/pypi/pyversions/biobss" alt="Python versions"></a> <a href="https://pepy.tech/project/biobss"><img src="https://pepy.tech/badge/biobss" alt="downloads"></a> <a href="https://pypi.org/project/biobss"><img src="https://img.shields.io/pypi/v/biobss" alt="PyPI version"></a> <br> <a href="https://github.com/obss/biobss/blob/main/LICENSE"><img alt="License: MIT" src="https://img.shields.io/github/license/obss/biobss"></a> <a href="https://github.com/obss/biobss/actions"><img alt="Build status" src="https://github.com/obss/biobss/actions/workflows/ci.yml/badge.svg"></a> <a href="https://github.com/psf/black"><img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg"></a>A package for processing signals recorded using wearable sensors, such as Electrocardiogram (ECG), Photoplethysmogram (PPG), Electrodermal activity (EDA) and 3-axis acceleration (ACC).
BIOBSS's main focus is to generate end-to-end pipelines by adding required processes from BIOBSS or other Python packages. Some preprocessing methods were not implemented from scratch but imported from the existing packages.
Main features:
- Applying basic preprocessing steps (*)
- Assessing quality of PPG and ECG signals
- Extracting features for ECG, PPG, EDA and ACC signals
- Performing Heart Rate Variability (HRV) analysis using PPG or ECG signals
- Extracting respiratory signals from PPG or ECG signals and estimating respiratory rate (*)
- Calculating activity indices from ACC signals
- Generating and saving pipelines
(*): Not all methods were implemented from scratch but imported from existing packages.
The table shows the capabilites of BIOBSS and the other Python packages for physiological signal processing.
<table> <thead> <tr> <th style="text-align:center" colspan="2"><b>Functionality</b></th> <th style="text-align:center">BIOBSS</th> <th style="text-align:center">BioSPPy</th> <th style="text-align:center">HeartPy</th> <th style="text-align:center">HRV</th> <th style="text-align:center">hrv-analysis</th> <th style="text-align:center">pyHRV</th> <th style="text-align:center">pyPhysio</th> <th style="text-align:center">PySiology</th> <th style="text-align:center">Neurokit2</th> <th style="text-align:center">FLIRT</th> </tr> </thead> <tbody> <tr> <td align="center" colspan="2"><b>File reader</b></td> <td align="center"><b>✓</b></td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> </tr> <tr> <td align="center" colspan="2"><b>Sliding window</b></td> <td align="center"><b>✓</b></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> </tr> <tr> <td align="center" colspan="2"><b>Preprocessing</b></td> <td align="center"><b>✓</b></td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> <td align="center">✓</td> </tr> <tr> <td align="center" colspan="2"><b>Pipeline</b></td> <td align="center"><b>✓(*)</b></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> <td align="center"></td> </tr> <tr> <td align="center" style="text-align:center" rowspan="5"><b>Processing</b></td> <td align="center"><b>ECG</b></td> <td align="center"><b>✓</b></td> <td align="center">✓</td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> <td align="center">✓</td> <td align="center">✓</td> <td align="center"></td> </tr> <tr> <td align="center" style="text-align:center"><b>PPG</b></td> <td align="center"><b>✓</b></td> <td align="center">✓</td> <td align="center">✓</td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> <td align="center"></td> <td align="center">✓</td> <td align="center">✓</td> </tr> <tr> <td align="center" style="text-align:center"><b>IBI / RRI</b></td> <td align="center"><b>✓</b></td> <td align="center">✓</td> <td align="center">✓</td> <td align="center">✓</td> <td align="center">✓</td> <td align="center">✓</td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> <td align="center">✓</td> </tr> <tr> <td align="center" style="text-align:center"><b>EDA</b></td> <td align="center"><b>✓</b></td> <td align="center">✓</td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> <td align="center">✓</td> <td align="center">✓</td> <td align="center">✓</td> </tr> <tr> <td align="center" style="text-align:center"><b>ACC</b></td> <td align="center"><b>✓</b></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> </tr> <tr> <td align="center" style="text-align:center" rowspan="4"><b>Feature Extraction</b></td> <td align="center"><b>ECG</b></td> <td align="center"><b>✓</b></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center" style="text-align:center"><b>PPG</b></td> <td align="center"><b>✓</b></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> </tr> <tr> <td align="center" style="text-align:center"><b>EDA</b></td> <td align="center"><b>✓</b></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> </tr> <tr> <td align="center" style="text-align:center"><b>ACC</b></td> <td align="center"><b>✓</b></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center"></td> <td align="center">✓</td> </tr> </tbody> </table>(*): Pipeline module differs between the two packages. BIOBSS pipeline aims to provide a more flexible and customizable pipeline for the user.
Modified from Föll, Simon, et al. “FLIRT: A feature generation toolkit for wearable data.” Computer Methods and Programs in Biomedicine 212 (2021): 106461.
You can also read the blog post about BIOBSS.
<div align="left"> Preprocessing </div>
BIOBSS has modules with basic signal preprocessing functionalities. These include:
- Resampling
- Segmentation
- Normalization
- Filtering (basic filtering functions with commonly used filter parameters for each signal type)
- Peak detection
<div align="left"> Visualization </div>
BIOBSS has basic plotting modules specific to each signal type. Using the modules, the signals and peaks can be plotted using Matplotlib or Plotly packages.
<div align="left"> Signal Quality Assessment </div>
Signal quality assessment steps listed below can be used with PPG and ECG signals.
- Clipping detection
- Flatline detection
- Physiological checks
- Morphological checks
- Template matching
