Main configuration d=256, L=64: all data, figures and checks re-run
Every OMA reference takes the L/16 combining gain so the comparison stays resource matched, four hardcoded copies of the configuration are replaced by MAIN_D or the main curve, and stage_J's K-by-L Gaussian draw becomes its exact scalar Beta equivalent.
This commit is contained in:
+47
-27
@@ -47,15 +47,24 @@ lg = [float(x["legit"]) for x in sn]
|
|||||||
om = [float(x["oma"]) for x in sn]
|
om = [float(x["oma"]) for x in sn]
|
||||||
rel = [(a - b) / b * 100 for a, b in zip(lg, om)]
|
rel = [(a - b) / b * 100 for a, b in zip(lg, om)]
|
||||||
chk("legit below OMA at every SNR", max(rel) < 0, "max relative %+.2f%%" % max(rel))
|
chk("legit below OMA at every SNR", max(rel) < 0, "max relative %+.2f%%" % max(rel))
|
||||||
chk("gain 1.3 to 7.9 percent",
|
chk("gain 24 to 35 percent",
|
||||||
round(-max(rel), 1) == 1.3 and round(-min(rel), 1) == 7.9,
|
round(-max(rel)) == 24 and round(-min(rel)) == 35,
|
||||||
"%.2f to %.2f percent" % (-max(rel), -min(rel)))
|
"%.2f to %.2f percent" % (-max(rel), -min(rel)))
|
||||||
chk("1.3 and 7.9 in tex", "$1.3$ to\n$7.9$~percent" in tex or "$1.3$ to $7.9$~percent" in tex,
|
chk("24 and 35 in tex", "$24$ to\n$35$~percent" in tex or "$24$ to $35$~percent" in tex,
|
||||||
"searched tex", needs_tex=True)
|
"searched tex", needs_tex=True)
|
||||||
ew = [float(x["eve_wrong"]) for x in sn]
|
ew = [float(x["eve_wrong"]) for x in sn]
|
||||||
ch = float(sn[0]["chance"])
|
ch = float(sn[0]["chance"])
|
||||||
chk("outsider at chance to 2e-5", max(abs(x - ch) for x in ew) < 2e-5,
|
dev = max(abs(x - ch) for x in ew)
|
||||||
"max deviation %.2e" % max(abs(x - ch) for x in ew))
|
chk("outsider at chance to 3.5e-4", dev < 3.6e-4, "max deviation %.2e" % dev)
|
||||||
|
chk("3.5e-4 in tex", "$3.5\\times10^{-4}$" in tex, "searched tex",
|
||||||
|
needs_tex=True)
|
||||||
|
|
||||||
|
# the main configuration's legitimate rate, the reference every later
|
||||||
|
# assertion compares against; taken from the curve the main
|
||||||
|
# configuration produced rather than looked up by key length
|
||||||
|
MAIN_LEGIT = [float(x["legit"]) for x in sn if float(x["snr_db"]) == 10][0]
|
||||||
|
chk("main legitimate 0.053", round(MAIN_LEGIT, 3) == 0.053,
|
||||||
|
"%.4f" % MAIN_LEGIT)
|
||||||
|
|
||||||
# --- Fig. 3: key-length ratio ----------------------------------------
|
# --- Fig. 3: key-length ratio ----------------------------------------
|
||||||
k = rows("sec_keylen.csv")
|
k = rows("sec_keylen.csv")
|
||||||
@@ -70,11 +79,10 @@ chk("keys exactly orthogonal in the sweep",
|
|||||||
|
|
||||||
# --- Fig. 4: jamming --------------------------------------------------
|
# --- Fig. 4: jamming --------------------------------------------------
|
||||||
g = col("sec_jam_gap.csv", "gap_db")
|
g = col("sec_jam_gap.csv", "gap_db")
|
||||||
chk("gap 5.5-6.3 dB", round(min(g), 1) == 5.5 and round(max(g), 1) == 6.3,
|
chk("gap 10.1-11.1 dB", round(min(g), 1) == 10.1 and round(max(g), 1) == 11.1,
|
||||||
"%.3f to %.3f" % (min(g), max(g)))
|
"%.3f to %.3f" % (min(g), max(g)))
|
||||||
lin = (10 ** (min(g) / 10), 10 ** (max(g) / 10))
|
lin = (10 ** (min(g) / 10), 10 ** (max(g) / 10))
|
||||||
chk("about four times power", lin[0] < 4.5 and lin[1] > 3.4,
|
chk("more than ten times power", lin[0] > 10.0, "%.2f to %.2f" % lin)
|
||||||
"%.2f to %.2f" % lin)
|
|
||||||
j = rows("sec_jam_cmp.csv")
|
j = rows("sec_jam_cmp.csv")
|
||||||
dmax = max(abs(float(r["blind"]) - float(r["perm_blind"])) for r in j)
|
dmax = max(abs(float(r["blind"]) - float(r["perm_blind"])) for r in j)
|
||||||
chk("within 0.002", dmax <= 0.002, "%.5f" % dmax)
|
chk("within 0.002", dmax <= 0.002, "%.5f" % dmax)
|
||||||
@@ -83,32 +91,40 @@ chk("no stale 8.1 dB", "$8.1$~dB" not in tex, "searched tex", needs_tex=True)
|
|||||||
# --- Fig. 6: brute force ---------------------------------------------
|
# --- Fig. 6: brute force ---------------------------------------------
|
||||||
b = rows("sec_brute_cmp.csv")
|
b = rows("sec_brute_cmp.csv")
|
||||||
sm = float(b[-1]["ser_mask"])
|
sm = float(b[-1]["ser_mask"])
|
||||||
chk("brute 0.59 at 1e6", round(sm, 2) == 0.59, "%.4f" % sm)
|
chk("brute 0.67 at 1e6", round(sm, 2) == 0.67, "%.4f" % sm)
|
||||||
chk("0.59 in tex", "$0.59$" in tex, "searched tex", needs_tex=True)
|
chk("0.67 in tex", "$0.67$" in tex, "searched tex", needs_tex=True)
|
||||||
pad0 = next((x["K"] for x in b if float(x["ser_pad"]) < 0.27), None)
|
closed = (ch - sm) / (ch - MAIN_LEGIT)
|
||||||
|
chk("brute closes about a third", 0.30 < closed < 0.40, "%.3f" % closed)
|
||||||
|
bf = float(b[-1]["best_frac"]) * 100
|
||||||
|
chk("permutation 3.4 percent of positions", round(bf, 1) == 3.4, "%.2f" % bf)
|
||||||
|
pad0 = next((x["K"] for x in b if float(x["ser_pad"]) < 0.1), None)
|
||||||
chk("index cipher collapses at 65536", pad0 == "65536", str(pad0))
|
chk("index cipher collapses at 65536", pad0 == "65536", str(pad0))
|
||||||
|
|
||||||
# --- Fig. 7: known plaintext -----------------------------------------
|
# --- Fig. 7: known plaintext -----------------------------------------
|
||||||
kp = rows("kpa.csv")
|
kp = rows("kpa.csv")
|
||||||
legit = float([x for x in k if int(x["L"]) == 16][0]["legit_ser"])
|
legit = MAIN_LEGIT
|
||||||
thr = legit * 1.02
|
thr = legit * 1.02
|
||||||
first20 = next((x["n_frames"] for x in kp
|
first20 = next((x["n_frames"] for x in kp
|
||||||
if int(x["snr_db"]) == 20 and float(x["eve_ser"]) <= thr), None)
|
if int(x["snr_db"]) == 20 and float(x["eve_ser"]) <= thr), None)
|
||||||
first10 = next((x["n_frames"] for x in kp
|
first10 = next((x["n_frames"] for x in kp
|
||||||
if int(x["snr_db"]) == 10 and float(x["eve_ser"]) <= thr), None)
|
if int(x["snr_db"]) == 10 and float(x["eve_ser"]) <= thr), None)
|
||||||
chk("KPA five frames at 20 dB", first20 == "5", "first N = %s" % first20)
|
chk("KPA three frames at 20 dB", first20 == "3", "first N = %s" % first20)
|
||||||
chk("KPA twenty-four frames at 10 dB", first10 == "24", "first N = %s" % first10)
|
chk("KPA ten frames at 10 dB", first10 == "10", "first N = %s" % first10)
|
||||||
|
kp0 = [x for x in kp if int(x["snr_db"]) == 0]
|
||||||
|
w0 = float(kp0[-1]["eve_ser"]) / legit
|
||||||
|
chk("0 dB no longer holds", w0 < 1.03, "64 frames reach %.3f of legitimate" % w0)
|
||||||
pk = rows("pkpa.csv")
|
pk = rows("pkpa.csv")
|
||||||
p6 = float([x for x in pk if x["n_frames"] == "6"][0]["eve_ser"])
|
p6 = float([x for x in pk if x["n_frames"] == "6"][0]["eve_ser"])
|
||||||
chk("perm KPA at N=6 near its own 0.258", abs(p6 - 0.258) < 0.005, "%.4f" % p6)
|
chk("perm KPA at N=6 near its own legitimate",
|
||||||
|
abs(p6 - MAIN_LEGIT) < 0.005, "%.4f" % p6)
|
||||||
|
|
||||||
# --- refresh ----------------------------------------------------------
|
# --- refresh ----------------------------------------------------------
|
||||||
rs = {x["scheme"]: x for x in rows("refresh_summary.csv")}
|
rs = {x["scheme"]: x for x in rows("refresh_summary.csv")}
|
||||||
chk("refresh 64.8 bits",
|
chk("refresh 364.6 bits",
|
||||||
round(float(rs["Invariant"]["entropy_bits"]), 1) == 64.8,
|
round(float(rs["Invariant"]["entropy_bits"]), 1) == 364.6,
|
||||||
"%.3f" % float(rs["Invariant"]["entropy_bits"]))
|
"%.3f" % float(rs["Invariant"]["entropy_bits"]))
|
||||||
chk("fixed key 15.0 bits",
|
chk("fixed key 23.8 bits",
|
||||||
round(float(rs["None (fixed key)"]["entropy_bits"]), 1) == 15.0,
|
round(float(rs["None (fixed key)"]["entropy_bits"]), 1) == 23.8,
|
||||||
"%.4f" % float(rs["None (fixed key)"]["entropy_bits"]))
|
"%.4f" % float(rs["None (fixed key)"]["entropy_bits"]))
|
||||||
chk("invariant refresh free",
|
chk("invariant refresh free",
|
||||||
abs(float(rs["Invariant"]["legit"]) - float(rs["None (fixed key)"]["legit"]))
|
abs(float(rs["Invariant"]["legit"]) - float(rs["None (fixed key)"]["legit"]))
|
||||||
@@ -119,8 +135,8 @@ chk("invariant refresh free",
|
|||||||
import json
|
import json
|
||||||
st = json.loads((base / "data" / "real_sec_stats.json").read_text())
|
st = json.loads((base / "data" / "real_sec_stats.json").read_text())
|
||||||
rec = st["recovery"]["28"]
|
rec = st["recovery"]["28"]
|
||||||
chk("headline recovery 78 vs 76 percent",
|
chk("headline recovery 96 vs 93 percent",
|
||||||
round(rec["legit"] * 100) == 78 and round(rec["oma"] * 100) == 76,
|
round(rec["legit"] * 100) == 96 and round(rec["oma"] * 100) == 93,
|
||||||
"%.1f vs %.1f" % (rec["legit"] * 100, rec["oma"] * 100))
|
"%.1f vs %.1f" % (rec["legit"] * 100, rec["oma"] * 100))
|
||||||
chk("legit leads OMA at every point",
|
chk("legit leads OMA at every point",
|
||||||
all(st["recovery"][s]["legit"] > st["recovery"][s]["oma"]
|
all(st["recovery"][s]["legit"] > st["recovery"][s]["oma"]
|
||||||
@@ -137,19 +153,23 @@ chk("L=8 crowding, proposal behind OMA",
|
|||||||
chk("0.949 and 0.685 in tex", "0.949" in tex and "0.685" in tex,
|
chk("0.949 and 0.685 in tex", "0.949" in tex and "0.685" in tex,
|
||||||
"searched tex", needs_tex=True)
|
"searched tex", needs_tex=True)
|
||||||
|
|
||||||
# the Fig. 2 inset plots this ratio, so its stated span must hold
|
# the OMA-to-proposed ratio the narration quotes
|
||||||
sr = rows("sec_snr.csv")
|
sr = rows("sec_snr.csv")
|
||||||
rt = [float(r["oma"]) / float(r["legit"]) for r in sr]
|
rt = [float(r["oma"]) / float(r["legit"]) for r in sr]
|
||||||
chk("inset ratio spans 1.01 to 1.09", 1.005 < min(rt) and max(rt) < 1.095,
|
chk("ratio spans 1.32 to 1.54", round(min(rt), 2) == 1.32
|
||||||
"%.3f to %.3f" % (min(rt), max(rt)))
|
and round(max(rt), 2) == 1.54, "%.3f to %.3f" % (min(rt), max(rt)))
|
||||||
|
|
||||||
# the three secrets named in the setup
|
# the three secrets named in the setup
|
||||||
chk("secret sizes UL=64, perm 64, pad 16",
|
chk("secret sizes UL=256, perm 256, pad 16",
|
||||||
all(t in tex for t in ["$UL=64$ key entries",
|
all(t in tex for t in ["$UL=256$ key entries",
|
||||||
"one permutation of $64$ positions",
|
"one permutation of $256$ positions",
|
||||||
"$16$ pad\nbits per user"]),
|
"$16$ pad\nbits per user"]),
|
||||||
"searched tex", needs_tex=True)
|
"searched tex", needs_tex=True)
|
||||||
|
|
||||||
|
chk("no stale d=64 configuration in tex",
|
||||||
|
"$d=64$ real dimensions" not in tex and "$d/U=16$" not in tex,
|
||||||
|
"searched tex", needs_tex=True)
|
||||||
|
|
||||||
# Fig. 5 shows the permutation curve tracking the mask curve
|
# Fig. 5 shows the permutation curve tracking the mask curve
|
||||||
sc = rows("sec_sens_cmp.csv")
|
sc = rows("sec_sens_cmp.csv")
|
||||||
dv = max(abs(float(r["ser_mask"]) - float(r["ser_perm"])) for r in sc)
|
dv = max(abs(float(r["ser_mask"]) - float(r["ser_perm"])) for r in sc)
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""Where does the legitimate advantage over OMA go?
|
"""Where does the legitimate advantage over OMA go?
|
||||||
|
|
||||||
An ideal M-ary receiver at the main configuration should reach 0.199 at
|
The legitimate curve sits above the single-user M-ary bound, and this
|
||||||
10 dB against the 0.275 of resource-matched OMA, a factor of 1.38, while
|
script splits the distance into its two possible causes: residual
|
||||||
the system measures 0.257, a factor of 1.07. This script splits the
|
multi-user interference, which orthogonal keys need not remove because
|
||||||
shortfall into its two causes: residual multi-user interference, which
|
masking is elementwise, and the distance the trained unit codebook falls
|
||||||
orthogonal keys do not remove because masking is elementwise, and the
|
short of an orthogonal set. Run it against whichever configuration
|
||||||
distance the trained unit codebook falls short of an orthogonal set.
|
exp_full.MAIN_D currently names.
|
||||||
"""
|
"""
|
||||||
import math
|
import math
|
||||||
import sys
|
import sys
|
||||||
@@ -17,7 +17,7 @@ import torch
|
|||||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||||
import sse_lib as L
|
import sse_lib as L
|
||||||
from sse_lib import DEVICE, snr_to_sigma2, rayleigh_gain
|
from sse_lib import DEVICE, snr_to_sigma2, rayleigh_gain
|
||||||
from exp_full import main_model
|
from exp_full import main_model, oma_ser_keylen
|
||||||
|
|
||||||
SNR_DB = 10.0
|
SNR_DB = 10.0
|
||||||
FRAMES = 400_000
|
FRAMES = 400_000
|
||||||
@@ -80,8 +80,7 @@ def main():
|
|||||||
print("user-0 SER, all four users transmitting : %.4f" % four)
|
print("user-0 SER, all four users transmitting : %.4f" % four)
|
||||||
print("user-0 SER, other users silent : %.4f" % solo)
|
print("user-0 SER, other users silent : %.4f" % solo)
|
||||||
print("OMA, resource matched (closed form) : %.4f"
|
print("OMA, resource matched (closed form) : %.4f"
|
||||||
% L.oma_ser([SNR_DB])[0])
|
% oma_ser_keylen(m.L, SNR_DB))
|
||||||
print("ideal 16-ary orthogonal (separate MC) : 0.1986")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""Does unconstrained key training still degenerate at the main configuration?
|
||||||
|
|
||||||
|
The manuscript justifies fixing the keys by a measured failure: with the
|
||||||
|
keys free, training drives them to disjoint sparse supports, which is an
|
||||||
|
orthogonal slot allocation rather than a superposition, and which shrinks
|
||||||
|
the key space to the choice of a support. That was measured at d=64 and
|
||||||
|
has to be re-measured whenever the configuration moves, because it is
|
||||||
|
the reason the structured family is the main one.
|
||||||
|
|
||||||
|
Reported per user key: the number of entries holding 99 percent of the
|
||||||
|
energy, and the pairwise overlap of those supports. A dense key spreads
|
||||||
|
its energy over most of the L entries and the supports coincide; a
|
||||||
|
degenerate one concentrates on a few and the supports are disjoint.
|
||||||
|
"""
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import torch
|
||||||
|
|
||||||
|
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||||
|
from exp_full import get_model, main_model, MAIN_D
|
||||||
|
|
||||||
|
|
||||||
|
def support99(w):
|
||||||
|
"""Smallest set of entries carrying 99 percent of the key energy."""
|
||||||
|
e = w.pow(2)
|
||||||
|
order = torch.argsort(e, descending=True)
|
||||||
|
c = torch.cumsum(e[order], 0) / e.sum()
|
||||||
|
k = int((c < 0.99).sum()) + 1
|
||||||
|
return set(order[:k].tolist()), k
|
||||||
|
|
||||||
|
|
||||||
|
def describe(name, W):
|
||||||
|
L = W.shape[1]
|
||||||
|
sups, ks = [], []
|
||||||
|
for u in range(W.shape[0]):
|
||||||
|
sup, k = support99(W[u])
|
||||||
|
sups.append(sup)
|
||||||
|
ks.append(k)
|
||||||
|
ov = []
|
||||||
|
for i in range(len(sups)):
|
||||||
|
for j in range(i + 1, len(sups)):
|
||||||
|
ov.append(len(sups[i] & sups[j]) / max(1, min(len(sups[i]),
|
||||||
|
len(sups[j]))))
|
||||||
|
print("%-14s L=%3d 99%%-energy entries per key: %s "
|
||||||
|
"mean pairwise support overlap %.2f"
|
||||||
|
% (name, L, ks, sum(ov) / len(ov)))
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print("main configuration d=%d" % MAIN_D)
|
||||||
|
m_free = get_model(iters=4000) # keys learned, nothing frozen
|
||||||
|
describe("learned", m_free.masks().detach().cpu())
|
||||||
|
m_fix = main_model()
|
||||||
|
describe("Walsh-Hadamard", m_fix.masks().detach().cpu())
|
||||||
|
print()
|
||||||
|
print("A degenerate key set shows few entries per key and near-zero")
|
||||||
|
print("overlap; a dense one shows most entries and overlap near one.")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
+14
-13
@@ -1,11 +1,11 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""Does an orthogonal unit codebook recover the shortfall?
|
"""Does an orthogonal unit codebook recover the shortfall?
|
||||||
|
|
||||||
diag_interference shows the gap to the ideal M-ary receiver is not
|
diag_interference shows the gap to the single-user M-ary bound is not
|
||||||
multi-user interference but the geometry of the trained unit codebook,
|
multi-user interference but the geometry of the trained unit codebook,
|
||||||
whose Gram matrix carries a root-mean-square off-diagonal of 0.45 where
|
whose Gram matrix carries a large root-mean-square off-diagonal where an
|
||||||
an orthogonal set would carry zero. Vu = L = 16 admits an exactly
|
orthogonal set would carry zero. Vu <= L admits an exactly orthogonal
|
||||||
orthogonal set, so this measures what installing one buys.
|
set, so this measures what installing one buys.
|
||||||
|
|
||||||
Two orthogonal sets are tried, because the choice is not free. The
|
Two orthogonal sets are tried, because the choice is not free. The
|
||||||
Walsh-Hadamard set collides with the keys: the rows are closed under the
|
Walsh-Hadamard set collides with the keys: the rows are closed under the
|
||||||
@@ -22,7 +22,7 @@ import torch
|
|||||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||||
import sse_lib as L
|
import sse_lib as L
|
||||||
from sse_lib import DEVICE, SSE
|
from sse_lib import DEVICE, SSE
|
||||||
from exp_full import hadamard, base_keys
|
from exp_full import hadamard, base_keys, oma_ser_keylen, MAIN_D
|
||||||
from diag_interference import ser
|
from diag_interference import ser
|
||||||
|
|
||||||
SNR = [0.0, 10.0, 20.0]
|
SNR = [0.0, 10.0, 20.0]
|
||||||
@@ -39,13 +39,13 @@ def fixed_model(B, P=4, vu=16, d=64, U=4):
|
|||||||
return m
|
return m
|
||||||
|
|
||||||
|
|
||||||
def hadamard_book(vu=16, Lp=16):
|
def hadamard_book(vu=16, Lp=MAIN_D // 4):
|
||||||
B = torch.zeros(vu, Lp)
|
B = torch.zeros(vu, Lp)
|
||||||
B[:, :vu] = torch.tensor(hadamard(vu).copy(), dtype=torch.float32)
|
B[:, :vu] = torch.tensor(hadamard(vu).copy(), dtype=torch.float32)
|
||||||
return B
|
return B
|
||||||
|
|
||||||
|
|
||||||
def random_ortho_book(vu=16, Lp=16, seed=7):
|
def random_ortho_book(vu=16, Lp=MAIN_D // 4, seed=7):
|
||||||
g = torch.Generator().manual_seed(seed)
|
g = torch.Generator().manual_seed(seed)
|
||||||
A = torch.randn(Lp, Lp, generator=g)
|
A = torch.randn(Lp, Lp, generator=g)
|
||||||
Q, _ = torch.linalg.qr(A)
|
Q, _ = torch.linalg.qr(A)
|
||||||
@@ -68,13 +68,14 @@ def main():
|
|||||||
% ("unit codebook", "max|off|", "0 dB", "10 dB", "20 dB"))
|
% ("unit codebook", "max|off|", "0 dB", "10 dB", "20 dB"))
|
||||||
report("Walsh-Hadamard", fixed_model(hadamard_book()))
|
report("Walsh-Hadamard", fixed_model(hadamard_book()))
|
||||||
report("random orthogonal", fixed_model(random_ortho_book()))
|
report("random orthogonal", fixed_model(random_ortho_book()))
|
||||||
print("%-22s %-10s %-9s %-9s %-9s"
|
from exp_full import main_model
|
||||||
% ("trained (paper)", "0.887", "0.8822", "0.2576", "0.0307"))
|
report("trained", main_model())
|
||||||
|
Lp = MAIN_D // 4
|
||||||
print("%-22s %-10s %-9s %-9s %-9s"
|
print("%-22s %-10s %-9s %-9s %-9s"
|
||||||
% ("OMA, resource matched", "-",
|
% ("OMA, resource matched", "-",
|
||||||
"%.4f" % L.oma_ser([0.0])[0],
|
"%.4f" % oma_ser_keylen(Lp, 0.0),
|
||||||
"%.4f" % L.oma_ser([10.0])[0],
|
"%.4f" % oma_ser_keylen(Lp, 10.0),
|
||||||
"%.4f" % L.oma_ser([20.0])[0]))
|
"%.4f" % oma_ser_keylen(Lp, 20.0)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -97,7 +98,7 @@ def solo_check():
|
|||||||
print("%-22s %-12.4f %-12.4f"
|
print("%-22s %-12.4f %-12.4f"
|
||||||
% (name, ser(m, 10.0, FRAMES, solo=True),
|
% (name, ser(m, 10.0, FRAMES, solo=True),
|
||||||
ser(m, 10.0, FRAMES, solo=False)))
|
ser(m, 10.0, FRAMES, solo=False)))
|
||||||
print("single-user ideal M-ary bound (separate MC): 0.1986")
|
print("(solo isolates the candidate set from the superposition)")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
+30
-21
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Reuses the SSE transmit/receive core from sse_lib.py and adds an
|
Reuses the SSE transmit/receive core from sse_lib.py and adds an
|
||||||
eavesdropper receiver, a jammer channel, and structured mask families.
|
eavesdropper receiver, a jammer channel, and structured mask families.
|
||||||
Main configuration d=64, P=4, Vu=16 (V=Vu^P=65,536), U=4 users, matching
|
Main configuration d=256, P=4, Vu=16 (V=Vu^P=65,536), U=4 users, matching
|
||||||
the language-model token vocabulary scale.
|
the language-model token vocabulary scale.
|
||||||
|
|
||||||
Stages (each writes a CSV to ../data; figures come from replot_security.py
|
Stages (each writes a CSV to ../data; figures come from replot_security.py
|
||||||
@@ -136,7 +136,11 @@ def eve_wrong_mask(U, Lp, seed):
|
|||||||
return W / W.norm(dim=1, keepdim=True) * math.sqrt(Lp)
|
return W / W.norm(dim=1, keepdim=True) * math.sqrt(Lp)
|
||||||
|
|
||||||
|
|
||||||
def get_model(P=4, vu=16, d=64, U=4, iters=4000, seed=1, freeze_W=None, tag=""):
|
MAIN_D = 256 # embedding dimension of the main configuration
|
||||||
|
|
||||||
|
|
||||||
|
def get_model(P=4, vu=16, d=MAIN_D, U=4, iters=4000, seed=1,
|
||||||
|
freeze_W=None, tag=""):
|
||||||
"""Train an SSE model, optionally with fixed (frozen) masks."""
|
"""Train an SSE model, optionally with fixed (frozen) masks."""
|
||||||
set_seed(seed)
|
set_seed(seed)
|
||||||
m = SSE(P=P, vu=vu, d=d, users=U).to(DEVICE)
|
m = SSE(P=P, vu=vu, d=d, users=U).to(DEVICE)
|
||||||
@@ -169,7 +173,7 @@ def base_keys(U: int, Lp: int) -> torch.Tensor:
|
|||||||
return torch.tensor(H[1:U + 1, :Lp].copy(), dtype=torch.float32)
|
return torch.tensor(H[1:U + 1, :Lp].copy(), dtype=torch.float32)
|
||||||
|
|
||||||
|
|
||||||
def main_model(iters=4000, P=4, vu=16, d=64, U=4):
|
def main_model(iters=4000, P=4, vu=16, d=MAIN_D, U=4):
|
||||||
"""The main configuration used by every stage below.
|
"""The main configuration used by every stage below.
|
||||||
|
|
||||||
The keys are frozen to the structured Walsh-Hadamard family rather
|
The keys are frozen to the structured Walsh-Hadamard family rather
|
||||||
@@ -195,7 +199,7 @@ def stage_A():
|
|||||||
# conventional public-mask scheme: the eavesdropper holds the same
|
# conventional public-mask scheme: the eavesdropper holds the same
|
||||||
# (public) masks and decodes exactly like a legitimate user
|
# (public) masks and decodes exactly like a legitimate user
|
||||||
eve_p = eval_ser_eve(m, m.masks().detach().cpu(), snr, frames=frames)
|
eve_p = eval_ser_eve(m, m.masks().detach().cpu(), snr, frames=frames)
|
||||||
oma = oma_ser(snr, bits=int(math.log2(m.V)))
|
oma = [oma_ser_keylen(m.L, s, bits=int(math.log2(m.V))) for s in snr]
|
||||||
chance = 1.0 - (1.0 / m.vu) ** m.P
|
chance = 1.0 - (1.0 / m.vu) ** m.P
|
||||||
write_csv(DATA / "sec_snr.csv",
|
write_csv(DATA / "sec_snr.csv",
|
||||||
["snr_db", "legit", "eve_wrong", "eve_none", "eve_public",
|
["snr_db", "legit", "eve_wrong", "eve_none", "eve_public",
|
||||||
@@ -236,7 +240,7 @@ def train_sse_reg(m: SSE, iters=4000, batch=256, lr=3e-3, seed=1,
|
|||||||
return m
|
return m
|
||||||
|
|
||||||
|
|
||||||
def get_model_reg(P=4, vu=16, d=64, U=4, iters=4000, seed=1):
|
def get_model_reg(P=4, vu=16, d=MAIN_D, U=4, iters=4000, seed=1):
|
||||||
set_seed(seed)
|
set_seed(seed)
|
||||||
m = SSE(P=P, vu=vu, d=d, users=U).to(DEVICE)
|
m = SSE(P=P, vu=vu, d=d, users=U).to(DEVICE)
|
||||||
train_sse_reg(m, iters=iters, seed=seed)
|
train_sse_reg(m, iters=iters, seed=seed)
|
||||||
@@ -314,7 +318,7 @@ def stage_C():
|
|||||||
|
|
||||||
def stage_D():
|
def stage_D():
|
||||||
print("[D] mask families ...")
|
print("[D] mask families ...")
|
||||||
P, vu, d, U = 4, 16, 64, 4
|
P, vu, d, U = 4, 16, MAIN_D, 4
|
||||||
Lp = d // P
|
Lp = d // P
|
||||||
fams = {}
|
fams = {}
|
||||||
# random fixed masks
|
# random fixed masks
|
||||||
@@ -475,8 +479,7 @@ def stage_E():
|
|||||||
# is public so the matched jammer remains buildable
|
# is public so the matched jammer remains buildable
|
||||||
rows.append(("index_cipher", lg, chance, chance, jm2))
|
rows.append(("index_cipher", lg, chance, chance, jm2))
|
||||||
# S5 OMA digital, no encryption: open to everyone
|
# S5 OMA digital, no encryption: open to everyone
|
||||||
from sse_lib import oma_ser
|
lg5 = oma_ser_keylen(m.L, 10.0, bits=int(math.log2(m.V)))
|
||||||
lg5 = oma_ser([10.0], bits=int(math.log2(m.V)))[0]
|
|
||||||
rows.append(("oma_plain", lg5, lg5, lg5, float("nan")))
|
rows.append(("oma_plain", lg5, lg5, lg5, float("nan")))
|
||||||
|
|
||||||
write_csv(DATA / "sec_compare.csv",
|
write_csv(DATA / "sec_compare.csv",
|
||||||
@@ -688,7 +691,7 @@ def stage_J():
|
|||||||
mask_arr = np.array([float(r["ser_mask"]) for r in cmp_rows])
|
mask_arr = np.array([float(r["ser_mask"]) for r in cmp_rows])
|
||||||
perm_arr = np.array([float(r["ser_perm"]) for r in cmp_rows])
|
perm_arr = np.array([float(r["ser_perm"]) for r in cmp_rows])
|
||||||
|
|
||||||
d, L, V = 64, 16, 65536
|
d, L, V = MAIN_D, MAIN_D // 4, 65536
|
||||||
# channel floor of the cipher receiver, read from the stage-I curve
|
# channel floor of the cipher receiver, read from the stage-I curve
|
||||||
# at a fully known pad so both figures share one source
|
# at a fully known pad so both figures share one source
|
||||||
lg1 = 1.0 - (1.0 - float(cmp_rows[-1]["ser_pad"]))
|
lg1 = 1.0 - (1.0 - float(cmp_rows[-1]["ser_pad"]))
|
||||||
@@ -702,9 +705,11 @@ def stage_J():
|
|||||||
best_kappa = np.empty(trials)
|
best_kappa = np.empty(trials)
|
||||||
best_frac = np.empty(trials)
|
best_frac = np.empty(trials)
|
||||||
for t in range(trials):
|
for t in range(trials):
|
||||||
g = rng.standard_normal((K, L))
|
# |first coordinate| of a uniform random unit vector in R^L:
|
||||||
g /= np.linalg.norm(g, axis=1, keepdims=True)
|
# its square is Beta(1/2, (L-1)/2), so the best of K draws
|
||||||
best_kappa[t] = np.abs(g[:, 0]).max()
|
# needs K scalars rather than K*L Gaussians
|
||||||
|
best_kappa[t] = np.sqrt(rng.beta(0.5, (L - 1) / 2.0,
|
||||||
|
size=K).max())
|
||||||
# permutation: fraction of fixed points, Binomial(d, 1/d) per
|
# permutation: fraction of fixed points, Binomial(d, 1/d) per
|
||||||
# draw, so the best of K draws is the max of K such counts
|
# draw, so the best of K draws is the max of K such counts
|
||||||
best_frac[t] = rng.binomial(d, 1.0 / d, size=K).max() / d
|
best_frac[t] = rng.binomial(d, 1.0 / d, size=K).max() / d
|
||||||
@@ -726,14 +731,16 @@ def csv_rows(path):
|
|||||||
yield from _csv.DictReader(f)
|
yield from _csv.DictReader(f)
|
||||||
|
|
||||||
|
|
||||||
def oma_ser_jammed(snr_db, jsr_db_list, bits=16, U=4, n_grid=4096):
|
def oma_ser_jammed(snr_db, jsr_db_list, bits=16, U=4, d=256, n_grid=4096):
|
||||||
"""OMA under a jammer that concentrates on the victim's slots.
|
"""OMA under a jammer that concentrates on the victim's slots.
|
||||||
|
|
||||||
An OMA user occupies d/U exclusive real dimensions that are public,
|
An OMA user occupies L = d/U exclusive real dimensions that are
|
||||||
so a jammer needs no key to put all of its power there. With unit
|
public, and drives its 16 index bits on 16 of them with the whole
|
||||||
energy per real dimension and a total jammer energy of rho times the
|
allocation energy, an amplitude gain of sqrt(L/bits) per bit. A
|
||||||
frame energy, concentrating on d/U of the d dimensions gives a
|
jammer needs no key to put all of its power on those same public
|
||||||
per-dimension jammer variance of U*rho.
|
dimensions. With unit energy per real dimension and a total jammer
|
||||||
|
energy of rho times the frame energy, concentrating on bits of the d
|
||||||
|
dimensions gives a per-dimension jammer variance of (d/bits)*rho.
|
||||||
|
|
||||||
The jammer reaches the victim through its own Rayleigh channel, the
|
The jammer reaches the victim through its own Rayleigh channel, the
|
||||||
same convention eval_scheme uses for every simulated scheme, so the
|
same convention eval_scheme uses for every simulated scheme, so the
|
||||||
@@ -746,11 +753,12 @@ def oma_ser_jammed(snr_db, jsr_db_list, bits=16, U=4, n_grid=4096):
|
|||||||
hj2 = h2.clone() # |hJ|^2 ~ Exp(1), independent
|
hj2 = h2.clone() # |hJ|^2 ~ Exp(1), independent
|
||||||
h = h2.sqrt()[:, None] # (n,1) signal amplitude
|
h = h2.sqrt()[:, None] # (n,1) signal amplitude
|
||||||
snr = 10.0 ** (snr_db / 10.0)
|
snr = 10.0 ** (snr_db / 10.0)
|
||||||
|
gain = math.sqrt((d / U) / bits) # antipodal amplitude
|
||||||
out = []
|
out = []
|
||||||
for jsr_db in jsr_db_list:
|
for jsr_db in jsr_db_list:
|
||||||
rho = 10.0 ** (jsr_db / 10.0)
|
rho = 10.0 ** (jsr_db / 10.0)
|
||||||
var = (1.0 / snr + U * rho * hj2)[None, :] # (1,n)
|
var = (1.0 / snr + (d / bits) * rho * hj2)[None, :] # (1,n)
|
||||||
arg = (h / var.sqrt()).clamp(0, 38)
|
arg = (h * gain / var.sqrt()).clamp(0, 38)
|
||||||
pe = 0.5 * torch.erfc(arg / math.sqrt(2.0)) # per-bit error
|
pe = 0.5 * torch.erfc(arg / math.sqrt(2.0)) # per-bit error
|
||||||
out.append(float((1.0 - (1.0 - pe) ** bits).mean()))
|
out.append(float((1.0 - (1.0 - pe) ** bits).mean()))
|
||||||
return out
|
return out
|
||||||
@@ -774,7 +782,8 @@ def stage_L():
|
|||||||
gp = torch.Generator().manual_seed(11)
|
gp = torch.Generator().manual_seed(11)
|
||||||
perms = torch.randperm(d, generator=gp)[None].repeat(m.users, 1)
|
perms = torch.randperm(d, generator=gp)[None].repeat(m.users, 1)
|
||||||
jsr = [float(v) for v in range(-10, 21, 2)]
|
jsr = [float(v) for v in range(-10, 21, 2)]
|
||||||
oma = oma_ser_jammed(10.0, jsr, bits=int(math.log2(m.V)), U=m.users)
|
oma = oma_ser_jammed(10.0, jsr, bits=int(math.log2(m.V)),
|
||||||
|
U=m.users, d=m.d)
|
||||||
rows = []
|
rows = []
|
||||||
for i, j in enumerate(jsr):
|
for i, j in enumerate(jsr):
|
||||||
blind = eval_scheme(m, 10.0, F, jam_w="blind", jsr_db=j)
|
blind = eval_scheme(m, 10.0, F, jam_w="blind", jsr_db=j)
|
||||||
|
|||||||
+12
-5
@@ -29,7 +29,7 @@ import torch
|
|||||||
import sse_lib as L
|
import sse_lib as L
|
||||||
from sse_lib import (DATA, DEVICE, SSE, rayleigh_gain, snr_to_sigma2,
|
from sse_lib import (DATA, DEVICE, SSE, rayleigh_gain, snr_to_sigma2,
|
||||||
set_seed, write_csv)
|
set_seed, write_csv)
|
||||||
from exp_full import main_model, eve_wrong_mask
|
from exp_full import main_model, eve_wrong_mask, MAIN_D
|
||||||
|
|
||||||
SNR_GRID = [0, 4, 8, 12, 16, 20, 24, 28]
|
SNR_GRID = [0, 4, 8, 12, 16, 20, 24, 28]
|
||||||
# headline recovery is meaningful only where the legitimate user clears
|
# headline recovery is meaningful only where the legitimate user clears
|
||||||
@@ -101,15 +101,22 @@ def wrong_keyed(model: SSE, digits_all, snr_db, seed, rx_masks=None,
|
|||||||
|
|
||||||
|
|
||||||
@torch.no_grad()
|
@torch.no_grad()
|
||||||
def wrong_oma(ids_all, snr_db, seed, bits=16):
|
def wrong_oma(ids_all, snr_db, seed, bits=16, d=256, users=4):
|
||||||
"""Antipodal signaling on the actual token bits, same frame energy."""
|
"""Antipodal signaling on the actual token bits, same frame energy.
|
||||||
|
|
||||||
|
The OMA user owns d/U exclusive dimensions for its 16 bits and puts
|
||||||
|
the whole allocation energy on them, so the antipodal amplitude
|
||||||
|
carries a factor sqrt((d/U)/bits) over the one-bit-per-dimension
|
||||||
|
case. Without it the reference would spend only a quarter of the
|
||||||
|
energy the proposed user spends."""
|
||||||
torch.manual_seed(seed)
|
torch.manual_seed(seed)
|
||||||
N, Uu = ids_all.shape
|
N, Uu = ids_all.shape
|
||||||
b = ((ids_all[..., None] >> torch.arange(bits)) & 1).float() * 2 - 1
|
b = ((ids_all[..., None] >> torch.arange(bits)) & 1).float() * 2 - 1
|
||||||
b = b.to(DEVICE)
|
b = b.to(DEVICE)
|
||||||
sigma = math.sqrt(1.0 / (10.0 ** (snr_db / 10.0)))
|
sigma = math.sqrt(1.0 / (10.0 ** (snr_db / 10.0)))
|
||||||
|
gain = math.sqrt((d / users) / bits)
|
||||||
h = rayleigh_gain((N, Uu, 1))
|
h = rayleigh_gain((N, Uu, 1))
|
||||||
y = h * b + sigma * torch.randn(N, Uu, bits, device=DEVICE)
|
y = gain * h * b + sigma * torch.randn(N, Uu, bits, device=DEVICE)
|
||||||
return ((y * b) < 0).any(dim=2).cpu()
|
return ((y * b) < 0).any(dim=2).cpu()
|
||||||
|
|
||||||
|
|
||||||
@@ -136,7 +143,7 @@ def main():
|
|||||||
f"distinct tokens, max id {int(ids_all.max())}")
|
f"distinct tokens, max id {int(ids_all.max())}")
|
||||||
|
|
||||||
# keys and codebook trained on uniform indices, reused unchanged
|
# keys and codebook trained on uniform indices, reused unchanged
|
||||||
model = main_model(P=P_MAX, vu=VU, d=64, U=U)
|
model = main_model(P=P_MAX, vu=VU, d=MAIN_D, U=U)
|
||||||
model.eval()
|
model.eval()
|
||||||
|
|
||||||
eve_m = eve_wrong_mask(U, model.L, seed=20260813) # outsider
|
eve_m = eve_wrong_mask(U, model.L, seed=20260813) # outsider
|
||||||
|
|||||||
+3
-3
@@ -26,7 +26,7 @@ orthogonal. Two constructions are compared here.
|
|||||||
the codebook together, which is a relabeling, log2(L!) bits
|
the codebook together, which is a relabeling, log2(L!) bits
|
||||||
3. a permutation of which user holds which row, log2(U!) bits
|
3. a permutation of which user holds which row, log2(U!) bits
|
||||||
|
|
||||||
At L=16 and U=4 that is 16 + 44.25 + 4.58 = 64.8 bits per block, and
|
At L=64 and U=4 that is 64 + 296.0 + 4.58 = 364.6 bits per block, and
|
||||||
each transformation is verified below to leave the legitimate error
|
each transformation is verified below to leave the legitimate error
|
||||||
rate unchanged.
|
rate unchanged.
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ import numpy as np
|
|||||||
import torch
|
import torch
|
||||||
|
|
||||||
from sse_lib import DATA, DEVICE, SSE, write_csv, eval_ser_sse
|
from sse_lib import DATA, DEVICE, SSE, write_csv, eval_ser_sse
|
||||||
from exp_full import (hadamard, get_model, base_keys, eval_ser_eve,
|
from exp_full import (MAIN_D, hadamard, get_model, base_keys, eval_ser_eve,
|
||||||
eve_wrong_mask)
|
eve_wrong_mask)
|
||||||
from exp_kpa import collect_known_plaintext, solve_keys
|
from exp_kpa import collect_known_plaintext, solve_keys
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ def install(model: SSE, keys: torch.Tensor, codebook: torch.Tensor,
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
P, VU, D, U = 4, 16, 64, 4
|
P, VU, D, U = 4, 16, MAIN_D, 4
|
||||||
Lp = D // P
|
Lp = D // P
|
||||||
print(f"[K] refresh: L={Lp}, U={U}, "
|
print(f"[K] refresh: L={Lp}, U={U}, "
|
||||||
f"{entropy_bits(U, Lp):.1f} bits per block from the invariance group")
|
f"{entropy_bits(U, Lp):.1f} bits per block from the invariance group")
|
||||||
|
|||||||
+81
-33
@@ -129,6 +129,24 @@ def save(fig, name, insets=()):
|
|||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
f"{name}: a data curve passes under the legend "
|
f"{name}: a data curve passes under the legend "
|
||||||
f"box; move the legend or shrink it")
|
f"box; move the legend or shrink it")
|
||||||
|
for t in ax.texts:
|
||||||
|
tb = t.get_window_extent()
|
||||||
|
if (lb.x0 < tb.x1 and tb.x0 < lb.x1
|
||||||
|
and lb.y0 < tb.y1 and tb.y0 < lb.y1):
|
||||||
|
raise RuntimeError(
|
||||||
|
f"{name}: the annotation {t.get_text()!r} sits under "
|
||||||
|
f"the legend box; move one of them")
|
||||||
|
for t in ax.texts:
|
||||||
|
tb = t.get_window_extent()
|
||||||
|
for line in ax.get_lines():
|
||||||
|
xy = line.get_xydata()
|
||||||
|
if len(xy) == 0:
|
||||||
|
continue
|
||||||
|
for px, py in ax.transData.transform(xy):
|
||||||
|
if tb.x0 <= px <= tb.x1 and tb.y0 <= py <= tb.y1:
|
||||||
|
raise RuntimeError(
|
||||||
|
f"{name}: a curve is drawn through the "
|
||||||
|
f"annotation {t.get_text()!r}; move it")
|
||||||
for ins in insets:
|
for ins in insets:
|
||||||
ib = ins.get_window_extent()
|
ib = ins.get_window_extent()
|
||||||
for a in fig.axes:
|
for a in fig.axes:
|
||||||
@@ -148,6 +166,53 @@ def save(fig, name, insets=()):
|
|||||||
print("[OK]", name)
|
print("[OK]", name)
|
||||||
|
|
||||||
|
|
||||||
|
def main_legit(snr_db="10"):
|
||||||
|
"""The legitimate SER of the main configuration, read from the curve
|
||||||
|
the main configuration produced rather than looked up by key length."""
|
||||||
|
for r in load("sec_snr.csv"):
|
||||||
|
if float(r["snr_db"]) == float(snr_db):
|
||||||
|
return float(r["legit"])
|
||||||
|
raise KeyError("no %s dB row in sec_snr.csv" % snr_db)
|
||||||
|
|
||||||
|
|
||||||
|
def place_legend(ax, cands=("lower left", "center left", "center right",
|
||||||
|
"lower center", "upper right", "upper center",
|
||||||
|
"center", "lower right"),
|
||||||
|
sizes=(6.6, 6.2, 5.8, 5.4, 5.0)):
|
||||||
|
"""Choose the location and font size whose box the fewest curve points
|
||||||
|
fall inside, scored on rendered geometry rather than guessed from the
|
||||||
|
data. The size sweep is what makes a long label set placeable: a
|
||||||
|
five-entry legend of full scheme names has no clear corner at the
|
||||||
|
default size on every figure."""
|
||||||
|
best = None
|
||||||
|
for size in sizes:
|
||||||
|
for loc in cands:
|
||||||
|
leg = ax.legend(loc=loc, prop={"size": size})
|
||||||
|
ax.figure.canvas.draw()
|
||||||
|
lb = leg.get_window_extent()
|
||||||
|
hits = 0
|
||||||
|
for line in ax.get_lines():
|
||||||
|
xy = line.get_xydata()
|
||||||
|
if len(xy) == 0:
|
||||||
|
continue
|
||||||
|
for px, py in ax.transData.transform(xy):
|
||||||
|
if lb.x0 <= px <= lb.x1 and lb.y0 <= py <= lb.y1:
|
||||||
|
hits += 1
|
||||||
|
for t in ax.texts:
|
||||||
|
tb = t.get_window_extent()
|
||||||
|
if (lb.x0 < tb.x1 and tb.x0 < lb.x1
|
||||||
|
and lb.y0 < tb.y1 and tb.y0 < lb.y1):
|
||||||
|
hits += 50 # an annotation hidden is worse than a
|
||||||
|
# few curve points clipped
|
||||||
|
if best is None or hits < best[2]:
|
||||||
|
best = (loc, size, hits)
|
||||||
|
if hits == 0:
|
||||||
|
ax.legend(loc=loc, prop={"size": size})
|
||||||
|
return best
|
||||||
|
ax.legend(loc=best[0], prop={"size": best[1]})
|
||||||
|
return best
|
||||||
|
|
||||||
|
|
||||||
def fig_snr():
|
def fig_snr():
|
||||||
r = load("sec_snr.csv")
|
r = load("sec_snr.csv")
|
||||||
x = col(r, "snr_db")
|
x = col(r, "snr_db")
|
||||||
@@ -167,22 +232,8 @@ def fig_snr():
|
|||||||
ax.set_xlabel("SNR (dB)")
|
ax.set_xlabel("SNR (dB)")
|
||||||
ax.set_ylabel("SER")
|
ax.set_ylabel("SER")
|
||||||
ax.set_xlim(min(x), max(x))
|
ax.set_xlim(min(x), max(x))
|
||||||
ax.legend(loc="lower left")
|
place_legend(ax)
|
||||||
|
save(fig, "fig_sec_snr")
|
||||||
# the gap is a coding gain of a few percent, invisible against two
|
|
||||||
# decades of SER, so an inset reports it as a ratio
|
|
||||||
lg, om = col(r, "legit"), col(r, "oma")
|
|
||||||
ins = ax.inset_axes([0.57, 0.58, 0.39, 0.25])
|
|
||||||
ins.plot(x, [o / l for l, o in zip(lg, om)], color=C_OMA, lw=1.0,
|
|
||||||
marker="^", ms=2.4, markevery=2)
|
|
||||||
ins.axhline(1.0, color="0.55", lw=0.6, ls="--")
|
|
||||||
ins.set_xlim(min(x), max(x))
|
|
||||||
ins.set_ylim(0.995, 1.105)
|
|
||||||
ins.set_yticks([1.00, 1.05, 1.10])
|
|
||||||
ins.set_xticks([0, 10, 20])
|
|
||||||
ins.tick_params(labelsize=5.2, length=1.8, pad=1.0)
|
|
||||||
ins.set_title("OMA / proposed SER", fontsize=5.6, pad=1.5)
|
|
||||||
save(fig, "fig_sec_snr", insets=[ins])
|
|
||||||
|
|
||||||
|
|
||||||
def fig_keylen():
|
def fig_keylen():
|
||||||
@@ -204,7 +255,7 @@ def fig_keylen():
|
|||||||
ax.set_xscale("log", base=2)
|
ax.set_xscale("log", base=2)
|
||||||
# the curves sweep the upper-left to lower-right diagonal, leaving the
|
# the curves sweep the upper-left to lower-right diagonal, leaving the
|
||||||
# lower-left corner empty
|
# lower-left corner empty
|
||||||
ax.legend(loc="lower left")
|
place_legend(ax)
|
||||||
save(fig, "fig_sec_keylen")
|
save(fig, "fig_sec_keylen")
|
||||||
|
|
||||||
|
|
||||||
@@ -228,14 +279,13 @@ def fig_jam():
|
|||||||
ax.plot(x, col(r, "perm_blind"), color=C_EVE, marker="s", ls="-.",
|
ax.plot(x, col(r, "perm_blind"), color=C_EVE, marker="s", ls="-.",
|
||||||
markevery=(me // 2, me), label=LBL["perm"] + ", blind", **OVER)
|
markevery=(me // 2, me), label=LBL["perm"] + ", blind", **OVER)
|
||||||
nojam = float(load("sec_jam.csv")[0]["nojam"])
|
nojam = float(load("sec_jam.csv")[0]["nojam"])
|
||||||
ax.axhline(nojam, color=C_OMA, ls=(0, (1, 3)), lw=0.9)
|
ax.axhline(nojam, color=C_OMA, ls=(0, (1, 3)), lw=0.9,
|
||||||
ax.text(max(x) - 0.6, nojam + 0.02, LBL["nojam"], ha="right",
|
label=LBL["nojam"])
|
||||||
va="bottom", fontsize=7.4, color="#555555")
|
|
||||||
ax.set_xlabel("JSR (dB)")
|
ax.set_xlabel("JSR (dB)")
|
||||||
ax.set_ylabel("SER")
|
ax.set_ylabel("SER")
|
||||||
ax.set_xlim(min(x), max(x))
|
ax.set_xlim(min(x), max(x))
|
||||||
ax.set_ylim(0.2, 1.02)
|
ax.set_ylim(0.8 * nojam, 1.02)
|
||||||
ax.legend(loc="center right", bbox_to_anchor=(0.985, 0.47))
|
place_legend(ax)
|
||||||
save(fig, "fig_sec_jam")
|
save(fig, "fig_sec_jam")
|
||||||
|
|
||||||
|
|
||||||
@@ -257,7 +307,7 @@ def fig_sens():
|
|||||||
ax.set_xlabel("Fraction of the key recovered")
|
ax.set_xlabel("Fraction of the key recovered")
|
||||||
ax.set_ylabel("Eavesdropper SER")
|
ax.set_ylabel("Eavesdropper SER")
|
||||||
ax.set_xlim(0, 1)
|
ax.set_xlim(0, 1)
|
||||||
ax.legend(loc="lower left")
|
place_legend(ax)
|
||||||
save(fig, "fig_sec_sens")
|
save(fig, "fig_sec_sens")
|
||||||
|
|
||||||
|
|
||||||
@@ -273,13 +323,12 @@ def fig_brute():
|
|||||||
label=LBL["pad"], **OVER)
|
label=LBL["pad"], **OVER)
|
||||||
ax.semilogx(x, col(r, "ser_mask"), color=C_LEGIT, marker="o", ls="-",
|
ax.semilogx(x, col(r, "ser_mask"), color=C_LEGIT, marker="o", ls="-",
|
||||||
label=LBL["mask"])
|
label=LBL["mask"])
|
||||||
kl = load("sec_keylen.csv")
|
legit = main_legit()
|
||||||
legit = float([q for q in kl if int(q["L"]) == 16][0]["legit_ser"])
|
|
||||||
ax.axhline(legit, color=C_OMA, ls=":", lw=0.9, label=LBL["legit"])
|
ax.axhline(legit, color=C_OMA, ls=":", lw=0.9, label=LBL["legit"])
|
||||||
ax.set_xlabel("Number of key guesses $K$")
|
ax.set_xlabel("Number of key guesses $K$")
|
||||||
ax.set_ylabel("Eavesdropper SER")
|
ax.set_ylabel("Eavesdropper SER")
|
||||||
ax.set_ylim(0.2, 1.05)
|
ax.set_ylim(0.8 * legit, 1.05)
|
||||||
ax.legend(loc="lower left")
|
place_legend(ax)
|
||||||
save(fig, "fig_sec_brute")
|
save(fig, "fig_sec_brute")
|
||||||
|
|
||||||
|
|
||||||
@@ -299,7 +348,7 @@ def fig_real():
|
|||||||
ax.set_xlabel("SNR (dB)")
|
ax.set_xlabel("SNR (dB)")
|
||||||
ax.set_ylabel("TER")
|
ax.set_ylabel("TER")
|
||||||
ax.set_xlim(min(x), max(x))
|
ax.set_xlim(min(x), max(x))
|
||||||
ax.legend(loc="lower left")
|
place_legend(ax)
|
||||||
save(fig, "fig_sec_real")
|
save(fig, "fig_sec_real")
|
||||||
|
|
||||||
|
|
||||||
@@ -325,10 +374,9 @@ def fig_kpa():
|
|||||||
print("[skip] pkpa.csv not present yet")
|
print("[skip] pkpa.csv not present yet")
|
||||||
# legitimate reference measured with the SAME estimator as the
|
# legitimate reference measured with the SAME estimator as the
|
||||||
# eavesdropper curves, namely the four-user average of eval_ser_sse
|
# eavesdropper curves, namely the four-user average of eval_ser_sse
|
||||||
# at L=16, taken from sec_keylen.csv rather than from the user-1
|
# in the main configuration, rather than the user-1 convention of the
|
||||||
# convention of the scheme-comparison table
|
# scheme-comparison table
|
||||||
kl = load("sec_keylen.csv")
|
legit = main_legit()
|
||||||
legit = float([r for r in kl if int(r["L"]) == 16][0]["legit_ser"])
|
|
||||||
ax.axhline(legit, color=C_OMA, ls=":", lw=0.9, label=LBL["legit"])
|
ax.axhline(legit, color=C_OMA, ls=":", lw=0.9, label=LBL["legit"])
|
||||||
ax.set_xlabel("Known-plaintext frames $N$")
|
ax.set_xlabel("Known-plaintext frames $N$")
|
||||||
ax.set_ylabel("Eavesdropper SER")
|
ax.set_ylabel("Eavesdropper SER")
|
||||||
@@ -336,7 +384,7 @@ def fig_kpa():
|
|||||||
# the 0 dB curve sweeps the upper-right, so anchor the legend at the
|
# the 0 dB curve sweeps the upper-right, so anchor the legend at the
|
||||||
# top edge past the steep drops, above every curve at large N
|
# top edge past the steep drops, above every curve at large N
|
||||||
ax.set_ylim(top=1.18)
|
ax.set_ylim(top=1.18)
|
||||||
ax.legend(loc="upper right", bbox_to_anchor=(1.0, 1.04))
|
place_legend(ax)
|
||||||
save(fig, "fig_sec_kpa")
|
save(fig, "fig_sec_kpa")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -35,7 +35,7 @@ DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
|||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
# global configuration
|
# global configuration
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
D = 64 # embedding dimension (real)
|
D = 256 # embedding dimension (real)
|
||||||
U = 4 # users
|
U = 4 # users
|
||||||
VU = 16 # unit codebook size
|
VU = 16 # unit codebook size
|
||||||
P_MAX = 4 # periods for the main configuration, V = 16^4 = 65536
|
P_MAX = 4 # periods for the main configuration, V = 16^4 = 65536
|
||||||
|
|||||||
+42
-42
@@ -1,43 +1,43 @@
|
|||||||
snr_db,n_frames,kappa,eve_ser
|
snr_db,n_frames,kappa,eve_ser
|
||||||
0,1,0.2506237943,0.998554125
|
0,1,0.12352509,0.99831525
|
||||||
0,2,0.591645799,0.9303495
|
0,2,0.5251209017,0.667321375
|
||||||
0,3,0.7079962283,0.8537115
|
0,3,0.7064555086,0.355686125
|
||||||
0,4,0.7998725504,0.767802875
|
0,4,0.8180372834,0.153838875
|
||||||
0,5,0.850597313,0.684796
|
0,5,0.851283282,0.11704475
|
||||||
0,6,0.8767687038,0.6361745
|
0,6,0.8886688635,0.08632125
|
||||||
0,8,0.9171553269,0.520736875
|
0,8,0.9222010329,0.071005375
|
||||||
0,10,0.936547631,0.455442125
|
0,10,0.9411106989,0.065095875
|
||||||
0,12,0.9516445503,0.400028875
|
0,12,0.9511190057,0.062455
|
||||||
0,16,0.9666089579,0.344806875
|
0,16,0.9647030935,0.05952275
|
||||||
0,24,0.9785378739,0.3075
|
0,24,0.9768752605,0.057202125
|
||||||
0,32,0.9843035683,0.29181625
|
0,32,0.9825294316,0.056090625
|
||||||
0,48,0.989774394,0.27860675
|
0,48,0.9889646709,0.054879875
|
||||||
0,64,0.9924546674,0.272548625
|
0,64,0.9916648567,0.05434675
|
||||||
10,1,0.3695881277,0.986553125
|
10,1,0.1945309106,0.974309875
|
||||||
10,2,0.880338943,0.55928725
|
10,2,0.8957558513,0.09464225
|
||||||
10,3,0.9474378824,0.4139
|
10,3,0.9584526971,0.061422375
|
||||||
10,4,0.9692240357,0.339236625
|
10,4,0.9749164343,0.057618875
|
||||||
10,5,0.9786081538,0.3095635
|
10,5,0.9840320468,0.055860125
|
||||||
10,6,0.9846392065,0.292632375
|
10,6,0.9870633438,0.055293125
|
||||||
10,8,0.9900667578,0.278431375
|
10,8,0.9915206015,0.0545015
|
||||||
10,10,0.9934557095,0.270305
|
10,10,0.993655026,0.054026875
|
||||||
10,12,0.9948186457,0.267862125
|
10,12,0.9947692543,0.05398375
|
||||||
10,16,0.9963249952,0.264728875
|
10,16,0.9961483911,0.05369625
|
||||||
10,24,0.9976470947,0.26182575
|
10,24,0.9975565806,0.0534085
|
||||||
10,32,0.998370938,0.260598625
|
10,32,0.9982031986,0.053507125
|
||||||
10,48,0.9989489555,0.259409125
|
10,48,0.9988671347,0.053128875
|
||||||
10,64,0.9992221802,0.258898125
|
10,64,0.9991624668,0.05316875
|
||||||
20,1,0.6164694946,0.807168125
|
20,1,0.4000679564,0.75409875
|
||||||
20,2,0.9846389949,0.29904075
|
20,2,0.9798189059,0.05720575
|
||||||
20,3,0.9948147267,0.268233
|
20,3,0.9945692539,0.053949375
|
||||||
20,4,0.9972566783,0.262752625
|
20,4,0.9968175337,0.053615375
|
||||||
20,5,0.9983854383,0.260594375
|
20,5,0.9978483543,0.053312375
|
||||||
20,6,0.9988236457,0.259794
|
20,6,0.9984246671,0.053056125
|
||||||
20,8,0.9991258562,0.259128625
|
20,8,0.9989141598,0.053266375
|
||||||
20,10,0.9993467629,0.258526
|
20,10,0.9992120922,0.053062
|
||||||
20,12,0.9994955555,0.25809525
|
20,12,0.9993801698,0.0532745
|
||||||
20,16,0.9996308014,0.258118625
|
20,16,0.9995821282,0.053144375
|
||||||
20,24,0.9997742459,0.25761825
|
20,24,0.9997434661,0.0532995
|
||||||
20,32,0.9998249143,0.25777975
|
20,32,0.9998255745,0.053043125
|
||||||
20,48,0.9998879731,0.257699625
|
20,48,0.9998879209,0.05301875
|
||||||
20,64,0.9999218643,0.257602125
|
20,64,0.9999150276,0.05316375
|
||||||
|
|||||||
|
+16
-16
@@ -1,17 +1,17 @@
|
|||||||
n_frames,perm_frac,eve_ser
|
n_frames,perm_frac,eve_ser
|
||||||
1,0.2545572917,0.9990345
|
1,0.07789713542,0.9998223333
|
||||||
2,0.7299479167,0.8108416667
|
2,0.4416992188,0.8047886667
|
||||||
3,0.9266927083,0.4801366667
|
3,0.8402018229,0.2011701667
|
||||||
4,0.9885416667,0.3021165
|
4,0.9570963542,0.078129
|
||||||
5,0.9955729167,0.2737706667
|
5,0.9874674479,0.058565
|
||||||
6,0.9997395833,0.2587145
|
6,0.998828125,0.05340366667
|
||||||
7,1,0.2575458333
|
7,0.9992838542,0.05337483333
|
||||||
8,1,0.2575538333
|
8,0.9998697917,0.05304583333
|
||||||
10,1,0.2575
|
10,1,0.05286516667
|
||||||
12,1,0.2576706667
|
12,1,0.05297066667
|
||||||
16,1,0.2577931667
|
16,1,0.0530215
|
||||||
20,1,0.2578143333
|
20,1,0.05311583333
|
||||||
24,1,0.2574975
|
24,1,0.05297233333
|
||||||
32,1,0.2576283333
|
32,1,0.05296366667
|
||||||
48,1,0.2576288333
|
48,1,0.05290466667
|
||||||
64,1,0.2575123333
|
64,1,0.052919
|
||||||
|
|||||||
|
@@ -10,22 +10,22 @@
|
|||||||
"headline_runs": 4,
|
"headline_runs": 4,
|
||||||
"recovery": {
|
"recovery": {
|
||||||
"20": {
|
"20": {
|
||||||
"legit": 0.22112422997946612,
|
"legit": 0.7507700205338809,
|
||||||
"eve": 0.0,
|
"eve": 0.0,
|
||||||
"insider": 0.0,
|
"insider": 0.0,
|
||||||
"oma": 0.19815195071868583
|
"oma": 0.6463039014373717
|
||||||
},
|
},
|
||||||
"24": {
|
"24": {
|
||||||
"legit": 0.5395277207392197,
|
"legit": 0.8966889117043121,
|
||||||
"eve": 0.0,
|
"eve": 0.0,
|
||||||
"insider": 0.0,
|
"insider": 0.0,
|
||||||
"oma": 0.5160420944558521
|
"oma": 0.8390657084188912
|
||||||
},
|
},
|
||||||
"28": {
|
"28": {
|
||||||
"legit": 0.7804158110882957,
|
"legit": 0.9588039014373717,
|
||||||
"eve": 0.0,
|
"eve": 0.0,
|
||||||
"insider": 0.0,
|
"insider": 0.0,
|
||||||
"oma": 0.7583418891170431
|
"oma": 0.9319815195071869
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
snr_db,ter_legit,ter_eve,ter_insider,ter_oma
|
snr_db,ter_legit,ter_eve,ter_insider,ter_oma
|
||||||
0,0.8789390651,0.9999649972,0.9990586747,0.8927576706
|
0,0.3971355208,0.9997737319,0.9959146732,0.5232856128
|
||||||
4,0.6421088687,0.9999537463,0.9975273022,0.6680284423
|
4,0.1907565105,0.9995762161,0.9945970678,0.2740881771
|
||||||
8,0.3651042083,0.9999649972,0.9957384091,0.3898399372
|
8,0.08179654372,0.9993636991,0.9939007621,0.123424874
|
||||||
12,0.1726488119,0.9999537463,0.9944920594,0.1874349948
|
12,0.03395771662,0.9992336887,0.9936032383,0.05201666133
|
||||||
16,0.07386590927,0.9999337447,0.9938557585,0.08109648772
|
16,0.01357608609,0.9991099288,0.9934969798,0.02118419474
|
||||||
20,0.0309237239,0.9999362449,0.9936069886,0.03380395432
|
20,0.005565445236,0.9991286803,0.9934507261,0.008630690455
|
||||||
24,0.01248849908,0.9999324946,0.9934769782,0.01364484159
|
24,0.002230178414,0.9991974358,0.9934207237,0.003452776222
|
||||||
28,0.004962897032,0.999924994,0.9934394752,0.005405432435
|
28,0.0008825706056,0.9992486899,0.9934144732,0.001385110809
|
||||||
|
|||||||
|
+24
-24
@@ -1,25 +1,25 @@
|
|||||||
block,legit_invariant,legit_naive,eve_invariant,eve_naive
|
block,legit_invariant,legit_naive,eve_invariant,eve_naive
|
||||||
0,0.25722,0.9825916667,0.9998433333,0.999975
|
0,0.05306083333,0.08038333333,0.9999508333,0.9999683333
|
||||||
1,0.257695,0.7424366667,0.9997983333,0.998495
|
1,0.05273166667,0.1074658333,0.9999333333,0.9998433333
|
||||||
2,0.2575741667,0.8482983333,0.9999891667,0.9999966667
|
2,0.05277666667,0.1060591667,0.9996633333,0.9999733333
|
||||||
3,0.2574108333,0.7789558333,0.9997116667,0.9998625
|
3,0.053255,0.1242133333,0.9999908333,0.9999083333
|
||||||
4,0.2578316667,0.619975,0.9978516667,0.9999391667
|
4,0.0530325,0.1259233333,0.99994,0.99886
|
||||||
5,0.2575941667,0.6579858333,0.99976,0.9997716667
|
5,0.05305,0.1073991667,0.9976566667,0.9998183333
|
||||||
6,0.2568508333,0.7788175,0.9997783333,0.9999341667
|
6,0.05290833333,0.10623,0.9999625,0.9999325
|
||||||
7,0.2574466667,0.6938383333,0.9999633333,0.9989225
|
7,0.05312583333,0.1075391667,0.9999916667,0.9998858333
|
||||||
8,0.2568958333,0.8399391667,0.9983208333,0.99991
|
8,0.05348333333,0.1069425,0.99999,0.9981908333
|
||||||
9,0.2572158333,0.6549775,0.9999891667,0.9999816667
|
9,0.05322833333,0.1036133333,0.9999966667,0.9998841667
|
||||||
10,0.2575733333,0.4789683333,0.9995841667,0.9995091667
|
10,0.05320666667,0.09874583333,0.99966,0.9998675
|
||||||
11,0.2569025,0.6551183333,0.999925,0.9999741667
|
11,0.05308583333,0.0826975,0.999985,0.996885
|
||||||
12,0.2582966667,0.8479616667,0.9997208333,0.9999233333
|
12,0.05284416667,0.1512316667,0.99997,0.9999375
|
||||||
13,0.2579675,0.6551841667,0.9999758333,0.9996183333
|
13,0.05285916667,0.2648991667,0.9999108333,0.9999933333
|
||||||
14,0.2572158333,0.6582558333,1,0.999915
|
14,0.05330416667,0.1010783333,0.9996125,0.99999
|
||||||
15,0.2578983333,0.4791275,0.9994441667,0.9999233333
|
15,0.0528175,0.1194066667,0.99961,0.9998841667
|
||||||
16,0.2570508333,0.7614066667,0.9998991667,0.9993675
|
16,0.05312166667,0.1301383333,0.9990241667,0.9999683333
|
||||||
17,0.2576233333,0.8045108333,0.9994666667,0.9999475
|
17,0.05278,0.1393716667,0.9994875,0.9997066667
|
||||||
18,0.2571108333,0.8073525,0.9997158333,0.999985
|
18,0.05314333333,0.1566191667,0.9998908333,0.9999208333
|
||||||
19,0.257955,0.6890983333,0.9992433333,0.9994441667
|
19,0.05337666667,0.1165041667,0.9990191667,0.9999958333
|
||||||
20,0.25777,0.5282241667,0.9981,0.9992808333
|
20,0.05288,0.1321825,0.99927,0.9996708333
|
||||||
21,0.2568141667,0.7426725,0.9999566667,0.999965
|
21,0.05266333333,0.1290883333,0.9996075,0.9999233333
|
||||||
22,0.2578066667,0.6547841667,0.9997633333,0.9990433333
|
22,0.05324583333,0.09973166667,0.9991875,0.9997808333
|
||||||
23,0.2575241667,0.68849,0.9998791667,0.99982
|
23,0.05300833333,0.1198525,0.9979583333,0.999895
|
||||||
|
|||||||
|
@@ -1,7 +1,7 @@
|
|||||||
n_frames,ser_same_block,ser_next_block
|
n_frames,ser_same_block,ser_next_block
|
||||||
2,0.27116875,0.9988428125
|
2,0.0910125,0.999634375
|
||||||
4,0.260861875,0.998726875
|
4,0.0540171875,0.999456875
|
||||||
8,0.2588515625,0.99869375
|
8,0.0532996875,0.9995453125
|
||||||
16,0.2586403125,0.998735625
|
16,0.0532596875,0.9995365625
|
||||||
32,0.2571871875,0.9986965625
|
32,0.0530225,0.999555
|
||||||
64,0.25772125,0.99869375
|
64,0.053059375,0.9995303125
|
||||||
|
|||||||
|
@@ -1,4 +1,4 @@
|
|||||||
scheme,legit,eve,entropy_bits
|
scheme,legit,eve,entropy_bits
|
||||||
None (fixed key),0.2573025,0.9999908333,14.99964774
|
None (fixed key),0.05300666667,0.9997075,23.76910417
|
||||||
Fresh orthogonal keys,0.7103737847,0.9996877083,14.99964774
|
Fresh orthogonal keys,0.1215548611,0.9996535069,23.76910417
|
||||||
Invariant,0.2574685069,0.99957,64.83510297
|
Invariant,0.05304121528,0.9995528819,364.5801064
|
||||||
|
|||||||
|
+28
-28
@@ -1,29 +1,29 @@
|
|||||||
L,K,best_rho,eve_ser
|
L,K,best_rho,eve_ser
|
||||||
8,1,0.2918601623,0.9945244994
|
8,1,0.2918601623,0.9066920085
|
||||||
8,10,0.6307837307,0.9550597921
|
8,10,0.6307837307,0.5210311818
|
||||||
8,100,0.8190062809,0.8147158732
|
8,100,0.8190062809,0.1464367404
|
||||||
8,1000,0.9077793813,0.5723297059
|
8,1000,0.9077793813,0.07579906172
|
||||||
8,10000,0.9535904264,0.3866372342
|
8,10000,0.9535904264,0.06202610787
|
||||||
8,100000,0.9757162716,0.3157766639
|
8,100000,0.9757162716,0.05732935088
|
||||||
8,1000000,0.9872786315,0.2845244539
|
8,1000000,0.9872786315,0.05494886822
|
||||||
16,1,0.2228791779,0.9990085712
|
16,1,0.2228791779,0.9678674777
|
||||||
16,10,0.4570522499,0.9943536935
|
16,10,0.4570522499,0.8428517805
|
||||||
16,100,0.6321070191,0.9769163907
|
16,100,0.6321070191,0.5220053649
|
||||||
16,1000,0.7417848118,0.9311708657
|
16,1000,0.7417848118,0.2575339696
|
||||||
16,10000,0.8164950053,0.8399011082
|
16,10000,0.8164950053,0.1355546081
|
||||||
16,100000,0.8673534005,0.7274791752
|
16,100000,0.8673534005,0.0917885764
|
||||||
16,1000000,0.9048131336,0.5915534824
|
16,1000000,0.9048131336,0.07564447448
|
||||||
32,1,0.1399813941,0.999821061
|
32,1,0.1399813941,0.9955028264
|
||||||
32,10,0.3205750013,0.9991354579
|
32,10,0.3205750013,0.9696107631
|
||||||
32,100,0.4660256564,0.996404209
|
32,100,0.4660256564,0.8637137122
|
||||||
32,1000,0.5620279439,0.991343747
|
32,1000,0.5620279439,0.694146855
|
||||||
32,10000,0.6393936736,0.9815239297
|
32,10000,0.6393936736,0.505025831
|
||||||
32,100000,0.6993164916,0.9634132739
|
32,100000,0.6993164916,0.3443445207
|
||||||
32,1000000,0.7479539255,0.9349306487
|
32,1000000,0.7479539255,0.2384664588
|
||||||
64,1,0.0987436915,0.9999096477
|
64,1,0.0987436915,0.9985051621
|
||||||
64,10,0.2263401688,0.9997303409
|
64,10,0.2263401688,0.9932755581
|
||||||
64,100,0.3389944824,0.9991750164
|
64,100,0.3389944824,0.9716186298
|
||||||
64,1000,0.4155608514,0.9981802181
|
64,1000,0.4155608514,0.9321217644
|
||||||
64,10000,0.4757575011,0.9967597446
|
64,10000,0.4757575011,0.8672182737
|
||||||
64,100000,0.5299797378,0.994275692
|
64,100000,0.5299797378,0.7724368738
|
||||||
64,1000000,0.5741312045,0.9910114047
|
64,1000000,0.5741312045,0.6658700504
|
||||||
|
|||||||
|
+14
-14
@@ -1,15 +1,15 @@
|
|||||||
K,ser_mask,ser_perm,ser_pad,best_kappa,best_frac
|
K,ser_mask,ser_perm,ser_pad,best_kappa,best_frac
|
||||||
1,0.9993544844,0.9999768274,0.9999886992,0.1909643153,0.0160546875
|
1,0.9975735971,0.9999452686,0.9999855534,0.1060014706,0.00373046875
|
||||||
3,0.997243306,0.9999681491,0.9999660976,0.3326517476,0.0281640625
|
3,0.9939382519,0.999917898,0.9999566603,0.1737056038,0.006982421875
|
||||||
10,0.9938504211,0.999957483,0.9998869919,0.450762326,0.043046875
|
10,0.9885799467,0.999885267,0.9998555344,0.23239142,0.010859375
|
||||||
30,0.9845428901,0.9999498125,0.9996609756,0.5560672497,0.05375
|
30,0.9784526651,0.9998643897,0.9995666031,0.2887248616,0.01333984375
|
||||||
100,0.9739208985,0.999941526,0.9988699188,0.6290900875,0.0653125
|
100,0.9639408295,0.9998383342,0.9985553436,0.3406099894,0.01643554687
|
||||||
300,0.9540369033,0.9999351712,0.9966097565,0.688703621,0.0741796875
|
300,0.9496426441,0.9998154842,0.9956660309,0.3763731975,0.01915039062
|
||||||
1000,0.9234069553,0.9999275566,0.9886991882,0.7427389508,0.0848046875
|
1000,0.9229213733,0.9997945248,0.9855534363,0.4126070285,0.021640625
|
||||||
3000,0.884658701,0.9999206979,0.9660975647,0.7822538913,0.094375
|
3000,0.8778012069,0.9997791545,0.9566603088,0.4459480988,0.02346679688
|
||||||
10000,0.8305012761,0.999914875,0.8869918823,0.8169040678,0.1025
|
10000,0.8268693567,0.9997572087,0.8555343628,0.4766569871,0.02607421875
|
||||||
30000,0.7833179277,0.9999088001,0.660975647,0.8434367197,0.1109765625
|
30000,0.7835337024,0.9997399479,0.5666030884,0.502465176,0.028125
|
||||||
65536,0.7451236968,0.9999050488,0.25939,0.8592030095,0.1162109375
|
65536,0.7563541371,0.9997287696,0.05323,0.5185642041,0.029453125
|
||||||
100000,0.7206406422,0.9999030892,0.25939,0.8678447033,0.1189453125
|
100000,0.7390554126,0.9997216187,0.05323,0.5289073023,0.03030273438
|
||||||
300000,0.6546171753,0.9998972103,0.25939,0.8874619916,0.1271484375
|
300000,0.6980880931,0.9997044401,0.05323,0.5526416305,0.03234375
|
||||||
1000000,0.5948033388,0.9998918073,0.25939,0.9034448904,0.1346875
|
1000000,0.6655177674,0.9996913713,0.05323,0.5720463815,0.03389648438
|
||||||
|
|||||||
|
@@ -1,6 +1,6 @@
|
|||||||
scheme,legit_ser,eve_out,eve_in,jam0_ser
|
scheme,legit_ser,eve_out,eve_in,jam0_ser
|
||||||
proposed,0.257845,1,0.9999775,0.7719425
|
proposed,0.0529425,0.9999925,0.9999825,0.3634175
|
||||||
public_mask,0.257845,0.257845,0.257845,0.91675
|
public_mask,0.0529425,0.0529425,0.0529425,0.83882
|
||||||
perm_key,0.2580675,0.99999,0.2580675,0.7721175
|
perm_key,0.0528525,0.9999925,0.0528525,0.36425
|
||||||
index_cipher,0.257845,0.9999847412,0.9999847412,0.91675
|
index_cipher,0.0529425,0.9999847412,0.9999847412,0.83882
|
||||||
oma_plain,0.2747696909,0.2747696909,0.2747696909,nan
|
oma_plain,0.08056383667,0.08056383667,0.08056383667,nan
|
||||||
|
|||||||
|
+7
-7
@@ -1,8 +1,8 @@
|
|||||||
jsr_db,blind,matched,nojam
|
jsr_db,blind,matched,nojam
|
||||||
-10,0.41313,0.602758,0.257308
|
-10,0.100512,0.370894,0.053384
|
||||||
-5,0.583948,0.79449,0.257308
|
-5,0.186312,0.629542,0.053384
|
||||||
0,0.772444,0.917424,0.257308
|
0,0.364964,0.838068,0.053384
|
||||||
5,0.902872,0.97136,0.257308
|
5,0.610574,0.94122,0.053384
|
||||||
10,0.964788,0.990494,0.257308
|
10,0.816206,0.980862,0.053384
|
||||||
15,0.988114,0.99704,0.257308
|
15,0.929192,0.993638,0.053384
|
||||||
20,0.99617,0.999024,0.257308
|
20,0.97542,0.997986,0.053384
|
||||||
|
|||||||
|
+16
-16
@@ -1,17 +1,17 @@
|
|||||||
jsr_db,blind,matched,perm_blind,oma_targeted
|
jsr_db,blind,matched,perm_blind,oma_targeted
|
||||||
-10,0.4144466667,0.6026633333,0.4142366667,0.6401244609
|
-10,0.10064,0.37023,0.10146,0.5614379461
|
||||||
-8,0.47322,0.6827466667,0.4749333333,0.7152454705
|
-8,0.1249233333,0.4708266667,0.12691,0.65563829
|
||||||
-6,0.5445766667,0.7588666667,0.54569,0.7840240868
|
-6,0.1634766667,0.5763733333,0.16262,0.7407016397
|
||||||
-4,0.6223533333,0.8241966667,0.6225633333,0.8424432091
|
-4,0.214,0.6803433333,0.21294,0.8120662111
|
||||||
-2,0.7009733333,0.8757933333,0.7011833333,0.8888838836
|
-2,0.2825866667,0.76744,0.2808,0.8681995366
|
||||||
0,0.7724933333,0.9165966667,0.7720633333,0.9237966241
|
0,0.3646733333,0.8388366667,0.36478,0.9100289945
|
||||||
2,0.8337533333,0.9441633333,0.8322966667,0.9488822017
|
2,0.4608633333,0.8904066667,0.4600566667,0.9398716824
|
||||||
4,0.88268,0.9645966667,0.88304,0.9662811712
|
4,0.5610033333,0.92756,0.5599433333,0.9604546595
|
||||||
6,0.9196833333,0.97682,0.9193566667,0.9780307416
|
6,0.65865,0.9529333333,0.6570033333,0.9742944207
|
||||||
8,0.9457333333,0.9852033333,0.9457433333,0.9858109157
|
8,0.7445133333,0.96962,0.74325,0.9834284377
|
||||||
10,0.96429,0.9906933333,0.96467,0.9908905586
|
10,0.8155633333,0.9808933333,0.8162233333,0.9893770607
|
||||||
12,0.97734,0.9942133333,0.9765066667,0.9941743502
|
12,0.8720266667,0.98766,0.8727233333,0.9932152779
|
||||||
14,0.98498,0.9962466667,0.9854933333,0.9962827887
|
14,0.9134533333,0.99211,0.9136866667,0.9956760816
|
||||||
16,0.9904633333,0.9975066667,0.99042,0.9976304229
|
16,0.94315,0.9950333333,0.9424633333,0.9972471319
|
||||||
18,0.99391,0.99848,0.99382,0.9984893291
|
18,0.96219,0.9969166667,0.96196,0.9982475299
|
||||||
20,0.99619,0.9990566667,0.9963433333,0.9990359654
|
20,0.9756633333,0.99808,0.97557,0.9988837869
|
||||||
|
|||||||
|
+200
-200
@@ -1,201 +1,201 @@
|
|||||||
ser,gap_db
|
ser,gap_db
|
||||||
0.6026633333,5.493678481
|
0.37023,10.11553523
|
||||||
0.6046408543,5.495143167
|
0.3732723786,10.11830625
|
||||||
0.6066183752,5.496607853
|
0.3763147571,10.12107727
|
||||||
0.6085958961,5.498072538
|
0.3793571357,10.12384829
|
||||||
0.6105734171,5.499537224
|
0.3823995142,10.12661931
|
||||||
0.612550938,5.50100191
|
0.3854418928,10.12939033
|
||||||
0.614528459,5.502466596
|
0.3884842714,10.13216136
|
||||||
0.6165059799,5.503931281
|
0.3915266499,10.13493238
|
||||||
0.6184835008,5.505395967
|
0.3945690285,10.1377034
|
||||||
0.6204610218,5.506860653
|
0.397611407,10.14047442
|
||||||
0.6224385427,5.508301835
|
0.4006537856,10.14324544
|
||||||
0.6244160637,5.509221054
|
0.4036961642,10.14601646
|
||||||
0.6263935846,5.510140274
|
0.4067385427,10.14878749
|
||||||
0.6283711055,5.511059493
|
0.4097809213,10.15155851
|
||||||
0.6303486265,5.511978713
|
0.4128232998,10.15432953
|
||||||
0.6323261474,5.512897932
|
0.4158656784,10.15710055
|
||||||
0.6343036683,5.513817151
|
0.418908057,10.15987157
|
||||||
0.6362811893,5.514736371
|
0.4219504355,10.16264259
|
||||||
0.6382587102,5.51565559
|
0.4249928141,10.16541362
|
||||||
0.6402362312,5.516574809
|
0.4280351926,10.16818464
|
||||||
0.6422137521,5.517494029
|
0.4310775712,10.17095566
|
||||||
0.644191273,5.518413248
|
0.4341199497,10.17372668
|
||||||
0.646168794,5.519332468
|
0.4371623283,10.1764977
|
||||||
0.6481463149,5.520251687
|
0.4402047069,10.17926873
|
||||||
0.6501238358,5.521170906
|
0.4432470854,10.18203975
|
||||||
0.6521013568,5.522090126
|
0.446289464,10.18481077
|
||||||
0.6540788777,5.523009345
|
0.4493318425,10.18758179
|
||||||
0.6560563987,5.523928564
|
0.4523742211,10.19035281
|
||||||
0.6580339196,5.524847784
|
0.4554165997,10.19312383
|
||||||
0.6600114405,5.525767003
|
0.4584589782,10.19589486
|
||||||
0.6619889615,5.526686223
|
0.4615013568,10.19814261
|
||||||
0.6639664824,5.527605442
|
0.4645437353,10.19841844
|
||||||
0.6659440034,5.528524661
|
0.4675861139,10.19869428
|
||||||
0.6679215243,5.529443881
|
0.4706284925,10.19897012
|
||||||
0.6698990452,5.5303631
|
0.473670871,10.20189792
|
||||||
0.6718765662,5.53128232
|
0.4767132496,10.2050105
|
||||||
0.6738540871,5.532201539
|
0.4797556281,10.20812308
|
||||||
0.675831608,5.533120758
|
0.4827980067,10.21123566
|
||||||
0.677809129,5.534039978
|
0.4858403853,10.21434824
|
||||||
0.6797866499,5.534959197
|
0.4888827638,10.21746083
|
||||||
0.6817641709,5.535878416
|
0.4919251424,10.22057341
|
||||||
0.6837416918,5.535503786
|
0.4949675209,10.22368599
|
||||||
0.6857192127,5.533851599
|
0.4980098995,10.22679857
|
||||||
0.6876967337,5.532199412
|
0.5010522781,10.22991115
|
||||||
0.6896742546,5.530547225
|
0.5040946566,10.23302373
|
||||||
0.6916517755,5.528895037
|
0.5071370352,10.23613631
|
||||||
0.6936292965,5.52724285
|
0.5101794137,10.2392489
|
||||||
0.6956068174,5.525590663
|
0.5132217923,10.24236148
|
||||||
0.6975843384,5.523938475
|
0.5162641709,10.24547406
|
||||||
0.6995618593,5.522286288
|
0.5193065494,10.24858664
|
||||||
0.7015393802,5.522063588
|
0.522348928,10.25169922
|
||||||
0.7035169012,5.525405405
|
0.5253913065,10.2548118
|
||||||
0.7054944221,5.528747221
|
0.5284336851,10.25792438
|
||||||
0.707471943,5.532089038
|
0.5314760637,10.26103697
|
||||||
0.709449464,5.535430855
|
0.5345184422,10.26414955
|
||||||
0.7114269849,5.538772672
|
0.5375608208,10.26726213
|
||||||
0.7134045059,5.542114488
|
0.5406031993,10.27037471
|
||||||
0.7153820268,5.545456305
|
0.5436455779,10.27348729
|
||||||
0.7173595477,5.548798122
|
0.5466879564,10.27659987
|
||||||
0.7193370687,5.552139939
|
0.549730335,10.27971246
|
||||||
0.7213145896,5.555481755
|
0.5527727136,10.28282504
|
||||||
0.7232921106,5.558823572
|
0.5558150921,10.28593762
|
||||||
0.7252696315,5.562165389
|
0.5588574707,10.2890502
|
||||||
0.7272471524,5.565507206
|
0.5618998492,10.29261998
|
||||||
0.7292246734,5.568849022
|
0.5649422278,10.29728408
|
||||||
0.7312021943,5.572190839
|
0.5679846064,10.30194819
|
||||||
0.7331797152,5.575532656
|
0.5710269849,10.3066123
|
||||||
0.7351572362,5.578874473
|
0.5740693635,10.3112764
|
||||||
0.7371347571,5.582216289
|
0.577111742,10.31572832
|
||||||
0.7391122781,5.585558106
|
0.5801541206,10.31951819
|
||||||
0.741089799,5.588899923
|
0.5831964992,10.32330805
|
||||||
0.7430673199,5.59224174
|
0.5862388777,10.32709792
|
||||||
0.7450448409,5.595583557
|
0.5892812563,10.33088779
|
||||||
0.7470223618,5.598925373
|
0.5923236348,10.33467765
|
||||||
0.7489998827,5.60226719
|
0.5953660134,10.33846752
|
||||||
0.7509774037,5.605609007
|
0.598408392,10.34225739
|
||||||
0.7529549246,5.608950824
|
0.6014507705,10.34604725
|
||||||
0.7549324456,5.61229264
|
0.6044931491,10.34983712
|
||||||
0.7569099665,5.615634457
|
0.6075355276,10.35362698
|
||||||
0.7588874874,5.618885922
|
0.6105779062,10.35741685
|
||||||
0.7608650084,5.613646281
|
0.6136202848,10.36120672
|
||||||
0.7628425293,5.608406639
|
0.6166626633,10.36499658
|
||||||
0.7648200503,5.603166998
|
0.6197050419,10.36878645
|
||||||
0.7667975712,5.597927356
|
0.6227474204,10.37257631
|
||||||
0.7687750921,5.592687715
|
0.625789799,10.37636618
|
||||||
0.7707526131,5.587448073
|
0.6288321776,10.38015605
|
||||||
0.772730134,5.583317494
|
0.6318745561,10.38394591
|
||||||
0.7747076549,5.587339621
|
0.6349169347,10.38773578
|
||||||
0.7766851759,5.591361749
|
0.6379593132,10.39152564
|
||||||
0.7786626968,5.595383876
|
0.6410016918,10.39531551
|
||||||
0.7806402178,5.599406004
|
0.6440440704,10.39910538
|
||||||
0.7826177387,5.603428132
|
0.6470864489,10.40289524
|
||||||
0.7845952596,5.607450259
|
0.6501288275,10.40668511
|
||||||
0.7865727806,5.611472387
|
0.653171206,10.41047497
|
||||||
0.7885503015,5.615494514
|
0.6562135846,10.41426484
|
||||||
0.7905278224,5.619516642
|
0.6592559631,10.41975796
|
||||||
0.7925053434,5.62353877
|
0.6622983417,10.4320994
|
||||||
0.7944828643,5.627560897
|
0.6653407203,10.44444085
|
||||||
0.7964603853,5.631583025
|
0.6683830988,10.45678229
|
||||||
0.7984379062,5.635605152
|
0.6714254774,10.46912373
|
||||||
0.8004154271,5.63962728
|
0.6744678559,10.48146518
|
||||||
0.8023929481,5.643649408
|
0.6775102345,10.49380662
|
||||||
0.804370469,5.647671535
|
0.6805526131,10.50536815
|
||||||
0.8063479899,5.651693663
|
0.6835949916,10.50637164
|
||||||
0.8083255109,5.65571579
|
0.6866373702,10.50737513
|
||||||
0.8103030318,5.659737918
|
0.6896797487,10.50837863
|
||||||
0.8122805528,5.663760046
|
0.6927221273,10.50938212
|
||||||
0.8142580737,5.667782173
|
0.6957645059,10.51038561
|
||||||
0.8162355946,5.671804301
|
0.6988068844,10.51138911
|
||||||
0.8182131156,5.675826428
|
0.701849263,10.5123926
|
||||||
0.8201906365,5.679848556
|
0.7048916415,10.51339609
|
||||||
0.8221681575,5.683870684
|
0.7079340201,10.51439959
|
||||||
0.8241456784,5.687892811
|
0.7109763987,10.51540308
|
||||||
0.8261231993,5.676216805
|
0.7140187772,10.51640657
|
||||||
0.8281007203,5.664125326
|
0.7170611558,10.51741007
|
||||||
0.8300782412,5.652033848
|
0.7201035343,10.51841356
|
||||||
0.8320557621,5.639942369
|
0.7231459129,10.51941705
|
||||||
0.8340332831,5.630154814
|
0.7261882915,10.52042055
|
||||||
0.836010804,5.634337883
|
0.72923067,10.52142404
|
||||||
0.837988325,5.638520953
|
0.7322730486,10.52242753
|
||||||
0.8399658459,5.642704022
|
0.7353154271,10.52343103
|
||||||
0.8419433668,5.646887091
|
0.7383578057,10.52443452
|
||||||
0.8439208878,5.651070161
|
0.7414001843,10.52543801
|
||||||
0.8458984087,5.65525323
|
0.7444425628,10.5264415
|
||||||
0.8478759296,5.6594363
|
0.7474849414,10.5418762
|
||||||
0.8498534506,5.663619369
|
0.7505273199,10.55765458
|
||||||
0.8518309715,5.667802439
|
0.7535696985,10.57343296
|
||||||
0.8538084925,5.671985508
|
0.7566120771,10.58921134
|
||||||
0.8557860134,5.676168577
|
0.7596544556,10.60498973
|
||||||
0.8577635343,5.680351647
|
0.7626968342,10.62076811
|
||||||
0.8597410553,5.684534716
|
0.7657392127,10.63654649
|
||||||
0.8617185762,5.688717786
|
0.7687815913,10.64555048
|
||||||
0.8636960972,5.692900855
|
0.7718239698,10.64596631
|
||||||
0.8656736181,5.697083925
|
0.7748663484,10.64638213
|
||||||
0.867651139,5.701266994
|
0.777908727,10.64679796
|
||||||
0.86962866,5.705450063
|
0.7809511055,10.64721379
|
||||||
0.8716061809,5.709633133
|
0.7839934841,10.64762962
|
||||||
0.8735837018,5.713816202
|
0.7870358626,10.64804544
|
||||||
0.8755612228,5.717999272
|
0.7900782412,10.64846127
|
||||||
0.8775387437,5.704285934
|
0.7931206198,10.6488771
|
||||||
0.8795162647,5.688192672
|
0.7961629983,10.64929293
|
||||||
0.8814937856,5.67209941
|
0.7992053769,10.64970876
|
||||||
0.8834713065,5.666428984
|
0.8022477554,10.65012458
|
||||||
0.8854488275,5.676382997
|
0.805290134,10.65054041
|
||||||
0.8874263484,5.68633701
|
0.8083325126,10.65095624
|
||||||
0.8894038693,5.696291023
|
0.8113748911,10.65137207
|
||||||
0.8913813903,5.706245035
|
0.8144172697,10.65178789
|
||||||
0.8933589112,5.716199048
|
0.8174596482,10.66599377
|
||||||
0.8953364322,5.726153061
|
0.8205020268,10.68853386
|
||||||
0.8973139531,5.736107074
|
0.8235444054,10.71107394
|
||||||
0.899291474,5.746061086
|
0.8265867839,10.73361403
|
||||||
0.901268995,5.756015099
|
0.8296291625,10.75615411
|
||||||
0.9032465159,5.765969112
|
0.832671541,10.7786942
|
||||||
0.9052240369,5.775923124
|
0.8357139196,10.80123429
|
||||||
0.9072015578,5.785877137
|
0.8387562982,10.82377437
|
||||||
0.9091790787,5.79583115
|
0.8417986767,10.81441442
|
||||||
0.9111565997,5.805785163
|
0.8448410553,10.80418892
|
||||||
0.9131341206,5.815739175
|
0.8478834338,10.79396343
|
||||||
0.9151116415,5.825693188
|
0.8509258124,10.78373793
|
||||||
0.9170891625,5.824055924
|
0.853968191,10.77351244
|
||||||
0.9190666834,5.787467425
|
0.8570105695,10.76328694
|
||||||
0.9210442044,5.781806417
|
0.8600529481,10.75306144
|
||||||
0.9230217253,5.790159547
|
0.8630953266,10.74283595
|
||||||
0.9249992462,5.798512677
|
0.8661377052,10.73261045
|
||||||
0.9269767672,5.806865807
|
0.8691800838,10.72238495
|
||||||
0.9289542881,5.815218937
|
0.8722224623,10.71467677
|
||||||
0.930931809,5.823572067
|
0.8752648409,10.74356673
|
||||||
0.93290933,5.831925197
|
0.8783072194,10.77245668
|
||||||
0.9348868509,5.840278327
|
0.881349598,10.80134663
|
||||||
0.9368643719,5.848631457
|
0.8843919765,10.83023658
|
||||||
0.9388418928,5.856984587
|
0.8874343551,10.85912654
|
||||||
0.9408194137,5.865337718
|
0.8904767337,10.88696207
|
||||||
0.9427969347,5.873690848
|
0.8935191122,10.87006808
|
||||||
0.9447744556,5.866565539
|
0.8965614908,10.85317409
|
||||||
0.9467519765,5.856412766
|
0.8996038693,10.8362801
|
||||||
0.9487294975,5.875987642
|
0.9026462479,10.81938611
|
||||||
0.9507070184,5.895562519
|
0.9056886265,10.80249212
|
||||||
0.9526845394,5.915137396
|
0.908731005,10.78559813
|
||||||
0.9546620603,5.934712273
|
0.9117733836,10.76870414
|
||||||
0.9566395812,5.95428715
|
0.9148157621,10.77779104
|
||||||
0.9586171022,5.973862027
|
0.9178581407,10.81891382
|
||||||
0.9605946231,5.993436904
|
0.9209005193,10.86003661
|
||||||
0.9625721441,6.013011781
|
0.9239428978,10.90115939
|
||||||
0.964549665,6.044395891
|
0.9269852764,10.94228217
|
||||||
0.9665271859,6.026989308
|
0.9300276549,10.92173347
|
||||||
0.9685047069,6.00649273
|
0.9330700335,10.8868213
|
||||||
0.9704822278,5.985996153
|
0.9361124121,10.85190914
|
||||||
0.9724597487,5.965499576
|
0.9391547906,10.81699698
|
||||||
0.9744372697,5.945002998
|
0.9421971692,10.78208482
|
||||||
0.9764147906,5.924506421
|
0.9452395477,10.82593689
|
||||||
0.9783923116,5.900370081
|
0.9482819263,10.90570533
|
||||||
0.9803698325,5.94627134
|
0.9513243049,10.98547378
|
||||||
0.9823473534,5.9921726
|
0.9543666834,11.00642719
|
||||||
0.9843248744,6.038073859
|
0.957409062,10.96135692
|
||||||
0.9863023953,6.081945759
|
0.9604514405,10.91628665
|
||||||
0.9882799162,6.082821636
|
0.9634938191,10.92780128
|
||||||
0.9902574372,6.083697512
|
0.9665361977,11.01476826
|
||||||
0.9922349581,6.152098946
|
0.9695785762,11.10173524
|
||||||
0.9942124791,6.265817892
|
0.9726209548,11.01598634
|
||||||
0.99619,6.055737705
|
0.9756633333,10.92785334
|
||||||
|
|||||||
|
@@ -1,5 +1,5 @@
|
|||||||
family,legit_ser,eve_ser,eve_ones_ser,mask_xcorr
|
family,legit_ser,eve_ser,eve_ones_ser,mask_xcorr
|
||||||
random,0.64962,0.998488,0.999988,0.2709003091
|
random,0.068322,0.998269,0.999996,0.06645943969
|
||||||
hadamard,0.257299,0.9999905,0.9999755,0
|
hadamard,0.0530375,0.9997025,0.9999785,0
|
||||||
learned,0.2762895,0.9999285,0.99999,0.007116591092
|
learned,0.0635265,0.9997915,0.9997865,0.006678360514
|
||||||
learned_reg,0.315952,0.9999555,0.9999175,0.01121100038
|
learned_reg,0.061412,0.999691,0.9998455,0.002381352475
|
||||||
|
|||||||
|
+7
-7
@@ -1,8 +1,8 @@
|
|||||||
jsr_db,plain,regularized
|
jsr_db,plain,regularized
|
||||||
-10,0.46703,0.4719866667
|
-10,0.11818,0.11519
|
||||||
-5,0.6348,0.6301533333
|
-5,0.2138833333,0.2087733333
|
||||||
0,0.8073133333,0.80122
|
0,0.40523,0.3974866667
|
||||||
5,0.9191366667,0.91577
|
5,0.64827,0.6407633333
|
||||||
10,0.9707266667,0.96911
|
10,0.83815,0.83505
|
||||||
15,0.9901433333,0.99006
|
15,0.9393566667,0.9379166667
|
||||||
20,0.9968333333,0.9964333333
|
20,0.97962,0.9787433333
|
||||||
|
|||||||
|
+22
-22
@@ -1,23 +1,23 @@
|
|||||||
rho,eve_ser
|
rho,eve_ser
|
||||||
0,0.999985
|
0,0.9999725
|
||||||
0.1,0.99994625
|
0.1,0.999645
|
||||||
0.2,0.9998125
|
0.2,0.9978275
|
||||||
0.3,0.99964375
|
0.3,0.98789125
|
||||||
0.4,0.99860875
|
0.4,0.953745
|
||||||
0.5,0.99641875
|
0.5,0.846655
|
||||||
0.6,0.989405
|
0.6,0.60245875
|
||||||
0.65,0.9817575
|
0.65,0.48618375
|
||||||
0.7,0.96633
|
0.7,0.32927
|
||||||
0.75,0.9402875
|
0.75,0.23272375
|
||||||
0.8,0.87396
|
0.8,0.1458875
|
||||||
0.84,0.80818
|
0.84,0.1059525
|
||||||
0.88,0.7000025
|
0.88,0.08334375
|
||||||
0.9,0.62012
|
0.9,0.07761625
|
||||||
0.92,0.51693625
|
0.92,0.069835
|
||||||
0.94,0.4271675
|
0.94,0.06505125
|
||||||
0.96,0.3636825
|
0.96,0.0602775
|
||||||
0.97,0.33119875
|
0.97,0.0587575
|
||||||
0.98,0.30263125
|
0.98,0.05626875
|
||||||
0.99,0.2772575
|
0.99,0.0543425
|
||||||
0.995,0.26772625
|
0.995,0.054125
|
||||||
1,0.25672125
|
1,0.05307125
|
||||||
|
|||||||
|
+13
-13
@@ -1,14 +1,14 @@
|
|||||||
frac,ser_mask,ser_perm,ser_pad
|
frac,ser_mask,ser_perm,ser_pad
|
||||||
0,0.9999758333,0.9999883333,0.9999886992
|
0,0.9999716667,0.9999766667,0.9999855534
|
||||||
0.2,0.9998233333,0.999845,0.9998961502
|
0.2,0.9982225,0.9982933333,0.999867242
|
||||||
0.4,0.998725,0.9983133333,0.9990456633
|
0.4,0.9558158333,0.9519216667,0.9987800093
|
||||||
0.6,0.98967125,0.9839833333,0.9912300403
|
0.6,0.61956875,0.6330266667,0.9887887893
|
||||||
0.75,0.9379629167,0.9079,0.953711875
|
0.75,0.2243020833,0.2672066667,0.940826875
|
||||||
0.85,0.7883508333,0.75701,0.8596806442
|
0.85,0.09969458333,0.1194716667,0.8206206283
|
||||||
0.9,0.6134920833,0.5836283333,0.7556898116
|
0.9,0.07701541667,0.0858,0.6876823738
|
||||||
0.92,0.5265704167,0.5003716667,0.6950201284
|
0.92,0.07021208333,0.07434166667,0.6101243663
|
||||||
0.94,0.43973,0.456195,0.6192843094
|
0.94,0.06535041667,0.066805,0.5133063362
|
||||||
0.955,0.3805966667,0.3946716667,0.5503775633
|
0.955,0.06155541667,0.06314,0.4252183547
|
||||||
0.97,0.3297841667,0.3282283333,0.4689992019
|
0.97,0.05860083333,0.06018333333,0.3211870949
|
||||||
0.985,0.2895645833,0.2584466667,0.3728919542
|
0.985,0.05551916667,0.05543333333,0.1983269406
|
||||||
1,0.2575758333,0.2577083333,0.25939
|
1,0.052955,0.05323,0.05323
|
||||||
|
|||||||
|
+11
-11
@@ -1,12 +1,12 @@
|
|||||||
snr_db,legit,eve_wrong,eve_none,eve_public,oma,chance
|
snr_db,legit,eve_wrong,eve_none,eve_public,oma,chance
|
||||||
0,0.8821684375,0.999989375,0.9999803125,0.8819953125,0.8933480658,0.9999847412
|
0,0.3976709375,0.999875,0.9999815625,0.398049375,0.5239437084,0.9999847412
|
||||||
2,0.779363125,0.99999125,0.999980625,0.7794809375,0.7973276257,0.9999847412
|
2,0.280670625,0.9998496875,0.9999834375,0.2805728125,0.3879090701,0.9999847412
|
||||||
4,0.6455015625,0.9999884375,0.9999809375,0.64627375,0.6686275787,0.9999847412
|
4,0.191034375,0.999809375,0.999985,0.190259375,0.2737289805,0.9999847412
|
||||||
6,0.5016365625,0.9999903125,0.99998,0.5016371875,0.525415822,0.9999847412
|
6,0.12611875,0.9997775,0.99997875,0.126483125,0.1863040407,0.9999847412
|
||||||
8,0.3675334375,0.999989375,0.9999775,0.3677109375,0.3892153151,0.9999847412
|
8,0.0821671875,0.9997490625,0.999981875,0.0824515625,0.1235895109,0.9999847412
|
||||||
10,0.2576425,0.99999375,0.999970625,0.2569871875,0.2747696909,0.9999847412
|
10,0.0531603125,0.9997025,0.99998125,0.0529865625,0.08056383667,0.9999847412
|
||||||
12,0.1741078125,0.99999,0.9999703125,0.17413125,0.1870712987,0.9999847412
|
12,0.034030625,0.9996815625,0.99997625,0.0339634375,0.05191025407,0.9999847412
|
||||||
14,0.115345,0.9999853125,0.999966875,0.1151475,0.1241256148,0.9999847412
|
14,0.021604375,0.9996678125,0.999969375,0.021566875,0.03319532309,0.9999847412
|
||||||
16,0.0748184375,0.9999846875,0.9999675,0.0747059375,0.08092517452,0.9999847412
|
16,0.013683125,0.9996721875,0.99996,0.0138321875,0.02112425659,0.9999847412
|
||||||
18,0.0480371875,0.9999884375,0.9999575,0.0481878125,0.05214810026,0.9999847412
|
18,0.0087159375,0.999639375,0.999954375,0.0087384375,0.01340080653,0.9999847412
|
||||||
20,0.030745,0.99998875,0.9999559375,0.0308409375,0.03334949917,0.9999847412
|
20,0.00549625,0.9996415625,0.99996,0.0054996875,0.00848434326,0.9999847412
|
||||||
|
|||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user