This is the implementation of the paper BANDWEAVE: Enhanced Channel Estimation in MIMO Networks with Multi-Band Fusion.
YouTube Demo: https://www.youtube.com/watch?v=COGgKKtj8SA
BANDWEAVE is a multi-band CFR fusion framework for improving channel estimation quality in MIMO systems by coherently combining complementary multipath information across frequency bands.
If you find the project useful and you use this code, please cite our paper:
@inproceedings{haque2026bandweave,
title={BANDWEAVE: Enhanced Channel Estimation in MIMO Networks with Multi-Band Fusion},
author={Haque, Khandaker Foysal and Meneghello, Francesca and Ashdown, Jonathan and Restuccia, Francesco},
booktitle={IEEE INFOCOM},
pages={1--10},
year={2026}
}(I) We first perform a preliminary analysis to validate the core intuition.
(II) We then design a heuristic signal-processing multi-band fusion method and evaluate it in simulation.
(III) We finally introduce a 3-stage learning pipeline for robust deployment: supervised pretraining, simulation-in-the-loop fine-tuning, and online feedback-aware adaptation as presented in the following figure.
- To perform the preliminary tests, run:
cd Matlab_Simulation/Python_code/preli_analysis
python band_analysis.pyThis script visualizes the CFR structure and multipath profile for the same bandwidth at different center frequencies.
- To analyze the CIR at two different bandwidths with the same center frequency, run:
cd Matlab_Simulation/Python_code/preli_analysis
python plot_cir_80mhz_vs_160mhz.py ../../Matlab_code/Preli_test_2_3/This shows that different bandwidths observe similar dominant multipath components.
- To analyze CIRs at two different center frequencies, run:
cd Matlab_Simulation/Python_code/preli_analysis
python plot_cir_ch36_vs_163.py ../../Matlab_code/Preli_test_2_3/This shows how the CIR structure changes across center frequencies while preserving key dominant paths.
- Create the CFR dataset (office example):
cd Matlab_Simulation/Matlab_code/AX
matlab -batch "save_CFR_batch_office"- Generate merged CFRs using the BANDWEAVE heuristic:
cd Matlab_Simulation/Python_code/BandWeave_Algo
python merge_CFR.py ../../original_CFR ../../merged_CFR AX office 0 1 3 5180 5845 5180Note: in merge_CFR.py, make sure the scipy.io.savemat(...) line is enabled so merged CFR files are written.
- Compute BER with original CFR:
cd Matlab_Simulation/Matlab_code/AX
matlab -batch "cal_ber_original_CFR_batch"- Compute BER with merged CFR:
cd Matlab_Simulation/Matlab_code/AX
matlab -batch "cal_ber_merged_CFR_batch"- Compute BER improvement from merging:
cd Matlab_Simulation/Python_code/BandWeave_Algo
python Cal_BER_improve.py ../../BER AX office 0 1 3 5180 5845 5180The learning-code implementation is in Learning_Algo/.
-
Make sure learning data is ready: original CFR data in
Matlab_Simulation/original_CFR/and heuristic merged CFR data inMatlab_Simulation/merged_CFR/. -
To run supervised pretraining (Phase 1), execute:
cd Learning_Algo
python train.pyThis trains the model and saves best_model_checkpoint.pth.
- To run simulation-in-the-loop fine-tuning (Phase 2), execute:
cd Learning_Algo
python fine-tuning.pyThis stage uses BER feedback from Matlab_Simulation/Matlab_code/AX/simulatealgo1v1.m and saves fine_tuned_model_cmaes.pth when improved.
- To run learning-based testbed inference, execute:
cd Learning_Algo
python execute_LA.py- To run heuristic online fusion (baseline-style), execute:
cd Learning_Algo
python execute_bandweave_heuristic.py- To run online feedback-aware adaptation (Phase 3), execute:
cd Learning_Algo
python OA.py \
--input-root /path/to/input_files \
--checkpoint-path ./fine_tuned_model_cmaes_oa.pth \
--online-model-path ./online_model.pth \
--run-test-cmd "bash ./run_one_iteration.sh"- To measure inference latency, execute:
cd Learning_Algo
python benchmark_inference_BW.py --device auto --batch_size 1The Experiments/ directory contains post-processing scripts for throughput analysis.
- To extract throughput comparison for a given STA, execute:
python Experiments/Scripts/extract_throughput_STAX.py <experiment_path> <sta_index>Example:
python Experiments/Scripts/extract_throughput_STAX.py ../Dataset/Non-Contiguous_2Band/Classroom/Movement/ 1
python Experiments/Scripts/extract_throughput_STAX.py ../Dataset/Non-Contiguous_2Band/Classroom/Movement/ 2- To calculate average throughput gain for a given STA, execute:
python Experiments/Scripts/cal_gain.py <experiment_path> <sta_index>Example:
python Experiments/Scripts/cal_gain.py ../Dataset/Non-Contiguous_2Band/Classroom/Movement/ 1
python Experiments/Scripts/cal_gain.py ../Dataset/Non-Contiguous_2Band/Classroom/Movement/ 2For any further information, please contact Foysal Haque at haque.k@northeastern.edu.