Skip to main content

A pipeline for large scale deep-learning based wireless sensing tasks, including preprocess, training and eval

Project description

SDP TOML GitHub Welcome to Ask

SDP: Sensing Data Protocol for Scalable Wireless Sensing

SDP is a protocol-level abstraction and unified benchmark for reproducible wireless sensing.

SDP is not a new neural network, but a standardized protocol that unifies CSI representations for fair comparison. Instead of improving accuracy through hidden preprocessing tricks, SDP ensures that:

  • Every dataset follows the same sanitization rules
  • Every model receives the same canonical tensor
  • Every experiment is reproducible

SDP acts as a protocol-level middleware between raw CSI and learning models.


1. Quick Start

Step 1: Install Dependencies

Create a virtual env in conda or python, then run:

pip install wsdp

Step 2: Download Dataset

The size of elderAL is the smallest. Using it for a quick start is recommended.

Please download needed datasets from Our SDP Website or via command:

wsdp download elderAL ./data

elderAL can be changed to widar, gait, xrf55 or zte

In the folder of your project, please organize elderAL datasets in the structure below for extracting labels:

├── data
    ├── elderAL
    │   ├── action0_static_new
    │   │   ├── user0_position1_activity0
    │   │   ├── ...
    │   │
    │   ├── action1_walk_new
    │   ├── ...
    │
    ├── widar
    ├── gait
    ├── xrf55
    ├── zte

Step 3: Train and Evaluate

Function call:

Create a script, say script.py, then copy the code below and paste into the script:

from wsdp import pipeline

pipeline("./data/elderAL", "./output", "elderAL")

Then run this command in Terminal:

nohup python script.py >> output.log 2>&1 &

Command call:

No need to create scripts, just run this command in Terminal:

wsdp run ./data/elderAL ./output elderAL

When running, SDP will automatically:

  • Sanitize raw CSI
  • Convert it into canonical tensors
  • Train a baseline model
  • Evaluate performance

After running, besides output.log, check ./output, you can see:

  • best_model.pth
  • confusion_matrix.png

If you see these files, SDP is working correctly.


2. Modify & Research (1-Hour Challenge)

Goal: Modify the model and produce your own results

You can modify SDP at three levels:

  • Replace the model
  • Adjust preprocessing
  • Add new datasets

2.1 Plug in your own models

Create a file: custom_model.py then coding for free

All model receive input in the format: (Batch, Timestamp, Frequency, Antenna)

At the last line of your file, the following line should be added:

model = YourCustomModelClassName

For more information, please refer to default_model_template.py in this project

Then, run:

from wsdp import pipeline

pipeline("./data/elderAL", "./output", "elderAL", "custom_model.py")

or:

wsdp run ./data/elderAL ./output elderAL -m custom_model.py

2.2 Using your own dataset

That's what the process will do when you run with param: zte. Just make sure that your folder is organized in this way:

├── data
    ├── zte(or any name you like)
    │   ├── user0_pos0_action0
    │   │   ├── sample1
    │   │   ├── ...
    │   │
    │   ├── user0_pos0_action1
    │   ├── ...

and use ./data/zte as the input_path

2.3 Codebase Map (Where to modify)

if you want to go further:

  • models/ → Define or compare architectures
  • algorithms/ → Modify function for signal processing like denoising and calibration
  • datasets/ → Add a new dataset
  • readers/ → Add new logic for transforming a new format into CSIFrame
  • structure/CSIFrame → Define the format of your post-process data
  • processors/ → Adjust protocol logic (canonical projection, segmentation)

3. Understanding SDP (10-Min Read)

3.1 Why Do We Need SDP?

Wireless sensing research often suffers from:

  • Hardware-specific CSI formats
  • Inconsistent preprocessing pipelines
  • Unstable training results
  • Large performance variance across random seeds

As a result, models cannot be fairly compared.

SDP solves this problem at the protocol level, not the model level.

SDP projects raw CSI into a fixed canonical frequency grid (K=30), ensuring cross-hardware comparability.

3.2 The SDP Pipeline

Raw CSI
  ↓
Deterministic Sanitization
  ↓
Canonical Tensor Construction
  ↓
Deep Learning Model
  ↓
