Radio map construction via generative diffusion models — UNIC Lab, Xidian University
RadioDiff — The foundational diffusion model for radio map construction.
📄 Paper | 💻 Code |
RadioDiff-k² — PINN-enhanced diffusion guided by the Helmholtz equation.
📄 Paper | 💻 Code |
iRadioDiff — Indoor radio map construction with physical information integration.
📄 Paper | 💻 Code |
RadioDiff-Turbo — Efficiency-enhanced RadioDiff for accelerated inference.
📄 Paper |
RadioDiff-Flux — Adaptive reconstruction under dynamic environments and base station location changes.
📄 Paper |
RadioDiff-3D — 3D radio map construction with the UrbanRadio3D dataset.
📄 Paper | 💻 Code |
RadioDiff-FS — Few-shot learning for radio map construction with limited measurements.
📄 Paper | 💻 Code |
RadioDiff-Inverse — Sparse measurement-based radio map recovery for ISAC applications.
📄 Paper | 💻 Code |
RadioDiff-Loc — Sparse measurement-based NLoS localization using diffusion models.
📄 Paper |
📚 For a comprehensive categorized overview of radio map research, visit Awesome-Radio-Map-Categorized.
This is the code of "iRadioDiff: Physics Informed Diffusion Model for Effective Indoor Radio Map Construction and Localization" accepted by the IEEE ICC 2026.
- install torch
We have verified that the project can run with Python 3.10, PyTorch 2.2.0, torchvision 0.17.0, torchaudio 2.2.0, and CUDA 12.1.
conda create -n radiodiff python=3.10
conda activate radiodiff
conda install pytorch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 pytorch-cuda=12.1 -c pytorch -c nvidia
- install other packages.
pip install -r requirement.txt
- prepare accelerate config.
accelerate config # HOW MANY GPUs YOU WANG TO USE.
We used the Indoor Radio Map Dataset dataset for model training and testing.
-
Before training or inference, you should first generate the boundary maps and place them under
BoundaryMapsin the dataset root directory. This step is required because the dataloader reads boundary files from$ICASSP2025_Dataset/BoundaryMapswith filenames in the formatboundary_<original_input_filename>.png. -
You can generate them with
generate_boundary.py:
python generate_boundary.py --input-dir ./ICASSP2025_Dataset/Inputs/Task_1_ICASSP --positions-dir ./ICASSP2025_Dataset/Positions --output-dir ./ICASSP2025_Dataset/BoundaryMaps- The data structure should look like:
|-- $ICASSP2025_Dataset
| |-- Input
| |-- |-- Task_1_ICASSP
| |-- |-- |-- B1_Ant1_f1_S0.PNG
| |-- |-- |-- B1_Ant1_f1_S1.PNG
| ...
| |-- Positions
| |-- |-- Positions_B1_Ant1_f1.csv
| |-- |-- Positions_B1_Ant1_f2.csv
| ...
| |-- BoundaryMaps
| |-- |-- boundary_B1_Ant1_f1_S0.png
| |-- |-- boundary_B1_Ant1_f1_S1.png
| ...
| |-- Output
| |-- |-- Task_1_ICASSP
| |-- |-- |-- B1_Ant1_f1_S0.PNG
| |-- |-- |-- B1_Ant1_f1_S1.PNG
| ...
accelerate launch train_cond_dpm.py --cfg ./configs/ICA_dm.yaml
make sure your model weight path is added in the config file ./configs/ICA_dm.yaml (line 66), and run:
python sample_cond_dpm.py --cfg ./configs/ICA_dm.yaml
Note that you can modify the sampling_timesteps (line 7) to control the inference speed.
Thanks to the base code DDM-Public.