Skip to content
Snippets Groups Projects
Commit d586e45c authored by Merlo, Jason's avatar Merlo, Jason
Browse files

Fixed dataset closing/saving, updated aps tracker and plotting

parent 61c7bdd9
No related branches found
No related tags found
No related merge requests found
...@@ -201,6 +201,7 @@ class DataManager(MuxBuffer): ...@@ -201,6 +201,7 @@ class DataManager(MuxBuffer):
name, data=self.source.ts_buffer, name, data=self.source.ts_buffer,
compression=COMPRESSION, compression=COMPRESSION,
compression_opts=COMPRESSION_OPTS) compression_opts=COMPRESSION_OPTS)
print('(DataManager) Saved dataset successfully.')
except Exception as e: except Exception as e:
print("(DataManager) Error saving dataset: ", e) print("(DataManager) Error saving dataset: ", e)
...@@ -494,6 +495,7 @@ class DataManager(MuxBuffer): ...@@ -494,6 +495,7 @@ class DataManager(MuxBuffer):
"""Close the selected object in the DAQ manager.""" """Close the selected object in the DAQ manager."""
for source in self.source_list: for source in self.source_list:
source.close() source.close()
self.db.close()
# === PROPERTIES ==================================================== # === PROPERTIES ====================================================
......
...@@ -140,6 +140,8 @@ class mcdaq_win(DAQ): ...@@ -140,6 +140,8 @@ class mcdaq_win(DAQ):
if (event_type == EventType.ON_DATA_AVAILABLE if (event_type == EventType.ON_DATA_AVAILABLE
or event_type == EventType.ON_END_OF_INPUT_SCAN): or event_type == EventType.ON_END_OF_INPUT_SCAN):
# print('(mcdaq_win) updated')
# current_time = datetime.now() # current_time = datetime.now()
# print('\n') # print('\n')
# print('delta-time =', current_time - self._last_time) # print('delta-time =', current_time - self._last_time)
......
...@@ -12,6 +12,8 @@ from pyratk.datatypes.geometry import Point ...@@ -12,6 +12,8 @@ from pyratk.datatypes.geometry import Point
TransmitterTuple = namedtuple('Transmitter', ['location', 'pulses']) TransmitterTuple = namedtuple('Transmitter', ['location', 'pulses'])
ReceiverTuple = namedtuple('Receiver', ['daq_index', 'location']) ReceiverTuple = namedtuple('Receiver', ['daq_index', 'location'])
Pulse = namedtuple('Pulse', ['fc', 'bw', 'delay'])
# Detection = namedtuple('Detection', ['location', 'power', 'velocity', 'doppler']) # Detection = namedtuple('Detection', ['location', 'power', 'velocity', 'doppler'])
@dataclass @dataclass
......
...@@ -83,7 +83,7 @@ class Receiver(object): ...@@ -83,7 +83,7 @@ class Receiver(object):
self.fast_center_bin = np.ceil(self.fast_fft_size / 2) self.fast_center_bin = np.ceil(self.fast_fft_size / 2)
self.fast_bin_size = self.daq.sample_rate / self.fast_fft_size self.fast_bin_size = self.daq.sample_rate / self.fast_fft_size
self.slow_center_bin = np.ceil(self.slow_fft_size / 2) self.slow_center_bin = np.ceil(self.slow_fft_size / 2)
self.slow_bin_size = self.daq.sample_rate * self.transmitter.pulses[0].delay / self.slow_fft_size self.slow_bin_size = (1 / self.transmitter.pulses[0].delay) / self.slow_fft_size
self.fast_fft_data = np.ones(self.fast_fft_size) self.fast_fft_data = np.ones(self.fast_fft_size)
self.fft_mat = np.ones((self.fast_fft_size, self.slow_fft_size)) self.fft_mat = np.ones((self.fast_fft_size, self.slow_fft_size))
......
...@@ -21,15 +21,14 @@ class ApsTracker(object): ...@@ -21,15 +21,14 @@ class ApsTracker(object):
""" """
Initialize tracker class. Initialize tracker class.
""" """
self.valid_constraints = {1: ['x', 'y', 'z'],
2: ['xy', 'xz', 'yz'],
3: []}
# copy arguments into attributes # copy arguments into attributes
self.daq = daq self.daq = daq
self.receiver_array = receiver_array self.receiver_array = receiver_array
self.detections = [] self.detections = []
self.pulse = self.receiver_array[0].transmitter.pulses[0]
self.chirp_rate = self.pulse.bw / self.pulse.delay
# Configure control signals # Configure control signals
self.connect_control_signals() self.connect_control_signals()
...@@ -57,11 +56,11 @@ class ApsTracker(object): ...@@ -57,11 +56,11 @@ class ApsTracker(object):
#var0=signal.resample_poly(var00,4,1) #var0=signal.resample_poly(var00,4,1)
#var1=signal.resample_poly(var01,4,1) #var1=signal.resample_poly(var01,4,1)
f=np.linspace(-50000,50000,num=var0.size-1) f=np.linspace(-50000,50000,num=var0.size-1)
r_d0=np.abs(f[np.argmax(var0)]*3e8/100e9*2/3/2) r_d0=np.abs(f[np.argmax(var0)]*3e8/self.chirp_rate/2)
r_d1=np.abs(f[np.argmax(var1)]*3e8/100e9*2/3/2) r_d1=np.abs(f[np.argmax(var1)]*3e8/self.chirp_rate/2)
theta=np.arcsin((r_d0-r_d1)/0.3864)+0.5*np.pi theta=np.arcsin((r_d0-r_d1)/0.3864)+0.5*np.pi
R=0.5*(r_d0+r_d1) R=0.5*(r_d0+r_d1)
# loc is cylindrical (R, theta, Z), but Z is ignored by plot # loc is cylindrical (R, theta, Z), but Z is ignored by plot
#R = np.random.rand() * 15 #R = np.random.rand() * 15
#theta = np.random.rand() * np.pi #theta = np.random.rand() * np.pi
......
...@@ -15,21 +15,26 @@ from matplotlib import cm # Used for colormaps ...@@ -15,21 +15,26 @@ from matplotlib import cm # Used for colormaps
class RangeDopplerWidget(pg.PlotWidget): class RangeDopplerWidget(pg.PlotWidget):
def __init__(self, receiver, xrange=[-50,50], yrange=[-15e3,0]): def __init__(self, receiver, xrange=[-50,50], yrange=[-15e3,0], showMeters=False):
super().__init__() super().__init__()
# Copy arguments to member variables # Copy arguments to member variables
self.daq = receiver.daq self.daq = receiver.daq
self.source = self.daq.source self.source = self.daq.source
self.receiver = receiver self.receiver = receiver
self.pulse = self.receiver.transmitter.pulses[0]
self.showMeters = showMeters
self.update_period = \ self.update_period = \
self.source.sample_chunk_size / self.source.sample_rate self.source.sample_chunk_size / self.source.sample_rate
self.freq_to_vel = (3e8 / self.pulse.fc) / 2
self.freq_to_range = (self.pulse.delay / self.pulse.bw) * 3e8
self.xrange = xrange self.xrange = xrange
self.yrange = yrange self.yrange = yrange
# TODO temp # TODO temp
self.downsample = 1 self.downsample = 1 # MUST EQUAL 1
# FPS ticker data # FPS ticker data
self.lastTime = time.time() self.lastTime = time.time()
...@@ -55,8 +60,12 @@ class RangeDopplerWidget(pg.PlotWidget): ...@@ -55,8 +60,12 @@ class RangeDopplerWidget(pg.PlotWidget):
self.rescale() self.rescale()
self.setLabel('left', 'Frequency', units='Hz') if showMeters:
self.setLabel('bottom', 'Frequency', units='Hz') self.setLabel('left', 'Range', units='m')
self.setLabel('bottom', 'Velocity', units='m/s')
else:
self.setLabel('left', 'Frequency', units='Hz')
self.setLabel('bottom', 'Frequency', units='Hz')
self.showGrid(x=True, y=True) self.showGrid(x=True, y=True)
left_axis=self.getAxis('left') left_axis=self.getAxis('left')
...@@ -116,8 +125,12 @@ class RangeDopplerWidget(pg.PlotWidget): ...@@ -116,8 +125,12 @@ class RangeDopplerWidget(pg.PlotWidget):
self.update_period = \ self.update_period = \
self.source.sample_chunk_size / self.source.sample_rate self.source.sample_chunk_size / self.source.sample_rate
self.img.scale(self.receiver.slow_bin_size * self.downsample, if self.showMeters:
self.receiver.fast_bin_size * self.downsample) self.img.scale(self.receiver.slow_bin_size * self.freq_to_vel,
self.receiver.fast_bin_size * self.freq_to_range)
else:
self.img.scale(self.receiver.slow_bin_size,
self.receiver.fast_bin_size)
self.setRange(disableAutoRange=True, yRange=np.array(self.yrange)) self.setRange(disableAutoRange=True, yRange=np.array(self.yrange))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment