Match figure styling and labels to the submitted manuscript

Enlarge the in-canvas fonts and line weights of the result figures so
that they stay legible at the printed column width, split the Fig. 5
convergence curve into a pre-meta adaptation entry and the proposed
MAML entry, and rename the autoencoder legend to match the table row.
Add the analytic complexity replot behind Fig. 4, which was missing
from the repository, and correct the table numbering in the README.
This commit is contained in:
KiHoLee
2026-08-03 12:49:53 +09:00
parent 595009b1f6
commit 6c8471ece0
7 changed files with 697 additions and 608 deletions
+29 -11
View File
@@ -22,7 +22,7 @@ import c13_mnist as m13
MODELS = {
"semantic": (m13.MnistSemanticMA, "Proposed signed joint"),
"semantic_tf": (m13.MnistTransformerMA, "Transformer SE separation"),
"semantic_ae": (m13.MnistPerUserAE, "Per-user AE multiple access"),
"semantic_ae": (m13.MnistPerUserAE, "Per-user AE"),
}
@@ -202,24 +202,30 @@ def main():
STY = {"semantic": dict(color="tab:red", marker="o", ls="-"),
"semantic_tf": dict(color="tab:purple", marker="P", ls="-"),
"semantic_ae": dict(color="tab:brown", marker="X", ls="-")}
plt.rcParams.update({"font.size": 13, "axes.labelsize": 13,
"xtick.labelsize": 12, "ytick.labelsize": 12,
"axes.linewidth": 1.1, "grid.linewidth": 0.8,
"xtick.major.width": 1.1, "ytick.major.width": 1.1,
"xtick.minor.width": 0.8, "ytick.minor.width": 0.8,
"xtick.major.size": 4.5, "ytick.major.size": 4.5})
fig = plt.figure(figsize=(5.2, 3.9))
ax = fig.add_axes([0.14, 0.125, 0.835, 0.845])
ax = fig.add_axes([0.155, 0.145, 0.82, 0.82])
xgrid = sorted({int(r["step"]) for r in rows
if r["method"] == "semantic"})
if "digital_genie" in floors:
ax.semilogy(xgrid, [floors["digital_genie"]] * len(xgrid),
label="Digital chain genie CSI", ms=3.5, lw=1.2,
label="Digital chain genie CSI", ms=5, lw=1.7,
color="gray", marker="^", ls="--")
if "digital_pilot" in floors:
ax.semilogy(xgrid, [floors["digital_pilot"]] * len(xgrid),
label="Digital chain pilot CSI", ms=3.5, lw=1.2,
label="Digital chain pilot CSI", ms=5, lw=1.7,
color="k", marker="v", ls="-")
for key in ["semantic_tf", "semantic_ae", "semantic"]:
label = MODELS[key][1]
pts = sorted([(int(r["step"]), float(r["ser"])) for r in rows
if r["method"] == key])
xs, ys = zip(*pts)
ax.semilogy(xs, ys, label=label, ms=3.5, lw=1.3, **STY[key])
ax.semilogy(xs, ys, label=label, ms=5, lw=1.8, **STY[key])
# signed MAML: the deployed receiver applies the five-step
# task-conditional adaptation at every checkpoint. During the
# warm-start phase the adapted SER of the evolving joint model is
@@ -239,17 +245,29 @@ def main():
pre_pts = sorted([(int(r["step"]), float(r["ser"]))
for r in rows if r["method"] == "semantic"
and int(r["step"]) < warm_end])
pts = pre_pts + meta_pts
xs, ys = zip(*pts)
ax.semilogy(xs, ys, label="Proposed signed MAML", ms=3.5, lw=1.3,
color="tab:green", marker="D", ls="--")
ax.axvline(warm_end, color="gray", ls=":", lw=1.0)
# Left of the dotted line no meta-training has happened yet, so
# the curve is the joint model with the same five-step
# adaptation applied. It is drawn dashed with open markers and
# carries its own legend entry, since it is the control
# condition rather than the proposed MAML receiver.
pre_seg = pre_pts + meta_pts[:1]
xs, ys = zip(*pre_seg)
ax.semilogy(xs, ys, label="Adaptation from joint model", ms=5,
lw=1.8, color="tab:green", marker="D", ls="--",
markerfacecolor="none")
xs, ys = zip(*meta_pts)
ax.semilogy(xs, ys, label="Proposed signed MAML", ms=5, lw=1.8,
color="tab:green", marker="D", ls="-")
ax.axvline(warm_end, color="gray", ls=":", lw=1.4)
ax.set_xlabel("Training step")
ax.set_ylabel("SER")
if "digital_genie" in floors:
# extra headroom below the genie floor so that the seven-entry
# legend sits in free space instead of over the curves
ax.set_ylim(bottom=floors["digital_genie"] * 0.5)
ax.grid(True, which="both", alpha=0.35)
ax.legend(fontsize=7.5, loc="center left", bbox_to_anchor=(0.02, 0.32))
ax.legend(fontsize=9, loc="center left", bbox_to_anchor=(0.02, 0.34),
framealpha=1.0, labelspacing=0.3, handlelength=1.8)
out = os.path.join(args.fig_dir, "mnist_epoch_convergence.pdf")
fig.savefig(out)
print("saved", out)