Redesign after the independent-mask dominance finding: the affinity now parameterizes the receiver (closed-form Wiener) instead of the mask ensemble. New Theorem 1 (spectral closed form), floors sqrt(1-b^2)/2 vs 1/2, full-cooperation bound with equality at b=1. GPU (torch) Monte Carlo backend, decision-directed SIC baseline, TikZ block diagram source, verification suite V1-V11.
4.2 KiB
EDMA — Affinity-Aware Embedding Division Multiple Access
Reproducibility package for
K.-H. Lee, H.-H. Choi, and J.-R. Lee, "Affinity-Aware Embedding Division Multiple Access for Multi-User Semantic Communications," submitted to IEEE Transactions on Vehicular Technology, 2026.
This repository contains the simulation code, the raw result data, and the figure files behind every numerical claim in the paper. It is private during peer review and will be made public upon publication.
The design under test: each user applies an independent Haar
orthogonal mask, and the receiver runs a matched filter followed by
the closed-form affinity-aware Wiener demultiplexer, which harvests
the coherent interference component that the measured pairwise
affinity beta predicts. The affinity-blind reference sets beta = 0
in the same filter.
Layout
| Folder | Contents |
|---|---|
code/ |
Simulation and plotting scripts (Python) |
data/ |
Raw results written by the scripts, one CSV per experiment |
fig/ |
Figure PDFs included in the manuscript (block_diagram_src.tex is the TikZ source of Fig. 1) |
Requirements
Python 3.10 or later with numpy and matplotlib. The Monte Carlo
experiments in revision_sims_gpu.py, fig_real_merged.py, and
refine_matched.py use torch (CUDA when available; the scripts fall
back to CPU). All random draws come from the numpy generator with the
fixed seed 2026 — torch only accelerates QR, matrix products, and
linear solves — and every script writes its raw output to data/, so
plotting is fully decoupled from simulation.
Reproducing the figures
Run the scripts from inside code/. All plots are rendered from
data/ only, by replot_all.py (Figs. 2, 3, 5, 6, 7) and
replot_merged.py (Fig. 4).
| Figure | Content | Simulation | Data |
|---|---|---|---|
| Fig. 1 | System diagram | latexmk -pdf fig/block_diagram_src.tex |
— |
| Fig. 2 | Per-user MSE, aware vs blind floor | revision_sims.py E1 |
floor_validation.csv |
| Fig. 3 | Effective sum rate at the CLIP affinity | revision_sims.py E7a |
rate_corrected.csv |
| Fig. 4 | Cosine recovery on real BERT+ViT pairs | fig_real_merged.py, then refine_matched.py |
bertvit_merged.csv |
| Fig. 5 | Receiver comparison under Rayleigh fading | revision_sims_gpu.py E2 |
sic_comparison.csv |
| Fig. 6 | Value of the measured affinity | revision_sims.py E7a |
beta_sweep_corrected.csv |
| Fig. 7 | Multi-user scaling (joint Wiener) | revision_sims_gpu.py E7c |
multiuser_corrected.csv |
Quantities quoted in the text but not plotted come from the same
drivers: revision_sims.py E0 writes theorem_check.csv (Theorem 1
validation across affinities and channel phases),
revision_sims_gpu.py E3 writes rayleigh_mse.csv (unconditional
Rayleigh MSE), E4 writes csi_error.csv (imperfect-CSI
robustness), E5 writes mask_family_rev.csv (Walsh–Hadamard versus
Haar), E8 writes mismatch.csv (affinity mismatch and
quantization), and E9 writes cosine_ceiling.csv (cosine-ceiling
corollary check).
Verifying the analysis
verify_math.py re-derives every closed-form claim numerically and
prints one PASS/FAIL line per item: Theorem 1 at the equal-gain point
and under random channel phases for both users, the aware and blind
error floors and the value-of-affinity ratio, the cosine-ceiling
corollary, the blind-receiver/matched-filter cosine equivalence, the
monotonicity proposition, the full-cooperation bound with its
equality case at beta = 1, the finite-SNR MAC-condition boundary,
the exact Walsh–Hadamard closed form, the quadratic mismatch
stationarity, and the dominated floor of the correlated-mask
alternative from the Appendix. It depends only on numpy.
Conventions
The scripts follow the manuscript exactly: unit per-block transmit
energy E_b = 1 per user, rho = E_b / sigma_n^2 as the per-block
SNR with per-symbol SNR rho/d, complex block-Rayleigh gains unless
the evaluation point h_u = 1 is stated, real unit-norm embeddings
with the orientation <e1, e2> = +beta, and independent Haar masks
drawn fresh on every realization.
Citation and license
Citation details and a license will be added when the paper is published.