Skip to content

RF Post-Processing

This page is mainly for maintainers and operators.

If you already received a processed .nc file and only want to analyze the data, start in the tutorial track instead:

The active RF post-processing path is:

  • processing/parsing/extract_csi_from_smb_v2.py

It performs:

  1. scan each hostname folder for RF result files
  2. parse JSON, JSON-lines, text, YAML, CSV, or legacy archive formats
  3. recover experiment_id, cycle_id, hostname, pilot_phase, and pilot_amplitude
  4. apply the cable correction from client/ref-RF-cable.yml
  5. join with rover positions from server/record/data/exp-*-positions.csv
  6. drop consecutive duplicate-position cycles using grid.min_spacing / 5 per axis
  7. write one NetCDF dataset

The resulting CSI already includes cable-phase correction. It retains the reference-minus-received phase convention and receiver IQ amplitude scale. The parser does not apply the approximate RF phase-center height offset, remove multipath, or turn partial snapshots into complete arrays. Users must still apply the validity filters and follow Assumptions and Limitations for model-specific processing.

Useful commands:

Terminal window
python processing/parsing/extract_csi_from_smb_v2.py
python processing/parsing/extract_csi_from_smb_v2.py --max-measurements 10
python processing/parsing/extract_csi_from_smb_v2.py --output results/csi_custom.nc
python docs/scripts/export_notebook_movies.py

The resulting dataset contains:

  • coordinates: experiment_id, cycle_id, hostname
  • rover variables: rover_x, rover_y, rover_z, position_available
  • RF variables: csi_real, csi_imag, csi_available
  • dataset attributes with coverage counts, duplicate-position filter metadata, and last-measurement metadata

The recommended analysis workflow is now published as notebook-backed docs pages:

Example videos generated from the merged-dataset movie tutorial: