Added simulate_gradient.py
This commit is contained in:
parent
765ba88773
commit
4736061ada
85
sw/simulate_gradient.py
Normal file
85
sw/simulate_gradient.py
Normal file
@ -0,0 +1,85 @@
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import seaborn as sns
|
||||
import matplotlib.pyplot as plt
|
||||
import signal
|
||||
from timeit import default_timer
|
||||
from tqdm import tqdm
|
||||
|
||||
from utility import codes, noise, misc
|
||||
from utility.simulation.simulators import GenericMultithreadedSimulator
|
||||
|
||||
# from cpp_modules.cpp_decoders import ProximalDecoder
|
||||
from cpp_modules.cpp_decoders import ProximalDecoder_204_102 as ProximalDecoder
|
||||
|
||||
|
||||
def simulate(H_file, SNR, omega, K, gamma):
|
||||
H = codes.read_alist_file(f"res/{H_file}")
|
||||
n_min_k, n = H.shape
|
||||
k = n - n_min_k
|
||||
|
||||
decoder = ProximalDecoder(H.astype('int32'), K=K, omega=omega, gamma=gamma)
|
||||
|
||||
c = np.zeros(n)
|
||||
x_bpsk = (c + 1)
|
||||
|
||||
avg_grad_values = np.zeros(shape=(K, 2))
|
||||
|
||||
for i in range(1000):
|
||||
x = noise.add_awgn(x_bpsk, SNR, n, k)
|
||||
grad_values = decoder.get_gradient_values(x)
|
||||
|
||||
for j, (val_h, val_l) in enumerate(grad_values):
|
||||
avg_grad_values[j, 0] += val_h
|
||||
avg_grad_values[j, 1] += val_l
|
||||
|
||||
avg_grad_values = avg_grad_values / 1000
|
||||
|
||||
return avg_grad_values
|
||||
|
||||
|
||||
def reformat_data(results):
|
||||
return pd.DataFrame({"k": np.arange(0, results.size // 2, 1), "grad_h": results[:, 0], "grad_l": results[:, 1]})
|
||||
|
||||
|
||||
def main():
|
||||
# Set up simulation params
|
||||
|
||||
sim_name = "avg_grad_1dB"
|
||||
|
||||
# H_file = "96.3.965.alist"
|
||||
H_file = "204.33.486.alist"
|
||||
# H_file = "204.33.484.alist"
|
||||
# H_file = "204.55.187.alist"
|
||||
# H_file = "408.33.844.alist"
|
||||
# H_file = "BCH_7_4.alist"
|
||||
# H_file = "BCH_31_11.alist"
|
||||
# H_file = "BCH_31_26.alist"
|
||||
|
||||
SNR = 1
|
||||
omega = 0.05
|
||||
K = 100
|
||||
gamma = 0.05
|
||||
|
||||
# Run simulation
|
||||
|
||||
start_time = default_timer()
|
||||
results = simulate(H_file, SNR, omega, K, gamma)
|
||||
end_time = default_timer()
|
||||
|
||||
print(f"duration: {end_time - start_time}")
|
||||
|
||||
df = reformat_data(results)
|
||||
|
||||
df.to_csv(
|
||||
f"sim_results/{sim_name}_{misc.slugify(H_file)}.csv", index=False)
|
||||
|
||||
sns.set_theme()
|
||||
sns.lineplot(data=df, x="k", y="grad_h")
|
||||
sns.lineplot(data=df, x="k", y="grad_l")
|
||||
|
||||
plt.show()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in New Issue
Block a user