Fix simulate_error_rate.py
This commit is contained in:
parent
ad274699a3
commit
f12339f89f
@ -29,17 +29,14 @@ class SimulationArgs:
|
||||
|
||||
|
||||
def decode(tracker, y, H, args: SimulationArgs) -> np.ndarray:
|
||||
x_hat = np.mod(np.round(y), 2).astype('int32')
|
||||
x_hat = np.where(y >= 0, 0, 1)
|
||||
|
||||
s = np.concatenate([y, np.array([0])])
|
||||
for i in range(args.homotopy_iter):
|
||||
x_hat = np.mod(np.round(s[:-1]), 2).astype('int32')
|
||||
x_hat = np.where(s[:-1] >= 0, 0, 1)
|
||||
if not np.any(np.mod(H @ x_hat, 2)):
|
||||
return x_hat
|
||||
|
||||
# if s[-1] > 1.5:
|
||||
# return x_hat
|
||||
|
||||
try:
|
||||
s = tracker.step(s)
|
||||
except:
|
||||
@ -67,22 +64,28 @@ def simulate_error_rates_for_SNR(H, Eb_N0, args: SimulationArgs) -> typing.Tuple
|
||||
for _ in tqdm(range(args.max_frames)):
|
||||
Eb_N0_lin = 10**(Eb_N0 / 10)
|
||||
N0 = 1 / (2 * k / n * Eb_N0_lin)
|
||||
y = np.zeros(n) + np.sqrt(N0) * np.random.normal(size=n)
|
||||
|
||||
u = np.random.randint(2, size=k)
|
||||
# u = np.zeros(shape=k).astype(np.int32)
|
||||
c = np.array(GF(u) @ G)
|
||||
x = 1 - 2*c
|
||||
|
||||
y = x + np.sqrt(N0) * np.random.normal(size=n)
|
||||
|
||||
homotopy.update_received(y)
|
||||
|
||||
x_hat = decode(tracker, y, H, args)
|
||||
c_hat = decode(tracker, y, H, args)
|
||||
|
||||
if np.any(np.mod(H @ x_hat, 2)):
|
||||
if np.any(np.mod(H @ c_hat, 2)):
|
||||
tracker.set_sigma(-1 * args.sigma)
|
||||
x_hat = decode(tracker, y, H, args)
|
||||
c_hat = decode(tracker, y, H, args)
|
||||
tracker.set_sigma(args.sigma)
|
||||
|
||||
if np.any(np.mod(H @ x_hat, 2)):
|
||||
if np.any(np.mod(H @ c_hat, 2)):
|
||||
decoding_failures += 1
|
||||
|
||||
bit_errors += np.sum(x_hat != np.zeros(n))
|
||||
frame_errors += np.any(x_hat != np.zeros(n))
|
||||
bit_errors += np.sum(c_hat != c)
|
||||
frame_errors += np.any(c_hat != c)
|
||||
num_frames += 1
|
||||
|
||||
if frame_errors >= args.target_frame_errors:
|
||||
@ -95,7 +98,7 @@ def simulate_error_rates_for_SNR(H, Eb_N0, args: SimulationArgs) -> typing.Tuple
|
||||
return FER, BER, DFR, frame_errors
|
||||
|
||||
|
||||
def simulate_error_rates(H, Eb_N0_list, args: SimulationArgs) -> typing.Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
|
||||
def simulate_error_rates(H, Eb_N0_list, args: SimulationArgs) -> pd.DataFrame:
|
||||
FERs = []
|
||||
BERs = []
|
||||
DFRs = []
|
||||
@ -106,8 +109,11 @@ def simulate_error_rates(H, Eb_N0_list, args: SimulationArgs) -> typing.Tuple[np
|
||||
BERs.append(BER)
|
||||
DFRs.append(DFR)
|
||||
frame_errors_list.append(num_frames)
|
||||
print(pd.DataFrame({"SNR": Eb_N0_list[:len(FERs)], "FER": FERs, "BER": BERs,
|
||||
"DFR": DFRs, "frame_errors": frame_errors_list}))
|
||||
|
||||
return np.array(FERs), np.array(BERs), np.array(DFRs), np.array(frame_errors_list)
|
||||
return pd.DataFrame({"SNR": Eb_N0_list, "FER": FERs, "BER": BERs,
|
||||
"DFR": DFRs, "frame_errors": frame_errors_list})
|
||||
|
||||
|
||||
def main():
|
||||
@ -157,11 +163,8 @@ def main():
|
||||
target_frame_errors=args.target_frame_errors)
|
||||
|
||||
SNRs = np.arange(args.snr[0], args.snr[1], args.snr[2])
|
||||
FERs, BERs, DFRs, frame_errors_list = simulate_error_rates(
|
||||
H, SNRs, simulation_args)
|
||||
df = simulate_error_rates(H, SNRs, simulation_args)
|
||||
|
||||
df = pd.DataFrame({"SNR": SNRs, "FER": FERs, "BER": BERs,
|
||||
"DFR": DFRs, "frame_errors": frame_errors_list})
|
||||
print(df)
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user