DOI: 10.5281/zenodo.15831903
title: The ErgoBP dataset: Invasive Blood Pressure with Multimodal Physiological Signals During Ergometer Exercise Dataset

description: Creators: Schjerven, Filip Emil (Data curator) & Steffensen, Torjus Lines (Data curator, Data collector) & Lindseth, Frank (supervisor) & Flade, Hans Martin (Data collector) & Kirkeby-Garstad, Idar (Data collector, supervisor).Version 1.0

Note:This document contains an abbreviated description of the dataset content and is meant for practical utility. A complete dataset descriptor has been accepted and will feature in IEEE Data Descriptions (Jan, 2026). An "Early access"-version is available with Digital Object Identifier (DOI): 10.1109/IEEEDATA.2025.3650442

License:

Copyright © 2025 Filip Emil Schjerven & Torjus Lines Steffensen, Frank Lindseth, Hans Martin Flade, and Idar Kirkeby-Garstad. This dataset is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License (CC BY-NC 4.0). You are free to share and adapt the material for non-commercial purposes, provided appropriate credit is given.

Citation guideline (to be updated)

Appropriate credit can be provided by including citations for the dataset (listed to the right) as well as the dataset descriptor:

F. E. Schjerven, T. L. Steffensen, F. Lindseth, H. M. Flade, and I. Kirkeby-Garstad, “Descriptor: Invasive Blood Pressure with Multimodal Physiological Signals During Ergometer Exercise Dataset (ErgoBP),” IEEE Data Descr., pp. 1–10, 2026, doi: 10.1109/IEEEDATA.2025.3650442.

General description: 

What does this dataset contain?

The dataset contains data from 25 individuals conducting variable intensity exercise on an ergometer bike in two different positions. During the study, invasive arterial blood pressure (ABP), acceleration ballistocardiography, tonometry, photoplethysmography (PPG), electrocardiography (ECG) were recorded. In total, the dataset contains approximately 26 hours of time-series data, i.e., 1 hour per person, with 50 % captured during active exercise and 50 % during the resting phases before, during, and after the exercise.

Only tonometry and accelerometry was recorded throughout the study without interruption. ABP and PPG was recorded in sessions lasting from 30 seconds to 22 minutes, with a median of 2 minutes, with a minor pause between sessions. ECG was only recorded intermittently, and is only available for 18 % of the data, albeit evenly distributed across participants and exercise intensities.

Anything else?

In addition to the dataset, we have included an auxiliary table of metadata, with a proposed segmentation of the data into waveforms and associated metrics calculated for these. Example-scripts in Python are provided for showing how the metadata can be used to extract waveforms of high-quality following our suggested segmentation. Additional code-snippets are provided showing how the data can be imported to Python, R, and Matlab, with additional code-snippets showing how the data can be exported to other fileformats suitable for analysis tools, e.g., such as SAS or Excel.

File overview



Synchronized data is provided in folders named '01', '02', ..., '24', one for each participant.

The unfiltered and synchronized tonometry signals are provided within the subfolder 'unfilt_ton_data'.

The complete and unsynced accelerometry and tonometry signals are provided as one file each within the subfolder 'unsynced_data'.

Example scripts are provided in the subfolder 'scripts'.

The metadata is provided in a Parquet file named 'metadata_table.parquet'.


All files were saved using the Parquet file format to facilitate cross-platform use. 

- Filenames: Each filename is formatted '*ID*_file_*XX*_*TIME1*_to_*TIME2*.parquet' with ID being the participant ID, XX an arbitrary increasing file counter, and TIME1 and TIME2 being the start and stop time of the recording in HHMMSS as given within the files timestamp-index.   - Anonymized: The timestamp-index was anonymized, with the initial recording datetime to 1970-01-01 00:00:00 / Posix(0) simply to make the index work nicely across platforms.   - ECG: Files with ECG signals have an additional column named 'ecg'. 

 Column descriptions of data and metadata files






File



Column



Type



Description





Synchronized data



‘abp’



float



Recorded ABP values.





‘ppg’



Recorded PPG values.





‘acc_<x|y|z>’



Recorded accelerometry values for physical axis (x|y|z). 





‘tonom_<1|2|3|4>’



Recorded tonometry values, channels 1-4, filtered.





‘ecg’



If recorded in session, ECG values.





Complete BCG without gaps



‘acc_<x|y|z>’



Recorded accelerometry values for physical axis <x|y|z>, without gaps. 

 





Complete tonometry unfiltered without gaps



‘tonom_<1|2|3|4>’



Recorded tonometry values, channels 1-4, unfiltered and without gaps.





Unfiltered, synced tonometry



