-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path2.1_add_datapoints.py
More file actions
85 lines (72 loc) · 2.69 KB
/
Copy path2.1_add_datapoints.py
File metadata and controls
85 lines (72 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/python3
import numpy as np
import json
import mylib as t
from myconf import * # dn_results_folder, fn_simulation_templates, fn_test_message,
#'''
datapoints = [i for i in
json.loads(open(fn_datapoints, 'r').read())
if 'simulation string' in i]
#'''
profile_names = {}
for i in open(fn_simulation_templates).readlines()[1:]:
parameters = t.parse_simulation_parameters(i)
profile_names[parameters['profile']] = parameters['title'].strip('"')
modes_to_test = t.get_test_modes(fn_modes_to_test)
#modes_to_test = ['QPSK250','MT63-2KL','THOR11']
simulation_profiles = {}
for p in profile_names:
for m in modes_to_test:
simulation_profiles[(m, p)] = np.zeros((0,2))
#'''
for d in datapoints:
parameters = t.parse_simulation_parameters(d['simulation string'])
p = (d['mode'], parameters['profile'])
e = [[parameters['awgn s/n'], d['error rate']]]
simulation_profiles[p] = np.array(list(simulation_profiles[p]) + e)
#'''
trimmed_test_data = t.trim(open(fn_test_message, 'rb').read())
fldigi = t.start_fldigi(dn_fldigi_configuration_folder,
dn_fldigi_home_folder,
fn_macro_file,
fn_audio,
fn_message)
new_datapoints = []
target_error_rate=1/100 #1% error rate
for p in simulation_profiles:
#if p[0] not in ['BPSK31']:
#if 'thor' not in p[0].lower():
# #print(p)
# continue
l = simulation_profiles[p] # list of [s/n, error rate]
aux = np.array(l).transpose()
new_snrs = t.suggest_samples(aux[0], aux[1], target_error_rate, 1)
base_suffix = profile_names[p[1]].replace(' ', '_')
new_snrs.sort()
for s in new_snrs:
# s=s-10 #DEBUG
suffix = base_suffix+'_SN{0}{1:04.1f}'.format(
'p' if s >= 0 else 'n',
abs(s))
simstring = t.unparse_simulation_parameters({
'title': suffix,
'awgn enable': 1,
'awgn s/n': s,
'profile': p[1]})
print(p[0], simstring)
dp = {'awgn s/n': s,
'error rate': None,
'message length': len(trimmed_test_data),
'mode': p[0],
'simulation string': simstring,
'suffix': suffix}
dp2 = t.evaluate_datapoint(fldigi,
fn_test_message,
fn_simulation_file,
fn_message,
fn_audio,
dp)
print(dp2['error rate'])
new_datapoints.append(dp2)
new_datapoints.extend(datapoints)
open(fn_datapoints+'_new', 'w').write(json.dumps(new_datapoints, indent=1))