-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsimulate_variable_baseline.py
More file actions
executable file
·50 lines (43 loc) · 2 KB
/
simulate_variable_baseline.py
File metadata and controls
executable file
·50 lines (43 loc) · 2 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
#!/usr/bin/env python
from directionFinder_backend import antenna_array
from correlator import Correlator
from plotter import Plotter
import numpy as np
import argparse
parser = argparse.ArgumentParser(description = "Run phase ambiguity simulations")
parser.add_argument('--f_min', default=30e6, type=float)
parser.add_argument('--f_max', default=400e6, type=float)
parser.add_argument('--f_points', default=300, type=int)
parser.add_argument('--phi_min', default=-np.pi, type=float)
parser.add_argument('--phi_max', default=np.pi, type=float)
parser.add_argument('--phi_points', default=300, type=int)
parser.add_argument('--ref-angle', default=0, type=int)
parser.add_argument('--elements', default=4, type=int)
parser.add_argument('--array_geometry_file', default=None)
parser.add_argument('--surface_plot', action='store_true')
parser.add_argument('--with_ref_element', type=bool, default=False)
parser.add_argument('--radius', type=float, default=0.5)
args = parser.parse_args()
print(args)
# wavelengths seperation between elements and reference
f_domain = np.linspace(args.f_min, args.f_max, args.f_points)
Z = np.zeros((len(f_domain), args.phi_points))
if args.array_geometry_file:
arr = antenna_array.AntennaArray.mk_from_config(args.array_geometry_file)
else:
if args.with_ref_element == True:
arr = antenna_array.AntennaArray.mk_circular_with_ref(args.radius, args.elements)
else:
arr = antenna_array.AntennaArray.mk_circular(args.radius, args.elements)
for antenna in arr.antennas:
print("{x}, {y}".format(x =antenna.x, y = antenna.y))
for f_idx, f_val in enumerate(f_domain):
ref = arr.each_pair_phase_difference_at_angle(args.ref_angle, f_val)
corr = Correlator(ref, arr)
response = corr.many_directions(args.phi_min, args.phi_max, args.phi_points, f_val)
y = response.keys()
y.sort()
for i_idx, i_val in enumerate(y):
Z[f_idx,i_idx] = response[i_val] / np.sqrt(len(arr.antennas))
Plotter(f_domain/1e6, y, Z).colourmap()
#plotter.Plotter(x_domain, y, Z).surface()