diff --git a/README.md b/README.md index 39794a0..4193501 100755 --- a/README.md +++ b/README.md @@ -2,60 +2,67 @@ Simulation code, raw results, and figure sources for the manuscript "Relevance-Aware Semantic Multiple Access via Meta-Learned User-Wise -Cross-Attention" (submitted to IEEE Transactions on Wireless Communications). +Cross-Attention" (submitted to the IEEE Transactions on Communications). + +The package contains everything needed to regenerate every number and +figure in the manuscript: one script per study, the raw JSON/CSV results +each script produced, and a single plotting script that rebuilds the figure +PDFs from the stored results without rerunning any experiment. + +**Detailed per-study documentation (question, setup, procedure, metrics, +key results): [docs/EXPERIMENTS.md](docs/EXPERIMENTS.md).** ## Requirements -- Python 3.10+ with `torch` (CUDA optional; results generated on an NVIDIA - RTX A4500, PyTorch 2.10, CUDA 12.8), `numpy`, `matplotlib`, and +- Python 3.10+ with `torch` (results generated on an NVIDIA RTX A4500, + PyTorch 2.10, CUDA 12.8; CPU fallback works), `numpy`, `matplotlib`, and `scikit-learn` (real-data study only). -- All experiments use fixed seed 42 (auxiliary generators seeded as noted in - each script). +- All experiments use fixed seed 42 (auxiliary generators seeded as noted + in each script). ## Layout -- `rev2/lib.py` — shared library: single-superimposed-signal channel - (Rayleigh / Rician / Nakagami fading, complex phase residuals, timing - offsets, CSI error), UWCA decoder (active-set masking, top-k masking, - I/Q input), closed-form LMMSE receivers, training loops (multi-task - meta-training and first-order MAML), evaluation metrics. -- `rev2/e1_fair_baselines.py` … `rev2/e9_topk_online.py` — one script per - experiment (see the table below). `*_v2/_v3` scripts supersede their - earlier versions where present. -- `rev2/data/` — raw JSON results behind every quoted number. -- `rev2/plot_rev2.py` — regenerates every new figure from `rev2/data/` - without rerunning experiments. -- `legacy/` — scripts for the pre-revision figures (synthetic three-scenario - study, attention maps, beta sweep, real-data study). +- `experiments/lib.py` — shared library: the single-superimposed-signal + uplink of the manuscript (Rayleigh / Rician / Nakagami fading, complex + phase residuals, timing offsets, CSI error; fixed disjoint transmit block + masks), the UWCA decoder (learned soft masks, active-set masking, top-k + masking, optional I/Q input), closed-form LMMSE reference receivers, + training loops, and evaluation metrics. +- `experiments/e1_fair_baselines.py` … `experiments/e9_topk_online.py` — + one self-contained script per study (see the table below). +- `experiments/data/` — raw JSON results behind every quoted number. +- `experiments/make_figures.py` — regenerates the figure PDFs from + `experiments/data/` only. +- `simulation/` — the three-scenario synthetic study, hyperparameter + ablations, threshold sweeps, and the real-data study. - `fig/` — figure PDFs as included in the manuscript. -**Detailed per-experiment documentation (setup, procedure, metrics, key results, reviewer-concern map): [docs/EXPERIMENTS.md](docs/EXPERIMENTS.md).** - -## Figure/number → script → data map +## Study → script → data map | Manuscript item | Script | Data | |---|---|---| -| Fig. SER vs SNR (3 scenarios) | `legacy/semantic_correlation_sim.py`, `legacy/maml_semantic.py` | `legacy/results/` | -| Fig. fairness vs optimal linear receivers | `rev2/e1_fair_baselines.py` | `rev2/data/e1_fair_baselines.json` | -| Fig. residual orthogonality | `rev2/e6_residual_orth.py` | `rev2/data/e6_residual_orth.json` | -| Phase-error robustness (complex model, CSI error) | `rev2/e2_phase_iui.py` | `rev2/data/e2_phase_iui.json` | -| Timing-offset robustness | `rev2/e4_v3_async.py` | `rev2/data/e4_v3_async.json` | -| Dynamic user population | `rev2/e3_dynamic_users.py` | `rev2/data/e3_dynamic_users.json` | -| Nonlinear view-network study | `rev2/e5_nonlinear.py` | `rev2/data/e5_nonlinear.json` | -| Meta-adaptation beyond SNR (OOD) | `rev2/e7_v2_meta.py` | `rev2/data/e7_v2_meta.json` | -| End-to-end anti-collapse study | `rev2/e8_v2_e2e.py` | `rev2/data/e8_v2_e2e.json` | -| Online top-k acquisition and timing | `rev2/e9_topk_online.py` | `rev2/data/e9_topk_online.json` | -| Real-data validation | `legacy/revision_realdata_train.py`, `legacy/revision_realdata_plot.py` | `legacy/results/` | +| SER vs SNR, three scenarios (Fig. 2) | `simulation/semantic_correlation_sim.py`, `simulation/maml_semantic.py` | `simulation/results/` | +| Optimal-linear-receiver fairness (Fig. 3) | `experiments/e1_fair_baselines.py` | `experiments/data/e1_fair_baselines.json` | +| Residual orthogonality (Fig. 4) | `experiments/e6_residual_orth.py` | `experiments/data/e6_residual_orth.json` | +| Complex phase-error model, CSI error | `experiments/e2_phase_iui.py` | `experiments/data/e2_phase_iui.json` | +| Timing offsets and realignment | `experiments/e4_async.py` | `experiments/data/e4_async.json` | +| Dynamic user population | `experiments/e3_dynamic_users.py` | `experiments/data/e3_dynamic_users.json` | +| Nonlinear view-network study | `experiments/e5_nonlinear.py` | `experiments/data/e5_nonlinear.json` | +| Adaptation across fading families | `experiments/e7_meta.py` | `experiments/data/e7_meta.json` | +| End-to-end training with anti-collapse | `experiments/e8_e2e.py` | `experiments/data/e8_e2e.json` | +| Online top-k acquisition and timing | `experiments/e9_topk_online.py` | `experiments/data/e9_topk_online.json` | +| beta sweep, attention maps, ablations | `simulation/revision_*.py`, `simulation/plot_figures.py` | `simulation/results/` | +| Real-data validation (Fig. 5) | `simulation/revision_realdata_train.py`, `simulation/revision_realdata_plot.py` | `simulation/results/` | ## Running ```bash -python rev2/e1_fair_baselines.py # writes rev2/data/e1_fair_baselines.json -python rev2/plot_rev2.py # regenerates the new figure PDFs +python experiments/e1_fair_baselines.py # writes experiments/data/e1_fair_baselines.json +python experiments/make_figures.py # rebuilds the figure PDFs from data/ ``` -Each experiment script is self-contained and writes its JSON into -`rev2/data/`. +Each study script is self-contained and writes its JSON into +`experiments/data/`. ## Citation and license diff --git a/docs/EXPERIMENTS.md b/docs/EXPERIMENTS.md index 3268aa0..c4fbfaa 100755 --- a/docs/EXPERIMENTS.md +++ b/docs/EXPERIMENTS.md @@ -1,20 +1,21 @@ -# Experiment Documentation +# Study Documentation -Detailed description of every experiment behind the manuscript +Detailed description of every study behind the manuscript "Relevance-Aware Semantic Multiple Access via Meta-Learned User-Wise -Cross-Attention." Each entry states the reviewer concern it addresses, the -exact setup, the procedure, the metrics, the key results, and the artifact -paths. All experiments run on a single NVIDIA RTX A4500 (PyTorch 2.10, CUDA -12.8), seed 42, and write raw JSON results consumed only by -`rev2/plot_rev2.py`. +Cross-Attention": the question each study answers, the exact setup, the +procedure, the metrics, the key results, and the artifact paths. All +studies run on a single NVIDIA RTX A4500 (PyTorch 2.10, CUDA 12.8), seed +42, and write raw JSON results consumed only by +`experiments/make_figures.py`. -**Common system model** (all rev2 experiments, matching manuscript Eq. (7)): -single superimposed uplink y = sum_v |h_v| e^{j dphi_v} (e_v (.) m_v) + n over -one d=64-dimensional frame; fixed {0,1} disjoint transmit block masks -(d/U coordinates per user, identical for every compared scheme); per-rail -noise std = sqrt(mean|y_tx|^2 / SNR); U=4 users, HIGH/LOW/MIX scenarios of -Table II unless stated. The decoder-side masks are separate learned soft -masks in [0,1]^d initialized at the block pattern. Training is the +**Common system model** (all `experiments/` studies, matching the +manuscript's received-signal model): single superimposed uplink +y = sum_v |h_v| e^{j dphi_v} (e_v (.) m_v) + n over one d=64-dimensional +frame; fixed {0,1} disjoint transmit block masks (d/U coordinates per user, +identical for every compared scheme); per-rail noise +std = sqrt(mean|y_tx|^2 / SNR); U=4 users and the HIGH/LOW/MIX scenarios of +the manuscript unless stated. The decoder-side masks are separate learned +soft masks in [0,1]^d initialized at the block pattern. Training is the manuscript's first-order meta-training aggregated over SNR tasks {0,4,...,20} dB, Adam 1e-3 (mask logits 0.1), 250-300 epochs, batch 64; evaluation uses 150-200 Monte Carlo batches of 64 per point. @@ -22,225 +23,218 @@ evaluation uses 150-200 Monte Carlo batches of 64 per point. --- ## E1 — Comparison fairness against optimal linear receivers -*Reviewer concerns: R1-10, R3-7 (d/U comparison "mathematically unfair"); -editor point 4.* -- **Question.** Is the OFDMA/SFDMA subspace ceiling an artifact of weak - baselines, and how much of the UWCA gain is mere dimensionality? +- **Question.** Is the d/U subspace ceiling of orthogonal access an + artifact of weak comparison schemes, and how much of the UWCA gain is + mere dimensionality rather than relevance exploitation? - **Setup.** For each scenario the true relevance matrix B (B_uv = - beta_u beta_v for shared scene, else 0) and the per-realization channel + beta_u beta_v for a shared scene, else 0) and the per-realization channel magnitudes are formed. Receivers evaluated on the *same* received frame: `uwca` (trained), `ofdma`, `sfdma`, `noma` (full-band power-domain SIC, powers 0.40/0.30/0.20/0.10), `lmmse_blind` (closed-form Wiener with cross-covariances zeroed), `lmmse_genie` (closed form with true B and - channel gains, manuscript Eq. (23)), `tdma_proj` (random orthonormal - 16-dim projection per user — an arbitrary orthogonal partition). + 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 - (SER 0.509 vs 0.508 @10 dB HIGH), tdma_proj and SFDMA coincide with them; - HIGH @20 dB: blind 0.327 -> UWCA 0.110 -> genie 0.044 (UWCA recovers 77% - of the blind-to-genie gap); LOW: genie = blind (nothing to exploit), - UWCA within 0.02 SER. -- **Artifacts.** `rev2/e1_fair_baselines.py` -> - `rev2/data/e1_fair_baselines.json` -> `fig/fig_fair.pdf` (manuscript - Fig. 3). Trained checkpoints `e1_uwca_{HIGH,LOW,MIX}.pt` (reused by E4/E6). + (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 + blind-to-genie gap without side information. LOW: genie = blind (nothing + to exploit), UWCA within 0.02 SER. +- **Artifacts.** `experiments/e1_fair_baselines.py` -> + `experiments/data/e1_fair_baselines.json` -> `fig/fig_fair.pdf` + (manuscript Fig. 3). Trained checkpoints `e1_uwca_{HIGH,LOW,MIX}.pt` + (reused by E4/E6). ## E2 — Full complex-baseband phase errors and CSI error -*Reviewer concerns: R1-1 (phase model underestimates IUI), R2-3 (CSI).* - **Question.** Does the multi-user superposition amplify residual phase - errors into severe inter-user interference once nothing is absorbed into a - noise term? + errors into severe inter-user interference once every leakage path is + simulated explicitly? - **Setup.** Complex channel with per-user residual dphi_u ~ N(0, sigma^2), - sigma in {0,5,10,15,20,30} deg; both rails simulated so every leakage path - exists. Three decoders: mismatch-trained (never saw phase errors), - phase-augmented (trained with sigma ~ U[0,20] deg), and a two-rail variant - whose keys/values read [Re;Im] (2d input). CSI sweep: amplitude error - h_hat = h(1+eps), eps ~ N(0, sigma_h^2), sigma_h up to 0.2, at 10 deg. - Learned-mask overlap (mean pairwise cosine) is also measured. + sigma in {0,5,10,15,20,30} deg; both rails simulated. Three decoders: + mismatch-trained (never saw phase errors), phase-augmented (trained with + sigma ~ U[0,20] deg), and a two-rail variant whose keys/values read + [Re;Im]. CSI sweep: amplitude error h_hat = h(1+eps), + eps ~ N(0, sigma_h^2), sigma_h up to 0.2, at 10 deg. The learned-mask + overlap (mean pairwise cosine) is also measured. - **Key results.** Mismatch-trained @10 dB: SER 0.270 -> 0.291 (20 deg) -> - 0.332 (30 deg); @20 dB 0.110 -> 0.127; augmentation and I/Q reading change - curves by less than Monte Carlo spread -> leakage is second order because - it scales with sin(dphi) x mask overlap (measured 0.26). CSI: UWCA - unchanged within 0.004 (uses no explicit CSI). -- **Artifacts.** `rev2/e2_phase_iui.py` -> `rev2/data/e2_phase_iui.json`; - `fig/fig_phase2.pdf` (repo; numbers narrated in manuscript Sec. VII-E). + 0.332 (30 deg); @20 dB 0.110 -> 0.127; augmentation and I/Q reading + change the curves by less than the Monte Carlo spread. The leakage is + second order because it scales with sin(dphi) times the mask overlap + (measured 0.26). CSI: UWCA unchanged within 0.004 (it uses no explicit + CSI). +- **Artifacts.** `experiments/e2_phase_iui.py` -> + `experiments/data/e2_phase_iui.json`; `fig/fig_phase2.pdf`. ## E3 — Dynamic user population -*Reviewer concerns: R1-6 (fixed U, costly retraining), R2-3 (fixed -identities).* -- **Setup.** U_max = 8 mask slots (d=64, 8 dims/slot), HIGH-type correlation - (beta_u = 0.6, one scene). Active set resampled per frame; inactive users - transmit nothing and their softmax scores are masked to -inf (the - scheduler announces the active set). Compared: one model trained with the - full population always active (never retrained), an activity-sampled - model, and per-count oracle models retrained from scratch for +- **Question.** Does a decoder provisioned for U_max users need retraining + when users arrive and depart? +- **Setup.** U_max = 8 mask slots (d=64, 8 dims/slot), high-correlation + scenario (beta_u = 0.6, one scene). The active set is resampled per + frame; inactive users transmit nothing and their softmax scores are + masked out (the scheduler announces the active set). Compared: one model + trained with the full population always active (never retrained), an + activity-sampled model, and per-count models retrained from scratch for |A| in {2,4,6,8}. Metric: mean cosine (the sqrt(1/8)=0.35 subspace ceiling saturates the binary SER at this scale). - **Key results.** The single full-population model sustains fidelity over - every active count (c 0.34 -> 0.39 for |A| = 2 -> 8 @10 dB) and matches or - exceeds the per-count retrained models (0.33/0.32/0.36/0.39); per-count - retraining is counterproductive (sparse populations train each slot on a - fraction of the traffic). -- **Artifacts.** `rev2/e3_dynamic_users.py` -> - `rev2/data/e3_dynamic_users.json`; `fig/fig_dynusers.pdf` (repo). + every active count (c 0.34 -> 0.39 for |A| = 2 -> 8 @10 dB) and matches + or exceeds the per-count retrained models (0.33/0.32/0.36/0.39); + per-count retraining is counterproductive, since sparse populations train + each slot on a fraction of the traffic. +- **Artifacts.** `experiments/e3_dynamic_users.py` -> + `experiments/data/e3_dynamic_users.json`; `fig/fig_dynusers.pdf`. -## E4 — Symbol-timing offsets (v3 = block-wise realignment) -*Reviewer concern: R1-8 (asynchronous reception / ISI).* +## E4 — Symbol-timing offsets and receiver-side realignment +- **Question.** How does the decoder behave under asynchronous reception, + and what does the standard timing-correction chain restore? - **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 (UWCA and OFDMA), - corrected by block-wise realignment using pilot-estimated offsets - (each user's block region shifted back individually), and corrected with - a deliberately impaired estimator (+-1 symbol on 20% of users). - v1 (`e4_async` results in json) showed offset-augmented *training* cannot - repair unknown shifts; v2 showed whole-frame realignment breaks - cross-block alignment — both superseded by v3. + frame (edge energy lost). Conditions: uncorrected reception (UWCA and + OFDMA), 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 -> - 0.76) because i.i.d. embedding coordinates fully decorrelate under a - one-symbol misalignment. 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) at every offset. The impaired estimator - costs 0.14 SER — whole-symbol residuals sacrifice the affected block, so - timing must be sub-symbol (standard timing advance). -- **Artifacts.** `rev2/e4_v3_async.py` -> `rev2/data/e4_v3_async.json`; - `fig/fig_async.pdf` (repo). + 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) + 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). +- **Artifacts.** `experiments/e4_async.py` -> + `experiments/data/e4_async.json`; `fig/fig_async.pdf`. ## E5 — Nonlinear inter-user semantic structure -*Reviewer concerns: R1-7, R2-5, R3-2 (linear scalar model too restrictive).* +- **Question.** Does the mechanism survive when no scalar or linear + description of the inter-user dependence exists? - **Setup.** Embeddings e_u = normalize(g_u([s; p_u])) with fixed random - 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 *measured* mean pairwise - cosine. -- **Key results.** Linear correlation is destroyed (mean cosine 0.006), so - the genie LMMSE collapses onto the ceiling (0.515 vs OFDMA 0.518 @10 dB) - — no scalar/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 share, so the further reduction - to 0.363 is pure nonlinear cross-user structure. -- **Artifacts.** `rev2/e5_nonlinear.py` -> `rev2/data/e5_nonlinear.json` - (numbers narrated in manuscript Sec. VII-G). + 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 + *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.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 + share, so the further reduction to 0.363 is pure nonlinear cross-user + structure. +- **Artifacts.** `experiments/e5_nonlinear.py` -> + `experiments/data/e5_nonlinear.json`. ## E6 — Residual orthogonality vs content preservation -*Reviewer concerns: R1-4, R2-2, R3-3 (semantic-orthogonality -self-contradiction).* +- **Question.** What exactly decorrelates at the decoder output: the + delivered content, or the errors? - **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, decoding residuals - r_u = e_hat_u - e_u; OFDMA decoded correlation as reference. -- **Key results.** Decoded-embedding correlation rises with SNR from 0.31 - toward the 0.39 input level (shared content preserved, not stripped); - residual correlation falls 0.23 -> 0.14 (2.8x below input) — the - emergent residual orthogonality. OFDMA's decoded correlation is 0.00 at - every SNR: orthogonal access erases the inter-user semantic structure. -- **Artifacts.** `rev2/e6_residual_orth.py` -> - `rev2/data/e6_residual_orth.json` -> `fig/fig_resorth.pdf` (manuscript - Fig. 4). + 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. +- **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 + 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` -> + `experiments/data/e6_residual_orth.json` -> `fig/fig_resorth.pdf` + (manuscript Fig. 4). -## E7 — Meta-adaptation beyond the SNR axis (v2) -*Reviewer concerns: R1-3, R3-4, R3-5 (MAML overkill for a 1-D lookup); -R1-9 (eta stability).* +## E7 — Adaptation across fading families +- **Question.** Does the meta-trained initialization cover a + multi-dimensional space of operating conditions that a one-dimensional + per-SNR model bank cannot, and is the sharpness scalar stable? - **Setup.** Task family = 6 SNRs x {Rayleigh, Rician K=5 dB, K=10 dB} x phase residual {0,10} deg (36 tasks). Systems: one initialization meta-trained over the full family (300 epochs, eta and outer-gradient - norm logged every epoch); per-SNR specialist bank trained on - Rayleigh/no-phase (the 1-D lookup, nearest-SNR index). Held-out tests: - Rician K=20 dB + 15 deg (10/18 dB), Nakagami m=3 + 5 deg (a fading law in - no training task), Rayleigh + 20 deg @6 dB, plus an in-distribution - check; zero-shot and after S in {1,5,10,20} inner steps (SGD 0.02, one + norm logged every epoch); a per-SNR specialist bank trained on + Rayleigh/no-phase and indexed by nearest SNR. Held-out tests: Rician + K=20 dB + 15 deg (10/18 dB), Nakagami m=3 + 5 deg (a fading law in no + training task), Rayleigh + 20 deg @6 dB, plus an in-distribution check; + zero-shot and after S in {1,5,10,20} inner steps (SGD 0.02, one 64-sample support batch). -- **Key results.** Family initialization transfers zero-shot with 9-46% - lower SER than the lookup on every held-out condition (e.g. 0.114 vs - 0.158 Rician-K20-15deg @10 dB; 0.139 vs 0.190 unseen Nakagami); inner-loop - adaptation is stable (within 0.005 over 20 steps). eta converges to 0.94 - (max 1.00), outer gradient norm <= 0.024 vs clip bound 5 — no softmax - saturation or divergence. -- **Artifacts.** `rev2/e7_v2_meta.py` -> `rev2/data/e7_v2_meta.json` - (includes eta/gradient trajectories). +- **Key results.** The family initialization transfers zero-shot with + 9-46% lower SER than the specialist bank on every held-out condition + (e.g. 0.114 vs 0.158 Rician-K20-15deg @10 dB; 0.139 vs 0.190 under the + unseen Nakagami law); inner-loop adaptation is stable (within 0.005 over + 20 steps). eta converges to 0.94 (max 1.00) and the outer gradient norm + stays below 0.024 against a clipping bound of 5 — no softmax saturation + or divergence. +- **Artifacts.** `experiments/e7_meta.py` -> + `experiments/data/e7_meta.json` (includes eta/gradient trajectories). -## E8 — End-to-end training with anti-collapse (v2) -*Reviewer concern: R1-5 (representation collapse prevents joint JSCC).* +## E8 — End-to-end training with anti-collapse regularization +- **Question.** Can the encoder be trained jointly with the decoder + without representation collapse, and what causes the collapse when it + occurs? - **Setup.** Four configurations on HIGH: frozen encoder (reference); naive end-to-end with the distortion measured against the encoder's own - output (the collapse-prone moving target); source-anchored end-to-end - (distortion vs normalize(x)); moving target + VICReg-style - variance-covariance regularizer (hinge at 1/sqrt(d) per-dim std, 25x - variance + 100/d covariance weights). Collapse-proof metric: batch - nearest-neighbor retrieval accuracy over the *encoded* gallery, plus the - effective rank of the encoder-output covariance. -- **Key results.** Naive collapses exactly as the reviewers expect: - retrieval falls to chance (0.005 vs 0.536 frozen @10 dB) — the pathology - is the moving-target objective, not the cross-attention. Source anchoring - keeps effective rank 59.6/64 and lands within 0.04 SER of frozen; VICReg - restores retrieval to 0.509 with a learned task-specific code. E2E - training is therefore demonstrated, and the frozen encoder in the main - experiments is a controlled-isolation choice. -- **Artifacts.** `rev2/e8_v2_e2e.py` -> `rev2/data/e8_v2_e2e.json`. + output (a moving target); source-anchored end-to-end (distortion vs + normalize(x)); moving target + a VICReg-style variance-covariance + regularizer (hinge at 1/sqrt(d) per-dim std, 25x variance + 100/d + covariance weights). Collapse-proof metric: batch nearest-neighbor + retrieval accuracy over the *encoded* gallery, plus the effective rank + of the encoder-output covariance. +- **Key results.** The naive configuration collapses (retrieval falls to + chance, 0.005 vs 0.536 frozen @10 dB), locating the pathology in the + moving-target objective rather than the cross-attention. Source + anchoring keeps effective rank 59.6 of 64 and lands within 0.04 SER of + the frozen reference; the variance-covariance regularizer restores + retrieval to 0.509 with a learned task-specific code. The frozen encoder + in the main experiments is therefore a controlled-isolation choice. +- **Artifacts.** `experiments/e8_e2e.py` -> + `experiments/data/e8_e2e.json`. ## E9 — Online top-k relevance acquisition and measured overhead -*Reviewer concerns: R1-2, R3-6 (circular dependency), R2-4 (cost at large -populations).* +- **Question.** How does sparse top-k attention obtain the relevance + ranking it needs, starting from no knowledge, and what does the + acquisition cost? - **Setup.** U=32, eight relevance clusters of four, k=4, briefly trained - full-attention model. Protocol: frames 1-3 full attention (needs no - relevance) while the BS accumulates beta_hat by EWMA (zeta=0.5) of - decoded-embedding cosines; from frame 4, per-row top-k via argpartition - on beta_hat. References: oracle top-k (peers selected from the true - clusters) and permanent full attention. Timing: decoder forward vs - EWMA-update + selection wall-clock for U in {8,16,32,64,128} - (256-sample frames, GPU, 20-run averages). + full-attention model. Protocol: frames 1-3 run full attention (which + needs no relevance knowledge) while the BS accumulates beta_hat by EWMA + (zeta=0.5) of decoded-embedding cosines; from frame 4, per-row top-k via + argpartition on beta_hat. References: an oracle whose peers are selected + from the true clusters, and permanent full attention. Timing: decoder + forward vs EWMA-update-plus-selection wall-clock for + U in {8,16,32,64,128} (256-sample frames, GPU, 20-run averages). - **Key results.** From the first post-warm-up frame the online selection matches the oracle exactly and slightly exceeds full attention (discarding irrelevant peers discards their noise); ranking needs far less accuracy than estimation because intra-cluster (~0.42) and - inter-cluster (~0) cosines are well separated. Estimation + selection - cost 0.02-0.04 ms vs the 0.3-5.4 ms decoder pass, incurred once per + inter-cluster (~0) cosines are well separated. Estimation plus selection + cost 0.02-0.04 ms against the 0.3-5.4 ms decoder pass, incurred once per relevance coherence interval. -- **Artifacts.** `rev2/e9_topk_online.py` -> - `rev2/data/e9_topk_online.json` (trajectory + timing). +- **Artifacts.** `experiments/e9_topk_online.py` -> + `experiments/data/e9_topk_online.json` (trajectory + timing). --- -## Legacy experiments (retained from the original study) +## Simulation studies (`simulation/`) - **Three-scenario SER study** (manuscript Fig. 2): analytical simulation - `legacy/semantic_correlation_sim.py` + trained decoder-only overlay - `legacy/maml_semantic.py --decoder_only`; threshold sweep tau in - [0.30,0.50] and mean-cosine table in `legacy/revision_experiments.py`. -- **beta sweep** (monotone gain law): `legacy/revision_betasweep.py` - (figure `fig/fig4_beta_sweep.pdf`, narrated in Sec. VII-C). -- **Attention heatmaps**: `legacy/plot_figures.py` - (figure `fig/fig6_hlm.pdf`, narrated in Sec. VII-C). -- **Hyperparameter ablations** (S, lambda, d, H, K): - `legacy/revision_ablation.py`, `legacy/revision_dsweep.py`, - `legacy/revision_e2e.py` (Sec. VII-D). + `simulation/semantic_correlation_sim.py` with the trained decoder-only + overlay from `simulation/maml_semantic.py --decoder_only`; threshold + sweep tau in [0.30,0.50] and the mean-cosine comparison in + `simulation/revision_experiments.py`. +- **beta sweep** (monotone gain law): `simulation/revision_betasweep.py` + (figure `fig/fig4_beta_sweep.pdf`). +- **Attention heatmaps**: `simulation/plot_figures.py` + (figure `fig/fig6_hlm.pdf`). +- **Hyperparameter studies** (S, lambda, d, H, K): + `simulation/revision_ablation.py`, `simulation/revision_dsweep.py`, + `simulation/revision_e2e.py`. - **Real-data study** (manuscript Fig. 5): UCI optical-recognition digits - (8x8=64 dims), `legacy/revision_realdata_train.py` + - `legacy/revision_realdata_plot.py` (Sec. VII-G). - -## Reviewer-concern -> experiment map - -| Concern | Experiment(s) | Manuscript | -|---|---|---| -| R1-1 phase IUI | E2 | Sec. III-A, VII-E | -| R1-2 / R3-6 top-k circularity | E9 | Sec. V-E, VII-H | -| R1-3 / R3-4 / R3-5 MAML vs lookup | E7 | Sec. V-E, VII-F | -| R1-4 / R2-2 / R3-3 orthogonality contradiction | E6 | Def. 3, Prop. 4, Fig. 4 | -| R1-5 representation collapse | E8 | Sec. VI-B | -| R1-6 dynamic U | E3 | Sec. IV-B, VII-E | -| R1-7 / R2-5 / R3-2 linear scalar model | E5 (+ real data) | Sec. III-B, VII-G | -| R1-8 asynchrony | E4 | Sec. III-A, VII-E | -| R1-9 eta stability | E7 logs | Sec. IV-A, VII-F | -| R1-10 / R3-7 d/U fairness | E1 | Prop. 3, Fig. 3, VII-B | -| R2-1 idealized proofs | assumption block + E1/E5/real data | Sec. V | -| R2-3 sync / CSI / identities / encoder | E4 / E2 / E3 / E8+E5 | Sec. III, VI-B, VII-E | -| R2-4 large-population cost | E9 timing | Sec. VII-H | -| R3-1 DSC novelty | (positioning) | Sec. II-A | + (8x8=64 dimensions), `simulation/revision_realdata_train.py` + + `simulation/revision_realdata_plot.py`. diff --git a/rev2/data/e1_fair_baselines.json b/experiments/data/e1_fair_baselines.json similarity index 100% rename from rev2/data/e1_fair_baselines.json rename to experiments/data/e1_fair_baselines.json diff --git a/rev2/data/e2_phase_iui.json b/experiments/data/e2_phase_iui.json similarity index 100% rename from rev2/data/e2_phase_iui.json rename to experiments/data/e2_phase_iui.json diff --git a/rev2/data/e3_dynamic_users.json b/experiments/data/e3_dynamic_users.json similarity index 100% rename from rev2/data/e3_dynamic_users.json rename to experiments/data/e3_dynamic_users.json diff --git a/rev2/data/e4_v3_async.json b/experiments/data/e4_async.json similarity index 100% rename from rev2/data/e4_v3_async.json rename to experiments/data/e4_async.json diff --git a/rev2/data/e5_nonlinear.json b/experiments/data/e5_nonlinear.json similarity index 100% rename from rev2/data/e5_nonlinear.json rename to experiments/data/e5_nonlinear.json diff --git a/rev2/data/e6_residual_orth.json b/experiments/data/e6_residual_orth.json similarity index 100% rename from rev2/data/e6_residual_orth.json rename to experiments/data/e6_residual_orth.json diff --git a/rev2/data/e7_v2_meta.json b/experiments/data/e7_meta.json similarity index 100% rename from rev2/data/e7_v2_meta.json rename to experiments/data/e7_meta.json diff --git a/rev2/data/e8_v2_e2e.json b/experiments/data/e8_e2e.json similarity index 100% rename from rev2/data/e8_v2_e2e.json rename to experiments/data/e8_e2e.json diff --git a/rev2/data/e9_topk_online.json b/experiments/data/e9_topk_online.json similarity index 100% rename from rev2/data/e9_topk_online.json rename to experiments/data/e9_topk_online.json diff --git a/rev2/e1_fair_baselines.py b/experiments/e1_fair_baselines.py similarity index 97% rename from rev2/e1_fair_baselines.py rename to experiments/e1_fair_baselines.py index 2e92330..fc732aa 100755 --- a/rev2/e1_fair_baselines.py +++ b/experiments/e1_fair_baselines.py @@ -1,4 +1,4 @@ -"""E1 — Degrees-of-freedom fairness (R1.10, R3.7). +"""E1 — Degrees-of-freedom fairness study. Adds full-dimensional receivers on the SAME received signal: - lmmse_blind : optimal linear receiver with cross-user correlation set to 0 diff --git a/rev2/e2_phase_iui.py b/experiments/e2_phase_iui.py similarity index 98% rename from rev2/e2_phase_iui.py rename to experiments/e2_phase_iui.py index 68970a1..f3cedaa 100755 --- a/rev2/e2_phase_iui.py +++ b/experiments/e2_phase_iui.py @@ -1,5 +1,5 @@ -"""E2 — Full complex-baseband phase-error model with inter-user leakage (R1.1) -plus CSI amplitude-error robustness (R2.3). +"""E2 — Full complex-baseband phase-error model with inter-user leakage, +plus CSI amplitude-error robustness. Three evaluation models on HIGH: scalar : real channel, per-user cos(dphi) attenuation only (old model) diff --git a/rev2/e3_dynamic_users.py b/experiments/e3_dynamic_users.py similarity index 98% rename from rev2/e3_dynamic_users.py rename to experiments/e3_dynamic_users.py index 665d10d..bc8af0d 100755 --- a/rev2/e3_dynamic_users.py +++ b/experiments/e3_dynamic_users.py @@ -1,4 +1,4 @@ -"""E3 — Dynamic user arrivals/departures (R1.6, R2.3). +"""E3 — Dynamic user arrivals and departures. U_max = 8 mask slots, d = 64. Activity-aware meta-training samples a random active subset each batch; at inference the attention softmax is restricted to diff --git a/rev2/e4_v3_async.py b/experiments/e4_async.py similarity index 95% rename from rev2/e4_v3_async.py rename to experiments/e4_async.py index 8118b7e..1c1d84e 100755 --- a/rev2/e4_v3_async.py +++ b/experiments/e4_async.py @@ -1,4 +1,4 @@ -"""E4 v3 — Timing offsets with BLOCK-WISE receiver realignment (R1.8). +"""E4 — Symbol-timing offsets with block-wise receiver realignment. The BS knows the per-user timing estimates (pilot-based) and realigns each user's block region individually inside the single received frame: @@ -88,7 +88,7 @@ for label, mode, ep in [("uwca_uncorrected", "uwca_unc", 0.0), for snr in out["snr_eval"]: cur[str(snr)] = [evaluate(mode, dm, snr, ep) for dm in dgrid] out["curves"][label] = cur - print(f"[E4v3] {label} 10dB SER: " + print(f"[E4] {label} 10dB SER: " f"{[round(a[0],3) for a in cur['10.0']]}", flush=True) -save_json("e4_v3_async.json", out) +save_json("e4_async.json", out) diff --git a/rev2/e5_nonlinear.py b/experiments/e5_nonlinear.py similarity index 96% rename from rev2/e5_nonlinear.py rename to experiments/e5_nonlinear.py index 173394f..a11077c 100755 --- a/rev2/e5_nonlinear.py +++ b/experiments/e5_nonlinear.py @@ -1,4 +1,4 @@ -"""E5 — Nonlinear inter-user semantic structure (R1.7, R2.5, R3.2). +"""E5 — Nonlinear inter-user semantic structure. Embeddings are produced by fixed random per-user nonlinear view networks e_u = normalize(g_u([kappa*s ; p_u])), so the inter-user dependence is diff --git a/rev2/e6_residual_orth.py b/experiments/e6_residual_orth.py similarity index 99% rename from rev2/e6_residual_orth.py rename to experiments/e6_residual_orth.py index 62006fe..ef16e99 100755 --- a/rev2/e6_residual_orth.py +++ b/experiments/e6_residual_orth.py @@ -1,4 +1,4 @@ -"""E6 — Residual (error) orthogonality vs. content preservation (R1.4, R3.3, R2.2). +"""E6 — Residual (error) orthogonality vs. content preservation. Resolves the claimed contradiction: the decoded embeddings PRESERVE the shared scene correlation (rho(e_hat_u, e_hat_v) tracks beta_uv), while the decoding diff --git a/rev2/e7_v2_meta.py b/experiments/e7_meta.py similarity index 86% rename from rev2/e7_v2_meta.py rename to experiments/e7_meta.py index b34b732..f212d72 100755 --- a/rev2/e7_v2_meta.py +++ b/experiments/e7_meta.py @@ -1,5 +1,5 @@ -"""E7 v2 — Meta-training over the multi-dimensional task family, OOD transfer, -adaptation sweep, and eta/gradient logging. +"""E7 — Meta-training over a multi-dimensional task family: held-out +transfer, adaptation sweep, and eta/gradient logging. meta : the paper's first-order meta-training aggregated over the FULL 36-task family (SNR x {Rayleigh, Rician K=5,10 dB} x phase {0,10 deg}) @@ -35,15 +35,15 @@ family = [{"snr_db": s, "phase_sigma_deg": p, **f} eta_log = [] m_meta = UWCA(d, U, H).to(DEVICE) -train_multitask(m_meta, gen, family, epochs=300, tag="E7v2-meta", +train_multitask(m_meta, gen, family, epochs=300, tag="E7-meta", log_state=eta_log) -torch.save(m_meta.state_dict(), lib.DATA / "e7v2_meta.pt") +torch.save(m_meta.state_dict(), lib.DATA / "e7_meta.pt") specialists = {} for s in snrs: m = UWCA(d, U, H).to(DEVICE) train_multitask(m, gen, [{"snr_db": s}], epochs=150, - tag=f"E7v2-spec{int(s)}") + tag=f"E7-spec{int(s)}") specialists[s] = m @@ -78,7 +78,7 @@ for name, t in test_tasks.items(): sers.append({"ser": s, "cos": c}) row[label] = sers out["results"][name] = row - print(f"[E7v2] {name}: meta={[round(x['ser'],3) for x in row['meta']]} " + print(f"[E7] {name}: meta={[round(x['ser'],3) for x in row['meta']]} " f"lookup={[round(x['ser'],3) for x in row['lookup']]}", flush=True) etas = [e["eta"] for e in eta_log] @@ -87,7 +87,7 @@ out["eta_traj"] = etas[::5] out["gnorm_traj"] = gns[::5] out["eta_final"], out["eta_max"] = etas[-1], max(etas) out["gnorm_max"] = max(gns) -print(f"[E7v2] eta final={etas[-1]:.3f} max={max(etas):.3f} " +print(f"[E7] eta final={etas[-1]:.3f} max={max(etas):.3f} " f"gnorm max={max(gns):.3f}", flush=True) -save_json("e7_v2_meta.json", out) +save_json("e7_meta.json", out) diff --git a/rev2/e8_v2_e2e.py b/experiments/e8_e2e.py similarity index 95% rename from rev2/e8_v2_e2e.py rename to experiments/e8_e2e.py index fd49bb7..559bcc3 100755 --- a/rev2/e8_v2_e2e.py +++ b/experiments/e8_e2e.py @@ -1,4 +1,4 @@ -"""E8 v2 — End-to-end joint encoder-decoder training (R1.5), source-anchored. +"""E8 — End-to-end joint encoder-decoder training, source-anchored metrics. All fidelity metrics are measured against the SOURCE embedding normalize(x), never against the trainable encoder output (a moving target that makes @@ -69,7 +69,7 @@ def train(mode, epochs=300): torch.nn.utils.clip_grad_norm_(model.parameters(), 5.0) opt.step() if ep % 75 == 0: - print(f" [E8v2-{mode}] ep {ep}/{epochs} " + print(f" [E8-{mode}] ep {ep}/{epochs} " f"loss={float(loss)/len(snrs):.4f}", flush=True) return model, enc @@ -119,7 +119,7 @@ for mode in ["frozen", "e2e_moving", "e2e_anchored", "e2e_vicreg"]: erank = collapse_metrics(enc) ss, cc, rr = curves(model, enc) out["configs"][mode] = {"ser": ss, "cos": cc, "retr": rr, "erank": erank} - print(f"[E8v2] {mode}: erank={erank:.1f} SER@10={ss[5]:.3f} " + print(f"[E8] {mode}: erank={erank:.1f} SER@10={ss[5]:.3f} " f"cos@10={cc[5]:.3f} retr@10={rr[5]:.3f}", flush=True) -save_json("e8_v2_e2e.json", out) +save_json("e8_e2e.json", out) diff --git a/rev2/e9_topk_online.py b/experiments/e9_topk_online.py similarity index 98% rename from rev2/e9_topk_online.py rename to experiments/e9_topk_online.py index eb736f7..678b28a 100755 --- a/rev2/e9_topk_online.py +++ b/experiments/e9_topk_online.py @@ -1,5 +1,5 @@ -"""E9 — Online relevance acquisition for sparse top-k attention (R1.2, R3.6) -and measured selection/sorting overhead (R2.4). +"""E9 — Online relevance acquisition for sparse top-k attention and measured +selection overhead. Protocol (U=32, 8 clusters of 4, k=4): frames 1..3 : full attention; the BS estimates beta_hat from the decoded diff --git a/rev2/lib.py b/experiments/lib.py similarity index 99% rename from rev2/lib.py rename to experiments/lib.py index 69092f1..b4872cb 100755 --- a/rev2/lib.py +++ b/experiments/lib.py @@ -1,5 +1,5 @@ """ -Shared library for TWC revision-2 experiments (new submission). +Shared library for the UWCA semantic multiple access studies. Single-signal uplink model matching the manuscript: y = sum_v g_v (e_v ⊙ m_v) + n, g_v = |h_v| e^{jΔφ_v} All experiments import from here. Seed fixed = 42. diff --git a/rev2/plot_rev2.py b/experiments/make_figures.py similarity index 94% rename from rev2/plot_rev2.py rename to experiments/make_figures.py index 566eca9..9e23204 100755 --- a/rev2/plot_rev2.py +++ b/experiments/make_figures.py @@ -1,158 +1,158 @@ -"""Generate the five new revision figures from data/*.json into ../Relevance_TWCOM_R2/fig/. -Uniform geometry: 8:6 axes box, shared rcParams, no tight bounding box. -""" -import json -from pathlib import Path - -import matplotlib -matplotlib.use("Agg") -import matplotlib.pyplot as plt -import numpy as np - -HERE = Path(__file__).resolve().parent -DATA = HERE / "data" -FIG = HERE.parent / "Relevance_TWCOM_R2" / "fig" -FIG.mkdir(exist_ok=True) - -plt.rcParams.update({ - "font.size": 9, "axes.labelsize": 10, "axes.titlesize": 10, - "legend.fontsize": 7.5, "xtick.labelsize": 8.5, "ytick.labelsize": 8.5, - "lines.linewidth": 1.4, "lines.markersize": 4.5, - "figure.dpi": 200, "savefig.dpi": 300, - "grid.alpha": 0.35, "axes.grid": True, -}) -AXRECT = [0.17, 0.165, 0.79, 0.80] # single panel 8:6-ish -FSIZE = (3.5, 2.75) - - -def newfig(): - f = plt.figure(figsize=FSIZE) - ax = f.add_axes(AXRECT) - return f, ax - - -def save(f, name, axes=None): - f.canvas.draw() - if axes: - for ax in axes: - for lbl in [ax.xaxis.label, ax.yaxis.label]: - bb = lbl.get_window_extent() - fw, fh = f.canvas.get_width_height() - assert bb.x0 >= -1 and bb.y0 >= -1 and bb.x1 <= fw + 1 \ - and bb.y1 <= fh + 1, f"label clipped in {name}" - f.savefig(FIG / name) - plt.close(f) - print("saved", FIG / name) - - -C = {"ofdma": "#546E7A", "blind": "#8D6E63", "noma": "#E65100", - "uwca": "#1565C0", "genie": "#2E7D32", "extra": "#C62828", - "aux": "#6A1B9A"} - -# ---------------------------------------------------------------- fig_fair -- -# axes box kept at 2.59 x 2.12 in; panel tags "(a)"/"(b)" BELOW the panels -d = json.load(open(DATA / "e1_fair_baselines.json")) -snr = d["snr"] -FH = 3.10 # taller canvas for below-axis tags -AXH = 2.12 / FH -AXB = 0.86 / FH -f = plt.figure(figsize=(7.1, FH)) -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["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["lmmse_genie"]["ser"], "d:", color=C["genie"], - label="LMMSE-genie") - ax.set_xlabel("SNR (dB)") - ax.set_ylabel("SER") - ax.set_xlim(0, 20) - ax.text(0.5, -0.31, ttl, transform=ax.transAxes, - ha="center", va="top", fontsize=10) -axs[1].legend(loc="lower left", framealpha=0.9, fontsize=7) -save(f, "fig_fair.pdf", axs) - -# -------------------------------------------------------------- fig_resorth -- -d = json.load(open(DATA / "e6_residual_orth.json")) -snr = d["snr"] -f, ax = newfig() -ax.plot(snr, d["uwca"]["rho_input"], "k--", label=r"input $\rho(\mathbf{e}_u,\mathbf{e}_v)$") -ax.plot(snr, d["uwca"]["rho_decoded"], "o-", color=C["uwca"], - label=r"UWCA decoded $\rho(\hat{\mathbf{e}}_u,\hat{\mathbf{e}}_v)$") -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") -ax.set_xlabel("SNR (dB)") -ax.set_ylabel("Pearson correlation") -ax.set_xlim(0, 20) -ax.set_ylim(-0.05, 0.62) -ax.legend(loc="upper right", framealpha=0.9, fontsize=6.8) -save(f, "fig_resorth.pdf", [ax]) - -# --------------------------------------------------------------- fig_phase2 -- -d = json.load(open(DATA / "e2_phase_iui.json")) -sg = d["sigma_phi_deg"] -f, ax = newfig() -sty = {"complexI_zerotrain": ("o-", C["uwca"], "mismatch-trained"), - "complexI_augtrain": ("s--", C["genie"], "phase-augmented"), - "complexIQ_iqtrain": ("^:", C["extra"], "two-rail (I/Q)")} -for key, (mk, col, lab) in sty.items(): - ax.plot(sg, d["curves"][key]["10.0"]["ser"], mk, color=col, label=lab) -for key, (mk, col, lab) in sty.items(): - ax.plot(sg, d["curves"][key]["20.0"]["ser"], mk, color=col, alpha=0.45, - label="_nolegend_") -ax.annotate("10 dB", xy=(1.5, 0.29), fontsize=8) -ax.annotate("20 dB", xy=(1.5, 0.135), fontsize=8) -ax.set_xlabel(r"phase residual $\sigma_\varphi$ (deg)") -ax.set_ylabel("SER") -ax.set_ylim(0.0, 0.45) -ax.legend(loc="upper left", framealpha=0.9, fontsize=7) -save(f, "fig_phase2.pdf", [ax]) - -# ---------------------------------------------------------------- fig_async -- -d = json.load(open(DATA / "e4_v3_async.json")) -dm = d["dmax"] -f, ax = newfig() -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") -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") -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)") -ax.set_ylabel("SER") -ax.set_ylim(0, 1.05) -ax.legend(loc="lower right", ncol=2, framealpha=0.9, fontsize=6.0) -save(f, "fig_async.pdf", [ax]) - -# ------------------------------------------------------------- fig_dynusers -- -d = json.load(open(DATA / "e3_dynamic_users.json")) -ks = d["k"] -f = plt.figure(figsize=FSIZE) -ax = f.add_axes([0.20, 0.165, 0.76, 0.80]) -ax.plot(ks, [a[1] for a in d["fixed8"]["10.0"]], "o-", color=C["uwca"], - label="single model, 10 dB") -ax.plot(ks, [a[1] for a in d["fixed8"]["20.0"]], "o--", color=C["uwca"], - alpha=0.5, label="single model, 20 dB") -ok = sorted(int(k) for k in d["oracle"]) -ax.plot(ok, [d["oracle"][str(k)]["10.0"][1] for k in ok], "s", ls="none", - color=C["extra"], label="per-count retrained, 10 dB") -ax.plot(ok, [d["oracle"][str(k)]["20.0"][1] for k in ok], "s", ls="none", - mfc="none", color=C["extra"], label="per-count retrained, 20 dB") -ax.set_xlabel(r"number of active users $|\mathcal{A}|$") -ax.set_ylabel(r"mean cosine $\bar{c}$") -ax.set_ylim(0.28, 0.47) -ax.legend(loc="upper left", framealpha=0.9, fontsize=6.8) -save(f, "fig_dynusers.pdf", [ax]) - -print("ALL FIGURES DONE") +"""Regenerate the figure PDFs from data/*.json into ../fig/. +Uniform geometry: 8:6 axes box, shared rcParams, no tight bounding box. +""" +import json +from pathlib import Path + +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt +import numpy as np + +HERE = Path(__file__).resolve().parent +DATA = HERE / "data" +FIG = HERE.parent / "fig" +FIG.mkdir(exist_ok=True) + +plt.rcParams.update({ + "font.size": 9, "axes.labelsize": 10, "axes.titlesize": 10, + "legend.fontsize": 7.5, "xtick.labelsize": 8.5, "ytick.labelsize": 8.5, + "lines.linewidth": 1.4, "lines.markersize": 4.5, + "figure.dpi": 200, "savefig.dpi": 300, + "grid.alpha": 0.35, "axes.grid": True, +}) +AXRECT = [0.17, 0.165, 0.79, 0.80] # single panel 8:6-ish +FSIZE = (3.5, 2.75) + + +def newfig(): + f = plt.figure(figsize=FSIZE) + ax = f.add_axes(AXRECT) + return f, ax + + +def save(f, name, axes=None): + f.canvas.draw() + if axes: + for ax in axes: + for lbl in [ax.xaxis.label, ax.yaxis.label]: + bb = lbl.get_window_extent() + fw, fh = f.canvas.get_width_height() + assert bb.x0 >= -1 and bb.y0 >= -1 and bb.x1 <= fw + 1 \ + and bb.y1 <= fh + 1, f"label clipped in {name}" + f.savefig(FIG / name) + plt.close(f) + print("saved", FIG / name) + + +C = {"ofdma": "#546E7A", "blind": "#8D6E63", "noma": "#E65100", + "uwca": "#1565C0", "genie": "#2E7D32", "extra": "#C62828", + "aux": "#6A1B9A"} + +# ---------------------------------------------------------------- fig_fair -- +# axes box kept at 2.59 x 2.12 in; panel tags "(a)"/"(b)" BELOW the panels +d = json.load(open(DATA / "e1_fair_baselines.json")) +snr = d["snr"] +FH = 3.10 # taller canvas for below-axis tags +AXH = 2.12 / FH +AXB = 0.86 / FH +f = plt.figure(figsize=(7.1, FH)) +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["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["lmmse_genie"]["ser"], "d:", color=C["genie"], + label="LMMSE-genie") + ax.set_xlabel("SNR (dB)") + ax.set_ylabel("SER") + ax.set_xlim(0, 20) + ax.text(0.5, -0.31, ttl, transform=ax.transAxes, + ha="center", va="top", fontsize=10) +axs[1].legend(loc="lower left", framealpha=0.9, fontsize=7) +save(f, "fig_fair.pdf", axs) + +# -------------------------------------------------------------- fig_resorth -- +d = json.load(open(DATA / "e6_residual_orth.json")) +snr = d["snr"] +f, ax = newfig() +ax.plot(snr, d["uwca"]["rho_input"], "k--", label=r"input $\rho(\mathbf{e}_u,\mathbf{e}_v)$") +ax.plot(snr, d["uwca"]["rho_decoded"], "o-", color=C["uwca"], + label=r"UWCA decoded $\rho(\hat{\mathbf{e}}_u,\hat{\mathbf{e}}_v)$") +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") +ax.set_xlabel("SNR (dB)") +ax.set_ylabel("Pearson correlation") +ax.set_xlim(0, 20) +ax.set_ylim(-0.05, 0.62) +ax.legend(loc="upper right", framealpha=0.9, fontsize=6.8) +save(f, "fig_resorth.pdf", [ax]) + +# --------------------------------------------------------------- fig_phase2 -- +d = json.load(open(DATA / "e2_phase_iui.json")) +sg = d["sigma_phi_deg"] +f, ax = newfig() +sty = {"complexI_zerotrain": ("o-", C["uwca"], "mismatch-trained"), + "complexI_augtrain": ("s--", C["genie"], "phase-augmented"), + "complexIQ_iqtrain": ("^:", C["extra"], "two-rail (I/Q)")} +for key, (mk, col, lab) in sty.items(): + ax.plot(sg, d["curves"][key]["10.0"]["ser"], mk, color=col, label=lab) +for key, (mk, col, lab) in sty.items(): + ax.plot(sg, d["curves"][key]["20.0"]["ser"], mk, color=col, alpha=0.45, + label="_nolegend_") +ax.annotate("10 dB", xy=(1.5, 0.29), fontsize=8) +ax.annotate("20 dB", xy=(1.5, 0.135), fontsize=8) +ax.set_xlabel(r"phase residual $\sigma_\varphi$ (deg)") +ax.set_ylabel("SER") +ax.set_ylim(0.0, 0.45) +ax.legend(loc="upper left", framealpha=0.9, fontsize=7) +save(f, "fig_phase2.pdf", [ax]) + +# ---------------------------------------------------------------- fig_async -- +d = json.load(open(DATA / "e4_async.json")) +dm = d["dmax"] +f, ax = newfig() +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") +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") +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)") +ax.set_ylabel("SER") +ax.set_ylim(0, 1.05) +ax.legend(loc="lower right", ncol=2, framealpha=0.9, fontsize=6.0) +save(f, "fig_async.pdf", [ax]) + +# ------------------------------------------------------------- fig_dynusers -- +d = json.load(open(DATA / "e3_dynamic_users.json")) +ks = d["k"] +f = plt.figure(figsize=FSIZE) +ax = f.add_axes([0.20, 0.165, 0.76, 0.80]) +ax.plot(ks, [a[1] for a in d["fixed8"]["10.0"]], "o-", color=C["uwca"], + label="single model, 10 dB") +ax.plot(ks, [a[1] for a in d["fixed8"]["20.0"]], "o--", color=C["uwca"], + alpha=0.5, label="single model, 20 dB") +ok = sorted(int(k) for k in d["oracle"]) +ax.plot(ok, [d["oracle"][str(k)]["10.0"][1] for k in ok], "s", ls="none", + color=C["extra"], label="per-count retrained, 10 dB") +ax.plot(ok, [d["oracle"][str(k)]["20.0"][1] for k in ok], "s", ls="none", + mfc="none", color=C["extra"], label="per-count retrained, 20 dB") +ax.set_xlabel(r"number of active users $|\mathcal{A}|$") +ax.set_ylabel(r"mean cosine $\bar{c}$") +ax.set_ylim(0.28, 0.47) +ax.legend(loc="upper left", framealpha=0.9, fontsize=6.8) +save(f, "fig_dynusers.pdf", [ax]) + +print("ALL FIGURES DONE") diff --git a/rev2/data/e4_async.json b/rev2/data/e4_async.json deleted file mode 100755 index bba5ccd..0000000 --- a/rev2/data/e4_async.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "dmax": [ - 0, - 1, - 2, - 4, - 8 - ], - "snr_eval": [ - 10.0, - 20.0 - ], - "sync_trained": { - "10.0": [ - [ - 0.2683203125, - 0.49533248856663703 - ], - [ - 0.7208984375, - 0.242251892760396 - ], - [ - 0.83734375, - 0.15587599329650403 - ], - [ - 0.91517578125, - 0.09062198633328081 - ], - [ - 0.95876953125, - 0.0465814154734835 - ] - ], - "20.0": [ - [ - 0.10884765625, - 0.5421956545114517 - ], - [ - 0.65294921875, - 0.2639770006388426 - ], - [ - 0.79462890625, - 0.1728138119354844 - ], - [ - 0.8930859375, - 0.09787379436194897 - ], - [ - 0.94958984375, - 0.048505370183847846 - ] - ] - }, - "aug_trained": { - "10.0": [ - [ - 0.61974609375, - 0.4028245759010315 - ], - [ - 0.80044921875, - 0.20371038138866424 - ], - [ - 0.8644921875, - 0.14209178265184164 - ], - [ - 0.91814453125, - 0.08969146355986596 - ], - [ - 0.95642578125, - 0.05853485576808452 - ] - ], - "20.0": [ - [ - 0.50931640625, - 0.4357883331179619 - ], - [ - 0.7403515625, - 0.22275549590587615 - ], - [ - 0.82765625, - 0.15037441711872815 - ], - [ - 0.8998046875, - 0.09680132243782281 - ], - [ - 0.94701171875, - 0.06260592238977551 - ] - ] - }, - "ofdma": { - "10.0": [ - [ - 0.508203125, - 0.4361314806342125 - ], - [ - 0.76318359375, - 0.21654599383473397 - ], - [ - 0.84802734375, - 0.14174282837659122 - ], - [ - 0.91091796875, - 0.08382582331076265 - ], - [ - 0.9557421875, - 0.043560955775901675 - ] - ], - "20.0": [ - [ - 0.32919921875, - 0.48276128739118573 - ], - [ - 0.68083984375, - 0.23667482212185859 - ], - [ - 0.79951171875, - 0.15432738859206438 - ], - [ - 0.88361328125, - 0.09289443053305149 - ], - [ - 0.94376953125, - 0.04812081384472549 - ] - ] - } -} \ No newline at end of file diff --git a/rev2/data/e4_v2_async.json b/rev2/data/e4_v2_async.json deleted file mode 100755 index bd7c8df..0000000 --- a/rev2/data/e4_v2_async.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "dmax": [ - 0, - 1, - 2, - 4, - 8 - ], - "snr_eval": [ - 10.0, - 20.0 - ], - "curves": { - "uwca_uncorrected": { - "10.0": [ - [ - 0.26302734375, - 0.49663727134466173 - ], - [ - 0.72521484375, - 0.24080994725227356 - ], - [ - 0.83720703125, - 0.1565597005933523 - ], - [ - 0.9140234375, - 0.09298811599612236 - ], - [ - 0.95828125, - 0.045774847799912095 - ] - ], - "20.0": [ - [ - 0.1059765625, - 0.5424016201496125 - ], - [ - 0.64892578125, - 0.2658117674291134 - ], - [ - 0.79361328125, - 0.1722280565276742 - ], - [ - 0.89083984375, - 0.09743562746793032 - ], - [ - 0.94720703125, - 0.051459523779340086 - ] - ] - }, - "ofdma_uncorrected": { - "10.0": [ - [ - 0.50865234375, - 0.43710263311862946 - ], - [ - 0.76029296875, - 0.2157912875711918 - ], - [ - 0.8459375, - 0.14081338860094547 - ], - [ - 0.9133984375, - 0.08355670671910048 - ], - [ - 0.9558984375, - 0.04483862698078155 - ] - ], - "20.0": [ - [ - 0.3259765625, - 0.4835157571732998 - ], - [ - 0.68376953125, - 0.23547276966273784 - ], - [ - 0.7949609375, - 0.1552288055792451 - ], - [ - 0.886640625, - 0.09062881361693144 - ], - [ - 0.94580078125, - 0.04779002937488258 - ] - ] - }, - "uwca_corrected": { - "10.0": [ - [ - 0.2655859375, - 0.49615009009838107 - ], - [ - 0.44373046875, - 0.4498268289864063 - ], - [ - 0.5089453125, - 0.4324074760079384 - ], - [ - 0.578828125, - 0.4135142582654953 - ], - [ - 0.6497265625, - 0.38951330006122586 - ] - ], - "20.0": [ - [ - 0.11287109375, - 0.5400555384159088 - ], - [ - 0.30025390625, - 0.4892691922187805 - ], - [ - 0.38263671875, - 0.46662179097533224 - ], - [ - 0.4680078125, - 0.4436407870054245 - ], - [ - 0.56431640625, - 0.41600462675094607 - ] - ] - }, - "ofdma_corrected": { - "10.0": [ - [ - 0.50662109375, - 0.4369038107991219 - ], - [ - 0.53580078125, - 0.42834869906306267 - ], - [ - 0.55255859375, - 0.42323953911662104 - ], - [ - 0.58455078125, - 0.41399665489792825 - ], - [ - 0.638125, - 0.3948879507184029 - ] - ], - "20.0": [ - [ - 0.32869140625, - 0.48293048948049544 - ], - [ - 0.371953125, - 0.4720873585343361 - ], - [ - 0.403359375, - 0.46447199031710623 - ], - [ - 0.45724609375, - 0.44948955610394475 - ], - [ - 0.53859375, - 0.42527498200535774 - ] - ] - }, - "uwca_corrected_err20": { - "10.0": [ - [ - 0.26931640625, - 0.49530661895871164 - ], - [ - 0.5301953125, - 0.3851976223289967 - ], - [ - 0.58978515625, - 0.3633556814491749 - ], - [ - 0.65712890625, - 0.33998452201485635 - ], - [ - 0.7178125, - 0.3151700422167778 - ] - ], - "20.0": [ - [ - 0.11326171875, - 0.5398727428913116 - ], - [ - 0.407734375, - 0.4189111949503422 - ], - [ - 0.48626953125, - 0.39070201337337496 - ], - [ - 0.56044921875, - 0.3684333018958569 - ], - [ - 0.64603515625, - 0.33623267963528636 - ] - ] - } - } -} \ No newline at end of file diff --git a/rev2/data/e7_meta_family.json b/rev2/data/e7_meta_family.json deleted file mode 100755 index 68d9a42..0000000 --- a/rev2/data/e7_meta_family.json +++ /dev/null @@ -1,1363 +0,0 @@ -{ - "eta_log": [ - { - "ep": 1, - "eta": 0.9990192651748657, - "gnorm": 0.038006973752749036 - }, - { - "ep": 2, - "eta": 0.9980369210243225, - "gnorm": 0.04652641460638758 - }, - { - "ep": 3, - "eta": 0.9983369708061218, - "gnorm": 0.03980581122887474 - }, - { - "ep": 4, - "eta": 0.9986134767532349, - "gnorm": 0.04418798788221026 - }, - { - "ep": 5, - "eta": 0.9984407424926758, - "gnorm": 0.040934183387921076 - }, - { - "ep": 6, - "eta": 0.9980592131614685, - "gnorm": 0.036929845164981163 - }, - { - "ep": 7, - "eta": 0.9975496530532837, - "gnorm": 0.04040146844166741 - }, - { - "ep": 8, - "eta": 0.9975811243057251, - "gnorm": 0.039724967802825494 - }, - { - "ep": 9, - "eta": 0.9978862404823303, - "gnorm": 0.040995792103176096 - }, - { - "ep": 10, - "eta": 0.997948408126831, - "gnorm": 0.03659875014385617 - }, - { - "ep": 11, - "eta": 0.9981780648231506, - "gnorm": 0.039044969325803834 - }, - { - "ep": 12, - "eta": 0.9985087513923645, - "gnorm": 0.041366439055027175 - }, - { - "ep": 13, - "eta": 0.9987502694129944, - "gnorm": 0.039061081366130054 - }, - { - "ep": 14, - "eta": 0.9989885091781616, - "gnorm": 0.039400996610909234 - }, - { - "ep": 15, - "eta": 0.9991781115531921, - "gnorm": 0.03678783402052469 - }, - { - "ep": 16, - "eta": 0.9992814660072327, - "gnorm": 0.03659825992482987 - }, - { - "ep": 17, - "eta": 0.9995341300964355, - "gnorm": 0.037054545040101604 - }, - { - "ep": 18, - "eta": 0.9999374747276306, - "gnorm": 0.038715014313816326 - }, - { - "ep": 19, - "eta": 1.0001881122589111, - "gnorm": 0.03789407043071646 - }, - { - "ep": 20, - "eta": 1.0005595684051514, - "gnorm": 0.038550871236143015 - }, - { - "ep": 21, - "eta": 1.0007685422897339, - "gnorm": 0.03649992931495107 - }, - { - "ep": 22, - "eta": 1.0008692741394043, - "gnorm": 0.03571594805273961 - }, - { - "ep": 23, - "eta": 1.0008081197738647, - "gnorm": 0.035277175127828304 - }, - { - "ep": 24, - "eta": 1.000643253326416, - "gnorm": 0.03194339791562225 - }, - { - "ep": 25, - "eta": 1.000465989112854, - "gnorm": 0.03764984812598462 - }, - { - "ep": 26, - "eta": 1.0005122423171997, - "gnorm": 0.037558134773709034 - }, - { - "ep": 27, - "eta": 1.0007238388061523, - "gnorm": 0.03640723308530672 - }, - { - "ep": 28, - "eta": 1.0008293390274048, - "gnorm": 0.03637229956926009 - }, - { - "ep": 29, - "eta": 1.0010013580322266, - "gnorm": 0.03639330254855463 - }, - { - "ep": 30, - "eta": 1.0010873079299927, - "gnorm": 0.03574180828199655 - }, - { - "ep": 31, - "eta": 1.0009154081344604, - "gnorm": 0.03585782979550044 - }, - { - "ep": 32, - "eta": 1.0008068084716797, - "gnorm": 0.031857617363622 - }, - { - "ep": 33, - "eta": 1.0006731748580933, - "gnorm": 0.03359150000356407 - }, - { - "ep": 34, - "eta": 1.0006250143051147, - "gnorm": 0.03472568463910883 - }, - { - "ep": 35, - "eta": 1.0004544258117676, - "gnorm": 0.03335741535776567 - }, - { - "ep": 36, - "eta": 1.0002228021621704, - "gnorm": 0.033835460102358286 - }, - { - "ep": 37, - "eta": 0.9998679757118225, - "gnorm": 0.03380470928233163 - }, - { - "ep": 38, - "eta": 0.9996076822280884, - "gnorm": 0.03541624032696515 - }, - { - "ep": 39, - "eta": 0.9992972016334534, - "gnorm": 0.03186819681100175 - }, - { - "ep": 40, - "eta": 0.9989750981330872, - "gnorm": 0.03271282080157712 - }, - { - "ep": 41, - "eta": 0.9986339211463928, - "gnorm": 0.03334166877713561 - }, - { - "ep": 42, - "eta": 0.9982545971870422, - "gnorm": 0.031291180170164634 - }, - { - "ep": 43, - "eta": 0.9978289008140564, - "gnorm": 0.030367838014772403 - }, - { - "ep": 44, - "eta": 0.9974743723869324, - "gnorm": 0.0310094771466002 - }, - { - "ep": 45, - "eta": 0.9972363710403442, - "gnorm": 0.031032334171331666 - }, - { - "ep": 46, - "eta": 0.9969791173934937, - "gnorm": 0.03340246447303633 - }, - { - "ep": 47, - "eta": 0.9967769384384155, - "gnorm": 0.032490301092580505 - }, - { - "ep": 48, - "eta": 0.996473491191864, - "gnorm": 0.03144128190378515 - }, - { - "ep": 49, - "eta": 0.9961768388748169, - "gnorm": 0.03371998013200434 - }, - { - "ep": 50, - "eta": 0.9961283802986145, - "gnorm": 0.03159268482897737 - }, - { - "ep": 51, - "eta": 0.9961898922920227, - "gnorm": 0.03123107762075203 - }, - { - "ep": 52, - "eta": 0.9963228106498718, - "gnorm": 0.0305217258139266 - }, - { - "ep": 53, - "eta": 0.9964300394058228, - "gnorm": 0.03247623799525318 - }, - { - "ep": 54, - "eta": 0.9965209364891052, - "gnorm": 0.033092630746670425 - }, - { - "ep": 55, - "eta": 0.9966624975204468, - "gnorm": 0.03186653480209571 - }, - { - "ep": 56, - "eta": 0.9968195557594299, - "gnorm": 0.030122093630254556 - }, - { - "ep": 57, - "eta": 0.9970589280128479, - "gnorm": 0.02990219112770709 - }, - { - "ep": 58, - "eta": 0.9973171949386597, - "gnorm": 0.03075731185517765 - }, - { - "ep": 59, - "eta": 0.9975522756576538, - "gnorm": 0.0316809967695037 - }, - { - "ep": 60, - "eta": 0.9978411793708801, - "gnorm": 0.031276685116206765 - }, - { - "ep": 61, - "eta": 0.9982011318206787, - "gnorm": 0.03084831138654701 - }, - { - "ep": 62, - "eta": 0.9986811876296997, - "gnorm": 0.030531302844361577 - }, - { - "ep": 63, - "eta": 0.9991759657859802, - "gnorm": 0.030393395954223346 - }, - { - "ep": 64, - "eta": 0.999567985534668, - "gnorm": 0.030599295652196806 - }, - { - "ep": 65, - "eta": 0.9998006224632263, - "gnorm": 0.03264906227389845 - }, - { - "ep": 66, - "eta": 0.9999173283576965, - "gnorm": 0.03157141229877399 - }, - { - "ep": 67, - "eta": 1.0000821352005005, - "gnorm": 0.030933775128238264 - }, - { - "ep": 68, - "eta": 1.0002692937850952, - "gnorm": 0.029220733489430505 - }, - { - "ep": 69, - "eta": 1.0004338026046753, - "gnorm": 0.02982966559333504 - }, - { - "ep": 70, - "eta": 1.0006219148635864, - "gnorm": 0.030556371138305272 - }, - { - "ep": 71, - "eta": 1.0008153915405273, - "gnorm": 0.030483502137869427 - }, - { - "ep": 72, - "eta": 1.0009831190109253, - "gnorm": 0.030740127067500064 - }, - { - "ep": 73, - "eta": 1.0010747909545898, - "gnorm": 0.029153293112478794 - }, - { - "ep": 74, - "eta": 1.0011332035064697, - "gnorm": 0.030797324223839382 - }, - { - "ep": 75, - "eta": 1.0011038780212402, - "gnorm": 0.03049048840122313 - }, - { - "ep": 76, - "eta": 1.0011987686157227, - "gnorm": 0.03090010432276801 - }, - { - "ep": 77, - "eta": 1.0014644861221313, - "gnorm": 0.029537603685063658 - }, - { - "ep": 78, - "eta": 1.001646876335144, - "gnorm": 0.03046449888881996 - }, - { - "ep": 79, - "eta": 1.0018458366394043, - "gnorm": 0.027497958621539552 - }, - { - "ep": 80, - "eta": 1.0020360946655273, - "gnorm": 0.02848449124168443 - }, - { - "ep": 81, - "eta": 1.0022788047790527, - "gnorm": 0.029847047464292464 - }, - { - "ep": 82, - "eta": 1.0023654699325562, - "gnorm": 0.029624177282322455 - }, - { - "ep": 83, - "eta": 1.0023711919784546, - "gnorm": 0.029628181241613292 - }, - { - "ep": 84, - "eta": 1.0024569034576416, - "gnorm": 0.02992383106474653 - }, - { - "ep": 85, - "eta": 1.002500057220459, - "gnorm": 0.029426000685386974 - }, - { - "ep": 86, - "eta": 1.0024592876434326, - "gnorm": 0.02887874660726215 - }, - { - "ep": 87, - "eta": 1.0024092197418213, - "gnorm": 0.031752708170925854 - }, - { - "ep": 88, - "eta": 1.0023502111434937, - "gnorm": 0.029809153876874 - }, - { - "ep": 89, - "eta": 1.00230872631073, - "gnorm": 0.029756003361944776 - }, - { - "ep": 90, - "eta": 1.002208948135376, - "gnorm": 0.028998390621142744 - }, - { - "ep": 91, - "eta": 1.0020129680633545, - "gnorm": 0.029481475173274853 - }, - { - "ep": 92, - "eta": 1.0017707347869873, - "gnorm": 0.028689448763514324 - }, - { - "ep": 93, - "eta": 1.0016148090362549, - "gnorm": 0.03114297380190559 - }, - { - "ep": 94, - "eta": 1.0014878511428833, - "gnorm": 0.029625071993248663 - }, - { - "ep": 95, - "eta": 1.001451015472412, - "gnorm": 0.02796152505265727 - }, - { - "ep": 96, - "eta": 1.0013264417648315, - "gnorm": 0.030473362941230552 - }, - { - "ep": 97, - "eta": 1.0013427734375, - "gnorm": 0.02835992492507495 - }, - { - "ep": 98, - "eta": 1.001397728919983, - "gnorm": 0.02716836850099376 - }, - { - "ep": 99, - "eta": 1.0015405416488647, - "gnorm": 0.03122435502977643 - }, - { - "ep": 100, - "eta": 1.0015132427215576, - "gnorm": 0.030289417081037922 - }, - { - "ep": 101, - "eta": 1.001389503479004, - "gnorm": 0.029563821432344872 - }, - { - "ep": 102, - "eta": 1.0013092756271362, - "gnorm": 0.027966630610372013 - }, - { - "ep": 103, - "eta": 1.0012449026107788, - "gnorm": 0.028044538223383337 - }, - { - "ep": 104, - "eta": 1.0012410879135132, - "gnorm": 0.026707305073490388 - }, - { - "ep": 105, - "eta": 1.0011905431747437, - "gnorm": 0.02880606337249053 - }, - { - "ep": 106, - "eta": 1.001111388206482, - "gnorm": 0.029061845641407607 - }, - { - "ep": 107, - "eta": 1.0010924339294434, - "gnorm": 0.029041614513306762 - }, - { - "ep": 108, - "eta": 1.0011147260665894, - "gnorm": 0.029410863509277397 - }, - { - "ep": 109, - "eta": 1.0009639263153076, - "gnorm": 0.0270668594518826 - }, - { - "ep": 110, - "eta": 1.0010162591934204, - "gnorm": 0.028528560254656467 - }, - { - "ep": 111, - "eta": 1.0010011196136475, - "gnorm": 0.02668742870565588 - }, - { - "ep": 112, - "eta": 1.00103759765625, - "gnorm": 0.02723907590966613 - }, - { - "ep": 113, - "eta": 1.0010026693344116, - "gnorm": 0.028463849039459165 - }, - { - "ep": 114, - "eta": 1.000942587852478, - "gnorm": 0.02776448364553371 - }, - { - "ep": 115, - "eta": 1.0008251667022705, - "gnorm": 0.026927799766880096 - }, - { - "ep": 116, - "eta": 1.000548243522644, - "gnorm": 0.027688286102744968 - }, - { - "ep": 117, - "eta": 1.0002185106277466, - "gnorm": 0.028521938333832576 - }, - { - "ep": 118, - "eta": 0.9999238848686218, - "gnorm": 0.027510342262037645 - }, - { - "ep": 119, - "eta": 0.9996373653411865, - "gnorm": 0.029175675883745616 - }, - { - "ep": 120, - "eta": 0.9993237853050232, - "gnorm": 0.027865014024150567 - }, - { - "ep": 121, - "eta": 0.9988904595375061, - "gnorm": 0.02923661740760887 - }, - { - "ep": 122, - "eta": 0.998474657535553, - "gnorm": 0.027735118765867022 - }, - { - "ep": 123, - "eta": 0.9981712698936462, - "gnorm": 0.02765876366432182 - }, - { - "ep": 124, - "eta": 0.9977779984474182, - "gnorm": 0.028226648369520393 - }, - { - "ep": 125, - "eta": 0.9972505569458008, - "gnorm": 0.029576813241917008 - }, - { - "ep": 126, - "eta": 0.9968076348304749, - "gnorm": 0.028295242257985787 - }, - { - "ep": 127, - "eta": 0.9965516924858093, - "gnorm": 0.028186187422199888 - }, - { - "ep": 128, - "eta": 0.9963507652282715, - "gnorm": 0.0285217853613954 - }, - { - "ep": 129, - "eta": 0.9961854815483093, - "gnorm": 0.02889260712031167 - }, - { - "ep": 130, - "eta": 0.9961282014846802, - "gnorm": 0.03083125315004484 - }, - { - "ep": 131, - "eta": 0.9960833787918091, - "gnorm": 0.028119562530685854 - }, - { - "ep": 132, - "eta": 0.9959384202957153, - "gnorm": 0.027168480023533306 - }, - { - "ep": 133, - "eta": 0.9958001971244812, - "gnorm": 0.026018740294790732 - }, - { - "ep": 134, - "eta": 0.9956344962120056, - "gnorm": 0.026790937805689717 - }, - { - "ep": 135, - "eta": 0.9955605268478394, - "gnorm": 0.028270353496391554 - }, - { - "ep": 136, - "eta": 0.9953559041023254, - "gnorm": 0.026156827301975525 - }, - { - "ep": 137, - "eta": 0.9952595233917236, - "gnorm": 0.028833297053052393 - }, - { - "ep": 138, - "eta": 0.9952435493469238, - "gnorm": 0.027407658184299678 - }, - { - "ep": 139, - "eta": 0.9952279329299927, - "gnorm": 0.027349072227444954 - }, - { - "ep": 140, - "eta": 0.9952325224876404, - "gnorm": 0.027618101821145102 - }, - { - "ep": 141, - "eta": 0.9951878190040588, - "gnorm": 0.02894488279920531 - }, - { - "ep": 142, - "eta": 0.995315670967102, - "gnorm": 0.0273081044400357 - }, - { - "ep": 143, - "eta": 0.99558025598526, - "gnorm": 0.028289694134640095 - }, - { - "ep": 144, - "eta": 0.9958713054656982, - "gnorm": 0.027655272433110202 - }, - { - "ep": 145, - "eta": 0.9962407946586609, - "gnorm": 0.027228382590987088 - }, - { - "ep": 146, - "eta": 0.9966354370117188, - "gnorm": 0.028062520872664087 - }, - { - "ep": 147, - "eta": 0.9969175457954407, - "gnorm": 0.028213025478733767 - }, - { - "ep": 148, - "eta": 0.9972665309906006, - "gnorm": 0.028732461147680452 - }, - { - "ep": 149, - "eta": 0.9974454641342163, - "gnorm": 0.029802779940864138 - }, - { - "ep": 150, - "eta": 0.997402548789978, - "gnorm": 0.029106680605645707 - }, - { - "ep": 151, - "eta": 0.9975220561027527, - "gnorm": 0.029474724073225864 - }, - { - "ep": 152, - "eta": 0.9976211786270142, - "gnorm": 0.027288459089688903 - }, - { - "ep": 153, - "eta": 0.9977079629898071, - "gnorm": 0.026313846253685578 - }, - { - "ep": 154, - "eta": 0.9976509213447571, - "gnorm": 0.028150691808296123 - }, - { - "ep": 155, - "eta": 0.9977043867111206, - "gnorm": 0.027056383763577177 - }, - { - "ep": 156, - "eta": 0.9978554248809814, - "gnorm": 0.027978607666116036 - }, - { - "ep": 157, - "eta": 0.9981396794319153, - "gnorm": 0.028059179016041134 - }, - { - "ep": 158, - "eta": 0.9985707402229309, - "gnorm": 0.027602600155388013 - }, - { - "ep": 159, - "eta": 0.998997151851654, - "gnorm": 0.028104497834129275 - }, - { - "ep": 160, - "eta": 0.9993885159492493, - "gnorm": 0.02796308621902963 - }, - { - "ep": 161, - "eta": 0.9996606111526489, - "gnorm": 0.026658354341227493 - }, - { - "ep": 162, - "eta": 1.0000079870224, - "gnorm": 0.026483923431791602 - }, - { - "ep": 163, - "eta": 1.0003206729888916, - "gnorm": 0.02718120077867498 - }, - { - "ep": 164, - "eta": 1.0006743669509888, - "gnorm": 0.028465348520652918 - }, - { - "ep": 165, - "eta": 1.0009815692901611, - "gnorm": 0.027560602626552886 - }, - { - "ep": 166, - "eta": 1.0010156631469727, - "gnorm": 0.027334455625179367 - }, - { - "ep": 167, - "eta": 1.0010623931884766, - "gnorm": 0.02565951257018153 - }, - { - "ep": 168, - "eta": 1.0010653734207153, - "gnorm": 0.025666163364887973 - }, - { - "ep": 169, - "eta": 1.0010448694229126, - "gnorm": 0.02741506457677606 - }, - { - "ep": 170, - "eta": 1.0010044574737549, - "gnorm": 0.028882409966618047 - }, - { - "ep": 171, - "eta": 1.0009087324142456, - "gnorm": 0.0284334224851525 - }, - { - "ep": 172, - "eta": 1.000844955444336, - "gnorm": 0.02656876597105752 - }, - { - "ep": 173, - "eta": 1.0008313655853271, - "gnorm": 0.02599636217816226 - }, - { - "ep": 174, - "eta": 1.0007576942443848, - "gnorm": 0.025817842211155195 - }, - { - "ep": 175, - "eta": 1.0005862712860107, - "gnorm": 0.02787240992019125 - }, - { - "ep": 176, - "eta": 1.000463843345642, - "gnorm": 0.027376045754000152 - }, - { - "ep": 177, - "eta": 1.000515341758728, - "gnorm": 0.02706537785739546 - }, - { - "ep": 178, - "eta": 1.0003732442855835, - "gnorm": 0.02601690624948014 - }, - { - "ep": 179, - "eta": 1.0002861022949219, - "gnorm": 0.02768496110746299 - }, - { - "ep": 180, - "eta": 1.000138759613037, - "gnorm": 0.025198368951512718 - }, - { - "ep": 181, - "eta": 0.9999036192893982, - "gnorm": 0.028846042132941726 - }, - { - "ep": 182, - "eta": 0.9996799230575562, - "gnorm": 0.027662173685556762 - }, - { - "ep": 183, - "eta": 0.999443769454956, - "gnorm": 0.027385972249460475 - }, - { - "ep": 184, - "eta": 0.9990474581718445, - "gnorm": 0.026872503725486843 - }, - { - "ep": 185, - "eta": 0.9987178444862366, - "gnorm": 0.027138938030204673 - }, - { - "ep": 186, - "eta": 0.9983870983123779, - "gnorm": 0.02690975511326812 - }, - { - "ep": 187, - "eta": 0.9981580972671509, - "gnorm": 0.028241825569823752 - }, - { - "ep": 188, - "eta": 0.9978299736976624, - "gnorm": 0.027265779867925496 - }, - { - "ep": 189, - "eta": 0.9973737001419067, - "gnorm": 0.027036709239318574 - }, - { - "ep": 190, - "eta": 0.996900200843811, - "gnorm": 0.02712278080774109 - }, - { - "ep": 191, - "eta": 0.9964267015457153, - "gnorm": 0.02758627866078603 - }, - { - "ep": 192, - "eta": 0.9959056973457336, - "gnorm": 0.027332572792371255 - }, - { - "ep": 193, - "eta": 0.9954271912574768, - "gnorm": 0.029162192016922262 - }, - { - "ep": 194, - "eta": 0.9951401948928833, - "gnorm": 0.027642243992466987 - }, - { - "ep": 195, - "eta": 0.9950236082077026, - "gnorm": 0.0264865173531641 - }, - { - "ep": 196, - "eta": 0.9949002265930176, - "gnorm": 0.025947305245546448 - }, - { - "ep": 197, - "eta": 0.9947751760482788, - "gnorm": 0.026922641623318436 - }, - { - "ep": 198, - "eta": 0.9947266578674316, - "gnorm": 0.027123841259431566 - }, - { - "ep": 199, - "eta": 0.9946463704109192, - "gnorm": 0.026224972417362456 - }, - { - "ep": 200, - "eta": 0.994566023349762, - "gnorm": 0.027534925075063183 - }, - { - "ep": 201, - "eta": 0.994467556476593, - "gnorm": 0.02533748448379428 - }, - { - "ep": 202, - "eta": 0.9943374991416931, - "gnorm": 0.025767257265075335 - }, - { - "ep": 203, - "eta": 0.994145929813385, - "gnorm": 0.02610362897262776 - }, - { - "ep": 204, - "eta": 0.9937873482704163, - "gnorm": 0.02678038345494645 - }, - { - "ep": 205, - "eta": 0.9933446645736694, - "gnorm": 0.028797928957672924 - }, - { - "ep": 206, - "eta": 0.9931098222732544, - "gnorm": 0.026321884754539403 - }, - { - "ep": 207, - "eta": 0.9929614067077637, - "gnorm": 0.02631078558085871 - }, - { - "ep": 208, - "eta": 0.9928042888641357, - "gnorm": 0.025752874955240274 - }, - { - "ep": 209, - "eta": 0.9926695227622986, - "gnorm": 0.02737337833466288 - }, - { - "ep": 210, - "eta": 0.9924975037574768, - "gnorm": 0.028102324978477037 - }, - { - "ep": 211, - "eta": 0.9922798871994019, - "gnorm": 0.028152079893020175 - }, - { - "ep": 212, - "eta": 0.9919511675834656, - "gnorm": 0.02698546067660383 - }, - { - "ep": 213, - "eta": 0.9915754795074463, - "gnorm": 0.026977599940030433 - }, - { - "ep": 214, - "eta": 0.9912070035934448, - "gnorm": 0.027398704713745753 - }, - { - "ep": 215, - "eta": 0.9908441305160522, - "gnorm": 0.02664732834123103 - }, - { - "ep": 216, - "eta": 0.9904454350471497, - "gnorm": 0.027791483707478977 - }, - { - "ep": 217, - "eta": 0.9902982711791992, - "gnorm": 0.026803831796596844 - }, - { - "ep": 218, - "eta": 0.9903743863105774, - "gnorm": 0.02693939389201288 - }, - { - "ep": 219, - "eta": 0.9905807971954346, - "gnorm": 0.02655023831164283 - }, - { - "ep": 220, - "eta": 0.9906367063522339, - "gnorm": 0.027576363689731945 - }, - { - "ep": 221, - "eta": 0.9906331300735474, - "gnorm": 0.028697225629828835 - }, - { - "ep": 222, - "eta": 0.990635097026825, - "gnorm": 0.027833018409532975 - }, - { - "ep": 223, - "eta": 0.9906238317489624, - "gnorm": 0.02759230297488311 - }, - { - "ep": 224, - "eta": 0.9906246662139893, - "gnorm": 0.029188233050529016 - }, - { - "ep": 225, - "eta": 0.9905276298522949, - "gnorm": 0.027563277430170775 - }, - { - "ep": 226, - "eta": 0.9904503226280212, - "gnorm": 0.027447470475517866 - }, - { - "ep": 227, - "eta": 0.990288257598877, - "gnorm": 0.02791379662326034 - }, - { - "ep": 228, - "eta": 0.9902026057243347, - "gnorm": 0.03028524176676799 - }, - { - "ep": 229, - "eta": 0.9900745749473572, - "gnorm": 0.028144932174633788 - }, - { - "ep": 230, - "eta": 0.990009605884552, - "gnorm": 0.02810682067583611 - }, - { - "ep": 231, - "eta": 0.989931046962738, - "gnorm": 0.027415103070514774 - }, - { - "ep": 232, - "eta": 0.9898127913475037, - "gnorm": 0.027031278033480984 - }, - { - "ep": 233, - "eta": 0.9896683692932129, - "gnorm": 0.02726154247415102 - }, - { - "ep": 234, - "eta": 0.9896981120109558, - "gnorm": 0.026941843565299883 - }, - { - "ep": 235, - "eta": 0.9896661639213562, - "gnorm": 0.027278212004504344 - }, - { - "ep": 236, - "eta": 0.989484965801239, - "gnorm": 0.02875069055312768 - }, - { - "ep": 237, - "eta": 0.9891325831413269, - "gnorm": 0.026104907169145427 - }, - { - "ep": 238, - "eta": 0.9887663722038269, - "gnorm": 0.027306132223660445 - }, - { - "ep": 239, - "eta": 0.988360583782196, - "gnorm": 0.02654636764192619 - }, - { - "ep": 240, - "eta": 0.9878045320510864, - "gnorm": 0.025016944882365437 - }, - { - "ep": 241, - "eta": 0.9874757528305054, - "gnorm": 0.02626762071400586 - }, - { - "ep": 242, - "eta": 0.9871140718460083, - "gnorm": 0.02746902881009491 - }, - { - "ep": 243, - "eta": 0.9866381883621216, - "gnorm": 0.026220443089874 - }, - { - "ep": 244, - "eta": 0.9862151741981506, - "gnorm": 0.026406540172785247 - }, - { - "ep": 245, - "eta": 0.9858930110931396, - "gnorm": 0.02616497825870737 - }, - { - "ep": 246, - "eta": 0.9856374263763428, - "gnorm": 0.026363793154235385 - }, - { - "ep": 247, - "eta": 0.9853876233100891, - "gnorm": 0.030491208585359753 - }, - { - "ep": 248, - "eta": 0.9849491715431213, - "gnorm": 0.027626358786843278 - }, - { - "ep": 249, - "eta": 0.9844364523887634, - "gnorm": 0.027708875508180325 - }, - { - "ep": 250, - "eta": 0.9838646650314331, - "gnorm": 0.027921862961357347 - } - ], - "results": { - "ricianK20_phi15_snr10": { - "maml_zero": { - "ser": 0.18278645833333335, - "cos": 0.5147211237748464 - }, - "joint_zero": { - "ser": 0.11348958333333334, - "cos": 0.5355807491143545 - }, - "lookup_zero": { - "ser": 0.15739583333333335, - "cos": 0.5230507373809814 - }, - "maml_adapt5": { - "ser": 0.181328125, - "cos": 0.5150875153144201 - }, - "joint_adapt5": { - "ser": 0.113046875, - "cos": 0.5356753102938334 - }, - "lookup_adapt5": { - "ser": 0.15747395833333333, - "cos": 0.5227380518118541 - } - }, - "nakagami3_phi5_snr10": { - "maml_zero": { - "ser": 0.20731770833333332, - "cos": 0.5092417148749033 - }, - "joint_zero": { - "ser": 0.13716145833333335, - "cos": 0.5296770425637564 - }, - "lookup_zero": { - "ser": 0.18916666666666668, - "cos": 0.5157009830077489 - }, - "maml_adapt5": { - "ser": 0.21125, - "cos": 0.5084976683060328 - }, - "joint_adapt5": { - "ser": 0.13783854166666668, - "cos": 0.5292594488461813 - }, - "lookup_adapt5": { - "ser": 0.18505208333333334, - "cos": 0.5165808053811392 - } - }, - "rayleigh_phi20_snr6": { - "maml_zero": { - "ser": 0.5247135416666666, - "cos": 0.42915171225865684 - }, - "joint_zero": { - "ser": 0.45872395833333335, - "cos": 0.44688279112180074 - }, - "lookup_zero": { - "ser": 0.504921875, - "cos": 0.4341074158747991 - }, - "maml_adapt5": { - "ser": 0.5226041666666666, - "cos": 0.42963840583960217 - }, - "joint_adapt5": { - "ser": 0.45869791666666665, - "cos": 0.4470278835296631 - }, - "lookup_adapt5": { - "ser": 0.5084375, - "cos": 0.43330517609914143 - } - }, - "ricianK20_phi15_snr18": { - "maml_zero": { - "ser": 0.09783854166666667, - "cos": 0.5379070762793223 - }, - "joint_zero": { - "ser": 0.053307291666666666, - "cos": 0.5585062372684478 - }, - "lookup_zero": { - "ser": 0.09401041666666667, - "cos": 0.5396302266915639 - }, - "maml_adapt5": { - "ser": 0.10122395833333334, - "cos": 0.5374532500902812 - }, - "joint_adapt5": { - "ser": 0.054921875, - "cos": 0.5588626913229624 - }, - "lookup_adapt5": { - "ser": 0.09372395833333333, - "cos": 0.5411469670136769 - } - } - }, - "eta_final": 0.9838646650314331, - "eta_max": 1.002500057220459, - "gnorm_max": 0.04652641460638758 -} \ No newline at end of file diff --git a/rev2/data/e8_e2e_anticollapse.json b/rev2/data/e8_e2e_anticollapse.json deleted file mode 100755 index e594449..0000000 --- a/rev2/data/e8_e2e_anticollapse.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "snr": [ - 0.0, - 2.0, - 4.0, - 6.0, - 8.0, - 10.0, - 12.0, - 14.0, - 16.0, - 18.0, - 20.0 - ], - "configs": { - "frozen": { - "ser": [ - 0.7918229166666667, - 0.685703125, - 0.5696354166666666, - 0.45276041666666667, - 0.35044270833333335, - 0.270703125, - 0.2078125, - 0.16442708333333333, - 0.14369791666666668, - 0.11671875, - 0.10502604166666667 - ], - "cos": [ - 0.33901638666788736, - 0.3792428519328435, - 0.41583929598331454, - 0.44846010764439903, - 0.47460420747598014, - 0.49550534566243487, - 0.5113285048802694, - 0.5235649347305298, - 0.530758779446284, - 0.5387160217761994, - 0.5428356532255808 - ], - "erank": 63.314430236816406, - "rho_off": 0.998196005821228 - }, - "naive": { - "ser": [ - 0.00020833333333333335, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "cos": [ - 0.9946125821272532, - 0.9967783908049266, - 0.9977629196643829, - 0.9983737409114838, - 0.9987331410249074, - 0.9989773007233937, - 0.9991132164001465, - 0.9992019935448965, - 0.999260938167572, - 0.9992937278747559, - 0.9993155153592428 - ], - "erank": 41.47739028930664, - "rho_off": 0.999997615814209 - }, - "vicreg": { - "ser": [ - 0.7002864583333334, - 0.5877083333333334, - 0.45828125, - 0.36255208333333333, - 0.28338541666666667, - 0.21833333333333332, - 0.171875, - 0.14651041666666667, - 0.12901041666666666, - 0.12166666666666667, - 0.11083333333333334 - ], - "cos": [ - 0.3612262072165807, - 0.40026772101720176, - 0.4415491064389547, - 0.4709076561530431, - 0.49452649215857186, - 0.5151174678405126, - 0.5307369756698609, - 0.5408004929622015, - 0.5477419094244639, - 0.5502727842330932, - 0.5561861228942871 - ], - "erank": 34.763675689697266, - "rho_off": 0.9972559809684753 - } - } -} \ No newline at end of file diff --git a/legacy/maml_semantic.py b/simulation/maml_semantic.py similarity index 100% rename from legacy/maml_semantic.py rename to simulation/maml_semantic.py diff --git a/legacy/plot_figures.py b/simulation/plot_figures.py similarity index 100% rename from legacy/plot_figures.py rename to simulation/plot_figures.py diff --git a/legacy/revision_ablation.py b/simulation/revision_ablation.py similarity index 100% rename from legacy/revision_ablation.py rename to simulation/revision_ablation.py diff --git a/legacy/revision_betasweep.py b/simulation/revision_betasweep.py similarity index 100% rename from legacy/revision_betasweep.py rename to simulation/revision_betasweep.py diff --git a/legacy/revision_dsweep.py b/simulation/revision_dsweep.py similarity index 100% rename from legacy/revision_dsweep.py rename to simulation/revision_dsweep.py diff --git a/legacy/revision_e2e.py b/simulation/revision_e2e.py similarity index 100% rename from legacy/revision_e2e.py rename to simulation/revision_e2e.py diff --git a/legacy/revision_experiments.py b/simulation/revision_experiments.py similarity index 100% rename from legacy/revision_experiments.py rename to simulation/revision_experiments.py diff --git a/legacy/revision_realdata2.py b/simulation/revision_realdata2.py similarity index 100% rename from legacy/revision_realdata2.py rename to simulation/revision_realdata2.py diff --git a/legacy/revision_realdata_plot.py b/simulation/revision_realdata_plot.py similarity index 100% rename from legacy/revision_realdata_plot.py rename to simulation/revision_realdata_plot.py diff --git a/legacy/revision_realdata_train.py b/simulation/revision_realdata_train.py similarity index 100% rename from legacy/revision_realdata_train.py rename to simulation/revision_realdata_train.py diff --git a/legacy/semantic_correlation_sim.py b/simulation/semantic_correlation_sim.py similarity index 100% rename from legacy/semantic_correlation_sim.py rename to simulation/semantic_correlation_sim.py diff --git a/legacy/semantic_sim.py b/simulation/semantic_sim.py similarity index 100% rename from legacy/semantic_sim.py rename to simulation/semantic_sim.py