Downloads · 30 days
0
mariamismael/signal-atlas-final
signal-atlas-final is a machine learning model from mariamismael. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
Signal Atlas is a crowdsourced LTE signal quality mapping system developed at Zewail City of Science and Technology. This repository contains the final trained model for predicting RSRP and RSRQ at unmeasured campus l…
Downloads · 30 days
0
Access
Public
Updated Jun 22, 2026
Repo size
155 KB
Likes
0
Public
Click a slice to open those files.
.joblib155 KB · 97%
From the Hugging Face model README
Signal Atlas is a crowdsourced LTE signal quality mapping system developed at Zewail City of Science and Technology. This repository contains the final trained model for predicting RSRP and RSRQ at unmeasured campus locations.
| Property | Value |
|---|---|
| Model type | K-Nearest Neighbors (KNN) |
| K | 7 |
| Task | Spatial regression (RSRP + RSRQ prediction) |
| Training points | 725 unique campus locations |
| Data cutoff | After 2026-04-25 (cell ID enabled app) |
| Feature | Description |
|---|---|
latitude | GPS latitude of measurement |
longitude | GPS longitude of measurement |
pci_encoded | Physical Cell ID (encoded) — identifies serving cell sector |
dist_to_proxy | Distance to strongest measured point per PCI (meters) |
cell_id_encoded | Unique cell sector identifier (encoded) |
Evaluated using gap-based spatial split — tests boundary points at cluster edges to simulate real interpolation conditions.
| Metric | Value |
|---|---|
| RSRP MAE | 4.41 dBm |
| RSRP RMSE | 5.61 dBm |
| RSRP R² | 0.5404 |
| Within ±10 dBm | 92.5% |
| Train / Test split | 619 / 106 points |
import joblib
bundle = joblib.load("signal_atlas_knn.joblib")
knn_rsrp = bundle["knn_rsrp"]
knn_rsrq = bundle["knn_rsrq"]
scaler = bundle["scaler"]
le_pci = bundle["le_pci"]
le_cell = bundle["le_cell"]
def predict(lat, lon, pci, cell_id, dist_to_proxy):
pci_enc = le_pci.transform([str(pci)])[0] if str(pci) in le_pci.classes_ else 0
cell_enc = le_cell.transform([str(cell_id)])[0] if str(cell_id) in le_cell.classes_ else 0
X = scaler.transform([[lat, lon, pci_enc, dist_to_proxy, cell_enc]])
return knn_rsrp.predict(X)[0], knn_rsrq.predict(X)[0]
rsrp, rsrq = predict(29.9413, 31.0668, 289, 54450177, 150.0)
print("RSRP:", round(rsrp, 1), "dBm | RSRQ:", round(rsrq, 1), "dB")
signal-atlas-final/
├── signal_atlas_knn.joblib <- Full model bundle (models + encoders + scaler)
├── model_info.json <- Training metadata and evaluation metrics
└── README.md <- This file
Signal Atlas collects LTE signal measurements from Android devices across Zewail City campus. The ML module fills coverage gaps by predicting signal quality at unmeasured locations using spatial interpolation.
Key findings:
Team: Hamza Mohammed, Salma Hatem, Mariam Ismael, Mohamed Mahmoud
Supervisor: Dr. Mahmoud Abdelaziz
Program: Communications and Information Engineering, Zewail City
Year: 2025/2026