中文说明 | Reproducibility | Formal results
This repository compares ZF, MMSE, exhaustive small-system ML, OAMP, legacy DetNet, and NoiseAwareDetNet under imperfect CSI, spatial correlation, Rician fading, and SNR shift. results/final/ now contains an executed formal experiment, not the earlier smoke run. The smoke artifacts are separately labeled under results/archive/smoke_20260712/.
y = Hx + n, n ~ CN(0, N0 I)
H_hat = H + E
QPSK and 16QAM use average symbol energy Es=1. Practical detectors use H_hat; optional Oracle-CSI rows must be explicitly suffixed (Oracle CSI) and are not mixed into the formal tables.
- i.i.d. Rayleigh:
H_ij ~ CN(0,1/Nt). - Kronecker Rayleigh:
H=Rrx^(1/2) W Rtx^(1/2),R[i,j]=rho^|i-j|. - Rician: normalized rank-one ULA LoS plus Rayleigh NLoS, controlled by K-factor.
- CSI standard deviation: complex RMS per error entry.
- CSI NMSE: errors are scaled so
||E||F^2/||H||F^2=10^(NMSEdB/10)per frame.
| Protocol | Complex noise variance | Use |
|---|---|---|
instantaneous |
N0=mean(abs(Hx)^2)/10^(SNRdB/10) |
Legacy compatibility; conditions each frame on its instantaneous receive power. |
fixed_esn0 |
N0=Es/10^(EsN0dB/10) |
Formal default; noise power is independent of each instantaneous channel realization. |
With H_ij ~ CN(0,1/Nt) and Es=1, fixed Es/N0 equals average receive SNR per antenna for i.i.d. Rayleigh, but not necessarily conditionally for an individual structured channel.
- ZF/MMSE: linear estimates followed by constellation slicing.
- ML: exhaustive minimization of
||y-H_hat x||^2; it is a small-system reference for the assumedH_hat, not an oracle under CSI error. - OAMP: de-correlated LMMSE linear estimation plus a discrete-constellation posterior-mean denoiser.
- DetNet: retained ablation; every layer uses
H_hat^T H_hat x-H_hat^T y. - NoiseAwareDetNet: adds normalized Gram/matched-filter statistics, LMMSE initialization, positive learned step sizes, soft projection, and explicit noise/SNR/CSI reliability features. Both neural models output
[B,2Nt].
Hardware: NVIDIA GeForce RTX 3050 Ti Laptop GPU, 4 GB VRAM; PyTorch 2.11.0+cu128.
| Study | Training | Validation | Test size per SNR | Architecture |
|---|---|---|---|---|
| 4x4 QPSK | 25 epochs, 60,000 samples/model | 6,000 | 3 seeds x 5,000 frames = 120,000 bits | 10 layers, hidden 128, state 64 |
| 8x8 QPSK | 20 epochs, 50,000 samples/model | 5,000 | 3 seeds x 5,000 frames = 240,000 bits | 8 layers, hidden 96, state 48 |
Seeds are 42, 123, and 2026. Training uses Kronecker Rayleigh with rho_tx=rho_rx=0.5, CSI NMSE -10 dB, fixed Es/N0, and training seed 31415. The primary test uses rho=0.7; it is therefore a correlation-shift/OOD evaluation rather than an in-distribution claim.
Executed commands:
.\.venv-cuda\Scripts\python.exe scripts\run_formal_study.py --config-4x4 configs\formal_4x4_qpsk_robust.json --config-8x8 configs\formal_8x8_qpsk_scalability.json --output-dir results\formal_candidate --device cuda
.\.venv-cuda\Scripts\python.exe -m pytest tests/The latest completed studies are retained separately from the earlier results/final/ reference run. They use the updated deep-unfolding detector and report both correlated-Rayleigh and unseen-Rician conditions with imperfect CSI.
Primary scenario: correlated Rayleigh rho_tx=rho_rx=0.7, CSI NMSE -10 dB, fixed Es/N0. Each aggregated point contains 120,000 bits.
| Detector | BER @ 10 dB | BER @ 20 dB | BER @ 30 dB |
|---|---|---|---|
ML using H_hat |
0.172175 | 0.091117 | 0.079308 |
| MMSE | 0.196117 | 0.196267 | 0.238108 |
| OAMP | 0.216367 | 0.196392 | 0.224675 |
| DetNet | 0.182117 | 0.135167 | 0.125525 |
| NoiseAwareDetNet | 0.178383 | 0.129958 | 0.128925 |
| ZF | 0.329750 | 0.265450 | 0.253967 |
At 20 dB, the bit-level Wilson 95% intervals are [0.128068,0.131873] for NoiseAwareDetNet, [0.194029,0.198524] for MMSE, and [0.194154,0.198649] for OAMP.
summary_results.csv contains both seed-to-seed descriptive statistics and pooled bit-level Wilson 95% intervals. A three-seed normal approximation alone is not treated as evidence of significance.
For NoiseAwareDetNet against MMSE and OAMP at 10/20/30 dB, paired_frame_errors.csv preserves 15,000 aligned frames per point. paired_statistical_tests.csv reports 5,000-resample frame-paired bootstrap intervals for BER(NoiseAwareDetNet)-BER(comparator) and exact bit-paired McNemar tests.
| Comparison | SNR | BER difference | Paired bootstrap 95% CI | McNemar conclusion |
|---|---|---|---|---|
| NoiseAwareDetNet - MMSE | 10 | -0.017733 | [-0.019333,-0.016092] | reject equality at 0.05 |
| NoiseAwareDetNet - MMSE | 20 | -0.066308 | [-0.068300,-0.064333] | reject equality at 0.05 |
| NoiseAwareDetNet - MMSE | 30 | -0.109183 | [-0.111684,-0.106733] | reject equality at 0.05 |
| NoiseAwareDetNet - OAMP | 10 | -0.037983 | [-0.039983,-0.036017] | reject equality at 0.05 |
| NoiseAwareDetNet - OAMP | 20 | -0.066433 | [-0.068667,-0.064200] | reject equality at 0.05 |
| NoiseAwareDetNet - OAMP | 30 | -0.095750 | [-0.098300,-0.093275] | reject equality at 0.05 |
Thus, lower BER was observed with statistical support for these six executed comparisons. This is not a universal dominance claim: at 30 dB the legacy DetNet had slightly lower observed BER than NoiseAwareDetNet (0.125525 versus 0.128925).
The 8x8 DetNet and NoiseAwareDetNet were trained from scratch with separate checkpoints; no 4x4 weights were reused.
| Detector | BER @ 10 dB | BER @ 20 dB | BER @ 30 dB |
|---|---|---|---|
| ZF | 0.385875 | 0.340942 | 0.328408 |
| MMSE | 0.209983 | 0.218933 | 0.289671 |
| OAMP | 0.241250 | 0.278604 | 0.349729 |
| DetNet | 0.207771 | 0.171646 | 0.163583 |
| NoiseAwareDetNet | 0.199979 | 0.166887 | 0.180275 |
ML has 4^8=65,536 candidates, exceeding the configured 10,000 threshold. Every 8x8 ML row records status=skipped, the candidate count, and the skip reason; no ML BER is fabricated.
Runtime is deliberately split:
- CPU single-sample core/end-to-end: ZF, MMSE, OAMP, and ML.
- Warmed-up, synchronized GPU batch core/end-to-end: DetNet and NoiseAwareDetNet.
complexity_and_parameters.csv: algorithmic notes and parameter counts.
These are deployment-path measurements, not a same-hardware race. They do not prove that DetNet is intrinsically faster than classical methods.
| Model | Best epoch | Parameters |
|---|---|---|
| DetNet 4x4 | 14 | 361,680 |
| NoiseAwareDetNet 4x4 | 9 | 365,540 |
| DetNet 8x8 | 11 | 186,368 |
| NoiseAwareDetNet 8x8 | 12 | 188,688 |
Total execution time was 2,537.05 seconds (42.28 minutes): 924.29 s for 4x4 training, 1,146.11 s for 8x8 training, 329.38 s for 4x4 evaluation, 29.59 s for paired statistics, and 53.02 s for 8x8 evaluation.
Zero observed errors remain zero in CSV and are clipped to 1e-6 only for logarithmic plotting, with an explicit annotation. Finite samples never establish a true BER of zero.
- Wilson intervals treat pooled bits as binomial observations; channel-induced dependence can make them optimistic. Paired frame bootstrap partly addresses frame-level dependence.
- Paired tests cover the primary scenario and two selected comparators at 10/20/30 dB, not every detector/scenario combination.
- Training used one correlation/NMSE point; broader domain randomization and repeated-training uncertainty remain open.
- Rician LoS is a simplified rank-one ULA model rather than a standardized geometry-based channel.
- Perfect synchronization, flat fading, accurate noise variance, and independent frames are assumed.
- ML remains a 4x4 assumed-channel reference; deep unfolding does not dominate every method or SNR.










