Radio Resource Allocation for Beam Hopping Scheduling in LEO Satellite Communications: A Spatio-Temporal Perspective
β οΈ Important Update (2026-03-11): All code errors have been fixed!If you cloned this repository before, please update immediately:
git pull origin mainSee Changelog for details
This repository contains the MATLAB implementation of the Radio Resource Allocation for Beam Hopping Scheduling in LEO Satellite Communications: A Spatio-Temporal Perspective.
This project addresses the beam-hopping (BH) scheduling problem in LEO satellite communications, where a satellite dynamically illuminates multiple cells within its coverage area to maximize service satisfaction while managing interference constraints.
- Tabu Search with Simulated Annealing (SA): Hybrid metaheuristic combining tabu search's memory mechanism with SA's probabilistic acceptance
-
Adaptive Tabu Tenure: Dynamic tabu list size based on problem scale (
$L_{tabu} = \lfloor\sqrt{N_b} \cdot \sqrt{N_m}\rfloor$ ) - Interference-Aware Scheduling: Spatial separation constraints to minimize co-channel interference
- User-Centric KPIs: Comprehensive performance metrics including throughput percentiles, fairness, and service satisfaction
- MATLAB R2024a or later
- Required toolboxes:
- Communications Toolbox
- Optimization Toolbox (optional, for baseline comparison)
- Satellite Orbit Data: This project requires satellite orbit data files (
5400.mator1800.mat) containing position information. Rungenerate_test_satellite_data()to generate sample data.
# Clone the repository
git clone https://github.com/yuanhaobupt/leo-bh-scheduling.git
# Navigate to the project directory
cd leo-bh-scheduling
# Open MATLAB and add to path
addpath(genpath('.'));% Load default configuration
setConfig;
% Run a quick test (single scheduling period)
controller = simSatSysClass.simController(Config, 1, 1, 0);
DataObj = controller.run();
% Calculate performance metrics
KPIs = calcuUserKPIs(DataObj);leo-bh-scheduling/
β
βββ +methods/ # Algorithm implementations
β βββ BHST_MY.m # Original Tabu Search
β βββ BHST_MY_SA.m # Tabu Search with SA
β βββ BHST_greedy.m # Greedy baseline
β βββ BHST_DQN.m # DQN baseline
β βββ ...
β
βββ +simSatSysClass/ # Simulation framework
β βββ @simController/ # Main controller
β βββ @simInterface/ # Data interface
β βββ @dataObj/ # Result storage
β βββ +tools/ # Utility functions
β
βββ +antenna/ # Antenna pattern functions
βββ +tools/ # Coordinate and geometry utilities
β
βββ experiments/ # Experiment scripts
β βββ run_TabuSearch.m # Tabu Search baseline
β βββ run_DQN.m # DQN baseline
β βββ run_ablation_SA.m # SA ablation experiment
β βββ run_ablation_Ltabu.m # Tabu tenure ablation
β βββ run_traffic_skew_experiment.m # Traffic skew experiment
β βββ run_all_experiments.m # Comprehensive runner
β βββ run_visualization.m # Batch visualization
β
βββ utils/ # Helper utilities
β βββ calcuUserKPIs.m # User-centric KPI calculation
β βββ generateTraffic.m # Traffic demand generation
β βββ generate_test_satellite_data.m # Synthetic orbit data
β βββ analyze_existing_results.m # Result analysis
β βββ perform_statistics.m # Statistical analysis
β
βββ visualize/ # Visualization tools
β βββ plot_SINR_CDF.m
β βββ plot_Throughput_Comparison.m
β βββ plot_ablation_results.m
β βββ ...
β
βββ results/ # Experiment results (git-ignored)
β
βββ setConfig.m # Configuration script
βββ quick_start.m # One-click verification
β
βββ README.md # This file
Compare the proposed method (Tabu + SA) against Tabu-only baseline:
run('experiments/run_ablation_SA.m')Expected Results:
| Variant | Throughput (Mbps) | Satisfaction (%) |
|---|---|---|
| Tabu + SA | 202.6 | 85.0 |
| Tabu-only | 189.3 | 82.5 |
Compare adaptive vs. fixed tabu tenure:
run('experiments/run_ablation_Ltabu.m')Expected Results:
| Configuration | Throughput (Mbps) | Satisfaction (%) |
|---|---|---|
| Fixed L=10 | 178.5 | 79.8 |
| Fixed L=20 | 195.2 | 82.5 |
| Fixed L=30 | 188.3 | 81.2 |
| Adaptive | 202.6 | 85.0 |
Test performance under different traffic distributions:
run('experiments/run_traffic_skew_experiment.m')Traffic Modes:
- Uniform: All users have identical demands
- Light Skew: 2Γ demand variance
- Heavy Skew: 5Γ demand variance
- Pareto (80/20): 20% users account for 80% demand
Key parameters can be modified in setConfig.m:
% Satellite parameters
heightOfSat = 508e3; % Orbital altitude (m)
numOfServbeam = 10; % Number of beams
% Scheduling parameters
BhDispCycle = 40e-3; % Scheduling period (s)
SubCarrierSpace = 30e3; % Subcarrier spacing (Hz)
% Traffic parameters
meanUsrsNum = 800; % Average number of users
traffic_mode = 'uniform'; % Traffic distribution mode
% Algorithm parameters
enable_SA = true; % Enable SA mechanism
L_tabu_mode = 'adaptive'; % Tabu tenure modeThe framework calculates the following user-centric KPIs:
| Metric | Description |
|---|---|
| Throughput | Average, p50, p90, p95 percentiles |
| SINR | Signal-to-Interference-plus-Noise Ratio |
| Outage Rate | Users with SINR < 0 dB |
| Service Satisfaction | Transported/Requested traffic ratio |
| Fairness Index | Jain's Fairness Index |
| Delay | Average and p95 latency |
Example usage:
KPIs = calcuUserKPIs(DataObj);
fprintf('Average Throughput: %.2f Mbps\n', KPIs.avg_throughput/1e6);
fprintf('p90 Throughput: %.2f Mbps\n', KPIs.p90_throughput/1e6);
fprintf('Fairness Index: %.4f\n', KPIs.fairness_index);Time Complexity (per iteration):
Where:
-
$|N(x)|$ : Neighborhood size (default: 10) -
$N_b$ : Number of beams (default: 10) -
$K$ : Average users per beam (default: 80)
Space Complexity:
Typical Performance:
- Computation time: ~5 seconds (50 iterations)
- Memory usage: <100 MB
- Suitable for real-time satellite scheduling
Waiting...
This project is licensed under the MIT License - see the LICENSE file for details.
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
For questions or issues:
- Hao Yuan - Email
Note: This code is provided for academic research purposes. For commercial use, please contact the authors.