Skip to content

Physiological data alongside neuroimaging data

This guide explains how to create BIDS-compliant physiological recordings (*_physio.tsv.gz + *_physio.json) together with neural recordings following the BIDS specification.

1. Create the TSV file (compressed)

  • Save your physio data as a tab-separated values file.
  • Do not include a header line.
  • Each row = one time point
  • each column = one channel (pulse, respiration, trigger, etc.).
  • Compress the file with gzip:
gzip sub-01_task-rest_physio.tsv

2. Create the JSON sidecar (required fields)

Each *_physio.tsv.gz must have a matching *_physio.json with:

  • SamplingFrequency: sampling frequency in Hz
  • StartTime: time (s) relative to acquisition start (can be negative). Please make sure you align the physio recordings to the timings of the neural recording.
  • Columns: array listing column names in order
{
  "SamplingFrequency": 100.0,
  "StartTime": -22.345,
  "Columns": ["cardiac", "respiratory", "trigger"]
}

3. Add descriptions and units for each column

Example of a full *_physio.json:

{
  "SamplingFrequency": 100.0,
  "StartTime": -22.345,
  "Columns": ["cardiac", "respiratory", "trigger"],
  "cardiac": {
    "Description": "continuous pulse measurement",
    "Units": "mV"
  },
  "respiratory": {
    "Description": "respiration belt signal",
    "Units": "mV"
  },
  "trigger": {
    "Description": "scanner trigger signal",
    "Units": "a.u."
  }
}

4. Handle multiple sampling frequencies or recording devices

Note

This applies in case channels were acquired at different sampling rates or with different devices.

  • Split them into separate files
  • Distinguish with _recording-<label> in the filename
sub-01_task-rest_recording-cardiac_physio.tsv.gz
sub-01_task-rest_recording-respiratory_physio.tsv.gz

5. Place your files in the correct folder

Use the same structure as your imaging data:

sub-<label>/ses-<label>/<datatype>/
<matches>[_recording-<label>]_physio.tsv.gz
<matches>[_recording-<label>]_physio.json
  • <datatype>: func, anat, meg, eeg, ieeg, dwi, beh, etc.
  • <matches>: filename part matching the imaging file (e.g., sub-01_task-rest_run-1).
  • when to use the [_recording-<label>] you can find in section 4.