Prediction

3.3 Deterministic Sanitization

Raw CSI contains hardware distortions such as:

  • Phase offsets
  • Sampling time offsets
  • Noise fluctuations

SDP enforces deterministic calibration and denoising.

This guarantees:

  • The same raw CSI always produces the same cleaned tensor.
  • Reproducibility is no longer optional — it is enforced.

3.4 Canonical Tensor Construction

After sanitization, SDP constructs a Canonical CSI Tensor.

In the protocol definition, the tensor is expressed as:

$$X \in \mathbb{C}^{A \times K \times T}$$

Where:

  • A (Antenna): spatial dimension (Tx–Rx antenna pairs)
  • K (Frequency): canonical frequency resolution
  • T (Timestamp): temporal samples

3.4.1 Canonical Frequency Resolution

SDP projects all raw CSI into a fixed canonical frequency grid:

K = 30

This is a protocol constant, not a hyperparameter.

Regardless of the original hardware (e.g., 56 or 512 subcarriers), all CSI is interpolated into 30 standardized frequency bins.

This ensures cross-hardware comparability.

3.4.2 Deep Learning Input Format

For model training, the tensor is rearranged into:

(Batch, Timestamp, Frequency, Antenna)

This layout is video-like, where:

  • Timestamp → time dimension
  • Frequency × Antenna → spatial structure

This arrangement allows CNNs, Transformers, and RNNs to operate naturally.

3.5 Why This Matters

With SDP:

  • Inter-seed variance is significantly reduced
  • Model rankings become stable
  • Cross-dataset evaluation becomes possible

SDP does not define the model.It defines the rules of the experiment.


4. Supported Dataset:

Widar3.0

GaitID

XRF55

ElderAL-CSI

  • Dataset Link: ElderAL-CSI
  • CSI Shape: (Time, 512, 3, 3)
  • num of classes: 6
  • total num of used samples: 2,400

5. Benchmark Results

Mean Top-1 accuracy with 95% confidence intervals over five runs accuracy

Performance stability comparison between the baseline and SDP across five random seeds. Boxplots show the distribution of Top-1 accuracy, with scattered dots indicating individual runs. accuracy

Rank consistency heatmap across five random seeds on the ElderAL-CSI dataset. Colors indicate per-seed performance rank (1 = best), with overlaid Top-1 accuracy values. Full SDP exhibits stable top-ranked performance, while ablated variants show higher ranking variability. accuracy


6. Academic Reference

If you use SDP in your research, please site:

@misc{zhang2026sdpunifiedprotocolbenchmarking,
      title={SDP: A Unified Protocol and Benchmarking Framework for Reproducible Wireless Sensing}, 
      author={Di Zhang and Jiawei Huang and Yuanhao Cui and Xiaowen Cao and Tony Xiao Han and Xiaojun Jing and Christos Masouros},
      year={2026},
      eprint={2601.08463},
      archivePrefix={arXiv},
      primaryClass={eess.SP},
      url={https://arxiv.org/abs/2601.08463}, 
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wsdp-0.1.2.tar.gz (25.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wsdp-0.1.2-py3-none-any.whl (28.4 kB view details)

Uploaded Python 3

File details

Details for the file wsdp-0.1.2.tar.gz.

File metadata

  • Download URL: wsdp-0.1.2.tar.gz
  • Upload date:
  • Size: 25.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for wsdp-0.1.2.tar.gz
Algorithm Hash digest
SHA256 12a506b2b2ecb2f77633c8dedfa142f452ddd885b14a4baf48b5d30cbf53d73e
MD5 1909220a6317873d6b4d31980056a682
BLAKE2b-256 71ce89fa47563eea67de804bf72a2a2b92eddd7d71252eab985ad2f2ada26e52

See more details on using hashes here.

File details

Details for the file wsdp-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: wsdp-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 28.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for wsdp-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 73dc6b40726cec825ab7fdffd60ea57dc165c4f84cd8e99dc332c5754e9100f2
MD5 ada960106626f6e0e0289b25c20e711e
BLAKE2b-256 36fd81f0e74a4b1b32ff59379f1a3caac0f9d47b20acddff68b1aa7c9443d468

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page