-
Notifications
You must be signed in to change notification settings - Fork 2
/
field_test_result_generator_from_raw.py
executable file
·105 lines (91 loc) · 4.35 KB
/
field_test_result_generator_from_raw.py
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/env python
import argparse
import logging
from colorlog import ColoredFormatter
import time
import os
import csv
import geo
import datetime
import pytz
import dateutil.parser
import numpy as np
from directionFinder_backend.antenna_array import AntennaArray
from directionFinder_backend.direction_finder import DirectionFinder
from directionFinder_backend.correlator import Correlator
from directionFinder_backend.correlation import Correlation
import itertools
class FakeCorrelation(Correlation):
def __init__(self, fpga, comb, f_start, f_stop, logger, signal):
self.logger = logger
self.f_start = f_start
snap_name = "snap_{a}x{b}".format(a=comb[0], b=comb[1])
self.f_start = np.uint64(f_start)
self.f_stop = np.uint64(f_stop)
self.calibration_phase_offsets = None
self.calibration_cable_length_offsets = None
self.signal = signal
self.frequency_bins = np.linspace(
start = self.f_start,
stop = self.f_stop,
num = len(self.signal),
endpoint = False)
class FakeCorrelator(Correlator):
def __init__(self, ip_addr='192.168.14.30', num_channels=4, fs=800e6, logger=logging.getLogger(__name__), signals = None):
self.logger = logger
self.num_channels = num_channels
self.fs = np.float64(fs)
self.cross_combinations = list(itertools.combinations(range(num_channels), 2))
self.auto_combinations = [(0, 0)]
self.frequency_correlations = {}
for comb in (self.cross_combinations):
self.frequency_correlations[comb] = FakeCorrelation(fpga = None,
comb = comb,
f_start = 0,
f_stop = fs/2,
logger = self.logger.getChild("{a}x{b}".format(a = comb[0], b = comb[1])),
signal = signals[comb])
self.time_domain_calibration_values = None
self.time_domain_calibration_cable_values = None
if __name__ == '__main__':
# setup root logger. Shouldn't be used much but will catch unexpected messages
colored_formatter = ColoredFormatter("%(log_color)s%(asctime)s:%(levelname)s:%(name)s:%(message)s")
handler = logging.StreamHandler()
handler.setFormatter(colored_formatter)
handler.setLevel(logging.DEBUG)
root = logging.getLogger()
root.addHandler(handler)
root.setLevel(logging.INFO)
logger = logging.getLogger('main')
logger.propagate = False
logger.addHandler(handler)
logger.setLevel(logging.INFO)
parser = argparse.ArgumentParser(description = "Run RMS error simulations")
parser.add_argument('--d', type=str)
parser.add_argument('--f_start', default=220e6, type=float)
parser.add_argument('--f_stop', default=261e6, type=float)
parser.add_argument('--array_geometry_file', default=None)
args = parser.parse_args()
directory = args.d
contents = os.listdir(directory)
contents.sort()
for timestamp_str in contents:
try:
timestamp = float(timestamp_str)
except ValueError:
continue
correlations = {}
num_channels = 4
cross_combinations = list(itertools.combinations(range(num_channels), 2))
for comb in cross_combinations:
filename = "{a}x{b}.npy".format(a = comb[0], b = comb[1])
with open("{d}/{t}/{f}".format(d = directory, t = timestamp, f = filename)) as f:
signal = np.load(f)
correlations[comb] = signal
correlator = FakeCorrelator(signals = correlations)
correlator.add_cable_length_calibrations('/home/jgowans/workspace/directionFinder_backend/config/cable_length_calibration_actual_array.json')
correlator.add_frequency_bin_calibrations('/home/jgowans/workspace/directionFinder_backend/config/frequency_domain_calibration_through_chain.json')
correlator.apply_frequency_domain_calibrations()
array = AntennaArray.mk_from_config(args.array_geometry_file)
df = DirectionFinder(correlator, array, args.f_start, logger.getChild('df'))
df.df_strongest_signal(args.f_start, args.f_stop, directory, t = timestamp)