‘unfiltered_tonom_<1|2|3|4>’



Recorded tonometry values, channels 1-4, unfiltered, synced.





‘padding’



boolean



Denotes datapoints that were added as padding upon the original data.





Metadata table



‘situ_label’



object/string



String labels denoting resting or exercise situation.





‘id’



Participant id.





‘file_id’



Filename without “.parquet”. 





‘abp_start_time’



datetime



The index/timestamp of the first datapoint (abp_idx_start) in the proposed ABP waveform segment





‘<datatype>_idx_<start|end>’



integer



Index/timestamp of first (:start) or last (:end) datapoint in proposed segment for that datatype.





‘<datatype>_cross_corr_short’



float



The cross-correlation with its associated ABP segment, calculated only for tonometry datatypes.





‘<datatype>_hr’



Heart rate (beats / min)





‘<datatype>_acf_corr_short’



The Pearson correlation of the segment with earlier segments, i.e., those seen between 0.66 and 3 seconds earlier.  





‘sbp'



Systolic Blood Pressure (SBP), calculated as the maximal value occurring in the first 300 milliseconds of the proposed ABP segment.





‘map’



Mean Arterial Pressure (MAP), calculated as the average value of the proposed ABP segment.





‘dbp’



Diastolic Blood Pressure (DBP), calculated as the minimal value occurring in the last 300 milliseconds of the proposed ABP segment.





‘baseline_<supine|sr>’



boolean



Boolean denoting the 10 minutes prior to exercise in the supine (:supine) and semi-recumbent (:sr) position.





 

Notes:

If any information within the dataset is found that may identify any of the participants contributing data, please notify the dataset creators immediately. The associated metadata was calculated only for the synchronized data in 1).

- Missing values and gaps of > 15 ms without recorded sensor values have been marked as NaN.

- ECG & tonometry was sampled at 500 Hz, PPG & ABP at 125 Hz and accelerometry at 900 Hz. All were resampled to 500 Hz common timestamps using linear interpolation.

- Failed segmentations, e.g. due to signal corruption, have been given a placeholder of length 50 (‘<datatype>_idx_start - <datatype>_idx_end’, 0.1 s at 500 Hz) that overlaps with the preceding waveform.

- Condition labels ( post_exercise_rest_sr_1 + post_exercise_rest_sr_2 + [supine / semi-recumbent] x [0 W / 50 W / 100 W / 150 W] ) in column "situ_label" in the metadata were recorded manually. 

Ethics

The study protocol was reviewed and pre-approved by the Regional Committee for Medical Ethics Central Norway (REK), application number 62226. The use of an experimental medical device was approved by the Norwegian Medicines Agency (reference 21/06743). The study was pre-registered with ClinicalTrials.gov with identifier NCT05008133. All participants gave written informed consent and agreed to data sharing; explicit consent was given to openly disseminate study data. Publication of this dataset was reviewed and approved by the NTNU data protection office and REK.

Scripts

Loading the data  

R:



require("arrow")
df = read_parquet(**PATH_TO_FILE**)




Python:

import pandas as pd
df = pd.read_parquet(**PATH_TO_FILE**)


MATLAB:

df = parquetread(**PATH_TO_FILE**)

Exporting the data into other formats

Files were originally assembled into Panda DataFrames. If other formats are desirable, e.g., for Excel, STATA, SAS, we recommend importing into a Pandas DataFrame object and rewriting the file using Pandas API calls in Python, see: https://pandas.pydata.org/pandas-docs/stable/reference/io.html

Example: Exporting to Excel-native format

import openpyxl  ## Required for .to_excel(...) 
import pandas as pd

df = pd.read_parquet(**PATH_TO_FILE**)
df.to_excel(**NEW_PATH_TO_FILE**)

Examplescripts

Three Python-files have been included to showcase pracical usage of the data set in combination with the metadata:



Ex_script_1.py - Extracting and plotting of a single ABP waveform

Ex_script_2.py - Using the metadata to 1) determine which tonometry channels to use, 2) derived indices of waveforms using quality indicators for ABP, PPG, and tonometry, 3) extracting the data and viewing their associated metadata, 4) plotting metadata measures, and 5) plotting the initial 100 waveforms which had acceptable quality for all datatypes.

auxiliary_functions.py - Auxiliary script functions used in examples.


Simply run 'python scripts\ex_script_X.py' from a CLI if the unzipped file is the current working directory. Optionally, a path to the unzipped file can be provided, e.g., 'python scripts\ex_script_X.py "C:\Users\user1\Downloads\main"'.

 

 

Changelog:

Jan 8th 2026: Changed title, added citation information, and changed the ethics statement to correspond to the dataset descriptor.