中文版本 / Chinese Version | English Version
This repository contains a complete end-to-end experiment of NMS→OSD→CNN hybrid decoding in a single Jupyter Notebook (osd_cnn.ipynb): from CCSDS standard LDPC code loading, mixed SNR data generation, DIANet training, comparison simulation of NMS/OSD-1/OSD-2/CNN-OSD, and visualization. The current implementation uses a unified NMS normalization factor alpha=0.78, consistent across training and simulation phases to ensure data distribution alignment.
- 📦 Standard LDPC Code Support: Loads CCSDS (128, 64) code from Alist format file, automatically generates G matrix via Gaussian elimination.
- 🔁 Unified NMS Normalization Strategy: Both
decode_nms_trajectoryand hybrid OSD use the samealpha=0.78, facilitating experiment reproduction and avoiding data distribution drift. - 📚 Mixed-SNR Training Data: Training set covers 2.0–4.0 dB, with multi-SNR samples sharing the same NMS configuration.
- 🧠 DIANet Trajectory Learning: Takes NMS LLR trajectory
(n, T)as input, outputs soft information gain for each bit. - 🎯 OSD Algorithm Implementation: Supports OSD-1 and OSD-2, includes adaptive Gaussian elimination and Top-K acceleration optimization.
- 🛟 CNN-OSD Fusion:
hybrid_soft = y + 0.78 * cnn_logits, directly uses enhanced soft information in OSD-1/2. - 📈 End-to-End Visualization: Notebook includes FER curves, gain bar charts, and performance comparison tables, showing results for both OSD-1 and OSD-2.
osd-cnn/
├── osd_cnn.ipynb # Main experiment Notebook (code + documentation)
├── dia_model_best.pth # Trained DIANet model parameters
├── CCSDS_ldpc_n128_k64.alist # CCSDS standard LDPC code in Alist format
├── README.md # This document (English)
└── README_CN.md # Chinese version
- Open Colab directly.
- Runtime → Change runtime type → Select GPU.
- Run cells sequentially. The notebook will automatically install dependencies, generate data, train DIANet, and run simulations.
- Install dependencies (if not auto-installed by the notebook, refer to requirements and install via pip).
- Start Jupyter:
jupyter notebook. - Open
osd_cnn.ipynband execute all cells in order.
| Module | Content | Highlights |
|---|---|---|
| LDPC Code Loading | Loads CCSDS (128, 64) code from Alist file, generates G matrix via Gaussian elimination | Supports standard format, auto-verifies H@G.T=0 |
| NMS Decoding + Trajectory Recording | decode_nms_trajectory, fixed alpha=0.78 |
Records iterative LLR trajectory, outputs failure samples |
| Mixed-SNR Data Generation | Only keeps NMS failure frames, TOTAL_SAMPLES = 60000 |
SNR randomly sampled but shares same alpha |
| DIANet Training | BCEWithLogitsLoss + Adam (1e-3) + EarlyStopping |
Takes trajectory as input, predicts bit error tendency |
| OSD Algorithm | OSD-1/OSD-2, adaptive Gaussian elimination, Top-K acceleration | Supports standard OSD and CNN-enhanced hybrid OSD |
| CNN-OSD Fusion | hybrid_soft = y + 0.78 * cnn_logits |
Compares FER/BER/time with pure OSD |
| Visualization | FER curves, gain bar charts, performance tables | Shows overall performance of NMS / OSD-1/2 / CNN-OSD |
MAX_ITER_NMS = 12: NMS iteration count.alpha = 0.78: NMS normalization factor, uniformly used as fixed value in both training and simulation phases to ensure consistent data distribution.MAX_FRAMES = 1,000,000,MIN_CNN_ERRORS = 50: Simulation termination conditions.BATCH_SIZE = 512: DIANet training batch size.TOTAL_SAMPLES = 60,000: Mixed-SNR failure frames for training.R = 0.5: Code rate (CCSDS (128, 64) code).
Simulation uses CCSDS (128, 64) code, unified alpha=0.78, SNR range 2.0-4.0 dB (step 0.2 dB).
- Gallager, R. G. Low-density parity-check codes, 1962.
- Fossorier, M. P. C., & Lin, S. Soft-decision decoding of linear block codes, 1995.
- Chen, J., & Fossorier, M. P. C. Near optimum universal belief propagation based decoding of LDPC codes, 2002.
- Jia, M. et al. Ordered Statistics Decoding for Short Block Codes, 2019.
