Update figures and docs: OMA naming, uniform legends, TikZ Fig. 1 source

- Rename the orthogonal comparison scheme OFDMA -> OMA in docs and figure legends (data keys keep ofdma)
- Legend labels normalized to the paper dictionary (OMA, SFDMA, UWCA (proposed))
- New TikZ-generated system overview figure with text-consistent notation (soft decoder masks m-tilde, queries q_u, sharpness eta)
- Regenerated fig_fair, fig_resorth, fig_realdata_c, fig_async, fig_dynusers; fig_ser_all legend patched
This commit is contained in:
KiHoLee
2026-08-25 21:39:53 +09:00
parent 6099ce3063
commit f55524cb05
12 changed files with 108 additions and 17 deletions
+1 -1
View File
@@ -70,7 +70,7 @@ Each study script is self-contained and writes its JSON into
inequality in the manuscript with standalone numpy code (no experiment code
reused): the relevance identity, the mutual-information correlation, the
subspace ceiling, the LMMSE receiver against an empirical Wiener solution
(0.1% MSE agreement; the blind form matches the OFDMA cosine to machine
(0.1% MSE agreement; the blind form matches the OMA cosine to machine
precision), and the surrogate bound used in the appendix (uniform constant
0.97). Results: `experiments/verification/math_verify.json`.
+8 -8
View File
@@ -36,7 +36,7 @@ evaluation uses 150-200 Monte Carlo batches of 64 per point.
channel gains, the manuscript's Proposition on optimal linear receivers),
and `tdma_proj` (random orthonormal 16-dim projection per user — an
arbitrary orthogonal partition).
- **Key results.** lmmse_blind = OFDMA at every SNR in all scenarios
- **Key results.** lmmse_blind = OMA at every SNR in all scenarios
(SER 0.509 vs 0.508 @10 dB HIGH), and tdma_proj and SFDMA coincide with
them — the ceiling binds every correlation-blind receiver. HIGH @20 dB:
blind 0.327 -> UWCA 0.110 -> genie 0.044, so UWCA recovers 77% of the
@@ -95,16 +95,16 @@ evaluation uses 150-200 Monte Carlo batches of 64 per point.
- **Setup.** Per-user integer offsets delta_u ~ U{0..Delta} symbols,
Delta in {0,1,2,4,8}, shift each user's transmitted block within the
frame (edge energy lost). Conditions: uncorrected reception (UWCA and
OFDMA), block-wise realignment using pilot-estimated offsets (each
OMA), block-wise realignment using pilot-estimated offsets (each
user's block region shifted back individually), and realignment with a
deliberately impaired estimator (+-1 symbol on 20% of users).
- **Key results.** Uncorrected offsets are catastrophic for *every*
embedding-level scheme (one symbol: UWCA 0.26 -> 0.73, OFDMA 0.51 ->
embedding-level scheme (one symbol: UWCA 0.26 -> 0.73, OMA 0.51 ->
0.76), because i.i.d. embedding coordinates fully decorrelate under a
one-symbol misalignment — synchronization is a shared physical-layer
prerequisite, not a property of the multiple-access mechanism. With
realignment the degradation is gradual (0.266 -> 0.304 @Delta=1, 0.455
@Delta=8) and realigned UWCA stays below realigned OFDMA (0.536-0.638)
@Delta=8) and realigned UWCA stays below realigned OMA (0.536-0.638)
at every offset. The impaired estimator costs 0.14 SER: whole-symbol
residuals sacrifice the affected block, so timing must be held to
sub-symbol accuracy (which the closed-loop timing advance provides).
@@ -119,10 +119,10 @@ evaluation uses 150-200 Monte Carlo batches of 64 per point.
two-layer tanh view networks g_u per user (seed 7): users share the
scene s only through independent nonlinear transformations. Cases:
shared scene vs independent scenes (control). Schemes: trained UWCA,
OFDMA, NOMA-SIC, and the scalar-parameterized genie LMMSE fed the
OMA, NOMA-SIC, and the scalar-parameterized genie LMMSE fed the
*measured* mean pairwise cosine.
- **Key results.** The linear correlation is destroyed (mean cosine
0.006), so the genie LMMSE collapses onto the ceiling (0.515 vs OFDMA
0.006), so the genie LMMSE collapses onto the ceiling (0.515 vs OMA
0.518 @10 dB) — no scalar or linear receiver can represent the shared
structure. UWCA still attains 0.363 @10 dB / 0.220 @20 dB. The
independent-scene control (UWCA 0.441) isolates the manifold-prior
@@ -138,11 +138,11 @@ evaluation uses 150-200 Monte Carlo batches of 64 per point.
- **Setup.** E1's trained HIGH decoder; per-sample Pearson correlation
across the 64 dimensions, averaged over user pairs and 100x64 samples
per SNR, for: input embeddings, decoded embeddings, and decoding
residuals r_u = e_hat_u - e_u; OFDMA decoded correlation as reference.
residuals r_u = e_hat_u - e_u; OMA decoded correlation as reference.
- **Key results.** The decoded-embedding correlation rises with SNR from
0.31 toward the 0.39 input level (the shared content is delivered, not
stripped), while the residual correlation falls 0.23 -> 0.14 (2.8x below
the input level) — the emergent residual orthogonality. OFDMA's decoded
the input level) — the emergent residual orthogonality. OMA's decoded
correlation is 0.00 at every SNR: orthogonal access erases the
inter-user semantic structure from the delivered embeddings.
- **Artifacts.** `experiments/e6_residual_orth.py` ->
+5 -5
View File
@@ -61,11 +61,11 @@ axs = [f.add_axes([0.115, AXB, 0.365, AXH]),
f.add_axes([0.615, AXB, 0.365, AXH])]
for ax, sc, ttl in zip(axs, ["HIGH", "MIX"], ["(a) HIGH", "(b) MIX"]):
v = d["scenarios"][sc]
ax.semilogy(snr, v["ofdma"]["ser"], "s--", color=C["ofdma"], label="OFDMA")
ax.semilogy(snr, v["ofdma"]["ser"], "s--", color=C["ofdma"], label="OMA")
ax.semilogy(snr, v["lmmse_blind"]["ser"], "v-", color=C["blind"],
markevery=(1, 2), label="LMMSE-blind")
ax.semilogy(snr, v["noma"]["ser"], "^-.", color=C["noma"], label="NOMA-SIC")
ax.semilogy(snr, v["uwca"]["ser"], "o-", color=C["uwca"], label="UWCA (prop.)")
ax.semilogy(snr, v["uwca"]["ser"], "o-", color=C["uwca"], label="UWCA (proposed)")
ax.semilogy(snr, v["lmmse_genie"]["ser"], "d:", color=C["genie"],
label="LMMSE-genie")
ax.set_xlabel("SNR (dB)")
@@ -86,7 +86,7 @@ ax.plot(snr, d["uwca"]["rho_decoded"], "o-", color=C["uwca"],
ax.plot(snr, d["uwca"]["rho_residual"], "s-", color=C["extra"],
label=r"UWCA residual $\rho(\mathbf{r}_u,\mathbf{r}_v)$")
ax.plot(snr, d["ofdma"]["rho_decoded"], "^:", color=C["ofdma"],
label=r"OFDMA decoded")
label=r"OMA decoded")
ax.set_xlabel("SNR (dB)")
ax.set_ylabel("Pearson correlation")
ax.set_xlim(0, 20)
@@ -122,11 +122,11 @@ cur = d["curves"]
ax.plot(dm, [a[0] for a in cur["uwca_uncorrected"]["10.0"]], "o--",
color=C["uwca"], alpha=0.5, label="UWCA, uncorrected")
ax.plot(dm, [a[0] for a in cur["ofdma_uncorrected"]["10.0"]], "s--",
color=C["ofdma"], alpha=0.5, label="OFDMA, uncorrected")
color=C["ofdma"], alpha=0.5, label="OMA, uncorrected")
ax.plot(dm, [a[0] for a in cur["uwca_corrected"]["10.0"]], "o-",
color=C["uwca"], label="UWCA, realigned")
ax.plot(dm, [a[0] for a in cur["ofdma_corrected"]["10.0"]], "s-",
color=C["ofdma"], label="OFDMA, realigned")
color=C["ofdma"], label="OMA, realigned")
ax.plot(dm, [a[0] for a in cur["uwca_corrected_err20"]["10.0"]], "^-.",
color=C["extra"], label="UWCA, realigned (20% est. err.)")
ax.set_xlabel(r"maximum timing offset $\Delta$ (symbols)")
Binary file not shown.
+91
View File
@@ -0,0 +1,91 @@
\documentclass[tikz,border=4pt]{standalone}
\usepackage{amsmath,amssymb,bm}
\usetikzlibrary{positioning,shapes.geometric,decorations.pathreplacing,calc,fit,backgrounds}
\begin{document}
\begin{tikzpicture}[
font=\small,
box/.style={draw,rounded corners=1pt,minimum width=7.5mm,minimum height=5.5mm,inner sep=1.5pt},
enc/.style={box,fill=yellow!35},
chan/.style={draw,diamond,aspect=1.4,fill=gray!25,inner sep=0.8pt},
rxb/.style={box},
mult/.style={draw,circle,inner sep=0.4pt,minimum size=4mm},
sum/.style={draw,rounded corners=2.5mm,fill=cyan!20,minimum width=12mm,minimum height=26mm},
dec/.style={draw,rounded corners=2pt,minimum width=47mm,minimum height=6mm,inner sep=2pt},
lbl/.style={font=\small\bfseries,align=center},
arr/.style={-stealth,semithick}]
% ---------------- left panel: transmitters / channel ----------------
\foreach \i/\yy in {1/1.7, 2/0.45}{
\node[box] (x\i) at (0,\yy) {$\mathbf{x}_{\i}$};
\node[enc,right=4.5mm of x\i] (f\i) {$f_\phi$};
\node[mult,right=5.5mm of f\i] (o\i) {$\odot$};
\node[chan,right=5mm of o\i] (h\i) {$\tilde h_{\i}$};
\node[rxb,right=5mm of h\i] (y\i) {$\mathbf{y}_{\i}$};
\draw[arr] (x\i) -- (f\i);
\draw[arr] (f\i) -- node[above,font=\footnotesize]{$\mathbf{e}_{\i}$} (o\i);
\draw[arr] (o\i) -- (h\i);
\draw[arr] (h\i) -- (y\i);
\node[below=1.8mm of o\i,font=\footnotesize] (m\i) {$\mathbf{m}_{\i}$};
\draw[arr] (m\i) -- (o\i);
}
\node[box] (xU) at (0,-1.2) {$\mathbf{x}_{U}$};
\node[enc,right=4.5mm of xU] (fU) {$f_\phi$};
\node[mult,right=5.5mm of fU] (oU) {$\odot$};
\node[chan,right=5mm of oU] (hU) {$\tilde h_{U}$};
\node[rxb,right=5mm of hU] (yU) {$\mathbf{y}_{U}$};
\draw[arr] (xU) -- (fU);
\draw[arr] (fU) -- node[above,font=\footnotesize]{$\mathbf{e}_{U}$} (oU);
\draw[arr] (oU) -- (hU);
\draw[arr] (hU) -- (yU);
\node[below=1.8mm of oU,font=\footnotesize] (mU) {$\mathbf{m}_{U}$};
\draw[arr] (mU) -- (oU);
\foreach \c in {x,f,o,h,y}{\node at ($(\c 2)!0.5!(\c U)$) {$\vdots$};}
% superposition
\node[sum,right=9mm of y2.east,yshift=-3.5mm] (sig)
{$\displaystyle\sum_{v=1}^{U}$};
\draw[arr] (y1.east) -- (y1.east -| sig.west);
\draw[arr] (y2.east) -- (y2.east -| sig.west);
\draw[arr] (yU.east) -- (yU.east -| sig.west);
% bottom labels
\node[lbl,below=5.5mm of fU] {Transmitters\\(shared $f_\phi$)};
\node[lbl,below=5.5mm of hU] {Rayleigh\\Channel};
\node[lbl] at ([yshift=-4.5mm]sig.south) {Received Signal\\(Superposition $\tilde{\mathbf{y}}$)};
% ---------------- right panel: UWCA decoder ----------------
\node[dec,fill=violet!15,right=15mm of sig.east,yshift=19mm] (mask)
{Soft Masks $\{\tilde{\mathbf{m}}_i\}_{i=1}^{U}$};
\node[dec,fill=blue!12,below=2.2mm of mask,align=center] (proj)
{K/V Projection $(\mathbf{W}_K,\mathbf{W}_V)$\\[-1pt] Queries $\{\mathbf{q}_u\}$};
\node[dec,fill=orange!30,below=2.2mm of proj,minimum height=9mm,align=center] (attn)
{Scaled Dot-Product Attention\\[-1pt]
{\footnotesize $\alpha_{u,i}=\mathrm{softmax}\big(\eta\,\mathbf{q}_u^{\top}\mathbf{k}_i/\sqrt{d_k}\big)$}};
\node[mult,below=2.2mm of attn] (plus) {$\oplus$};
\node[dec,fill=green!20,below=2.2mm of plus] (norm) {$\ell_2$-Normalize};
\node[dec,fill=green!30,below=2.2mm of norm] (out)
{$\hat{\mathbf{e}}_1,\ \hat{\mathbf{e}}_2,\ \ldots,\ \hat{\mathbf{e}}_U$};
\draw[arr] (mask) -- (proj);
\draw[arr] (proj) -- (attn);
\draw[arr] (attn) -- (plus);
\draw[arr] (plus) -- (norm);
\draw[arr] (norm) -- (out);
\draw[arr] (sig.east) -- node[above,font=\footnotesize]{$\tilde{\mathbf{y}}$} ++(6mm,0) |- (mask.west);
\draw[arr,dashed,blue] (mask.east) -- ++(4mm,0) |- (plus.east)
node[pos=0.25,right,font=\footnotesize,align=left]{skip:\\$\tilde{\mathbf{y}}\odot\tilde{\mathbf{m}}_u$};
% decoder panel frame
\begin{scope}[on background layer]
\node[draw=blue!60,dashed,rounded corners=2mm,fill=blue!5,fit=(mask)(out)(attn),
inner xsep=10mm,inner ysep=2.5mm] (panel) {};
\end{scope}
\node[anchor=south,font=\small\bfseries\color{blue!60!black},inner sep=1.5pt] at (panel.north)
{UWCA Decoder (per-user, shared weights $\theta$)};
% MAML brace
\draw[decorate,decoration={brace,mirror,amplitude=2mm},blue!60!black,thick]
([yshift=-1.2mm]panel.south west) -- ([yshift=-1.2mm]panel.south east)
node[midway,below=2mm,font=\small\color{blue!60!black}]
{MAML meta-training over SNR tasks $\{\mathcal{T}_k\}_{k=1}^{K}$};
\end{tikzpicture}
\end{document}
BIN
View File
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+3 -3
View File
@@ -2,7 +2,7 @@
for HIGH/LOW/MIX, parallel to the synthetic Fig. 2.
Curves per panel:
- OFDMA [division], SFDMA [feature div.], NOMA-SIC (analytical baselines)
- OMA, SFDMA, NOMA-SIC (analytical baselines)
- UWCA (analytical) : oracle-beta cross-attention (relevance SUPPLIED) -- dotted
- UWCA w/o MAML : decoder TRAINED on real digits, no meta-learning (from realdata_train.json)
- UWCA w/ MAML : decoder TRAINED on real digits with MAML (proposed) -- hollow circles
@@ -104,8 +104,8 @@ fig, ax = plt.subplots(1, 3, figsize=(11, 3.4))
betas = {s: emp_beta(SCEN[s])[~np.eye(U, dtype=bool)].mean() for s in SCEN}
for j, s in enumerate(['HIGH', 'LOW', 'MIX']):
a = ax[j]
a.plot(SNR, ana[s]['OFDMA'], 's--', color=COL['OFDMA'], lw=2, ms=5, label='OFDMA [division]')
a.plot(SNR, ana[s]['SFDMA'], 'v:', color=COL['SFDMA'], lw=2, ms=5, mfc='none', label='SFDMA [feature div.]')
a.plot(SNR, ana[s]['OFDMA'], 's--', color=COL['OFDMA'], lw=2, ms=5, label='OMA')
a.plot(SNR, ana[s]['SFDMA'], 'v:', color=COL['SFDMA'], lw=2, ms=5, mfc='none', label='SFDMA')
a.plot(SNR, ana[s]['NOMA-SIC'], '^-.', color=COL['NOMA-SIC'], lw=2, ms=5, label='NOMA-SIC')
a.plot(SNR, ana[s]['UWCA (analytical)'], ':', color=COL['UWCA (analytical)'], lw=2.4, label='UWCA (analytical)')
a.plot(SNR, trained[s]['UWCA w/ MAML'], 'o-', color=COL['UWCA w/ MAML'], lw=1.6, ms=6, mfc='none', mew=1.6, label='UWCA (trained)')