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):
name, data=self.source.ts_buffer,
compression=COMPRESSION,
compression_opts=COMPRESSION_OPTS)
print('(DataManager) Saved dataset successfully.')
except Exception as e:
print("(DataManager) Error saving dataset: ", e)
......@@ -494,6 +495,7 @@ class DataManager(MuxBuffer):
"""Close the selected object in the DAQ manager."""
for source in self.source_list:
source.close()
self.db.close()
# === PROPERTIES ====================================================
......
......@@ -140,6 +140,8 @@ class mcdaq_win(DAQ):
if (event_type == EventType.ON_DATA_AVAILABLE
or event_type == EventType.ON_END_OF_INPUT_SCAN):
# print('(mcdaq_win) updated')
# current_time = datetime.now()
# print('\n')
# print('delta-time =', current_time - self._last_time)
......
......@@ -12,6 +12,8 @@ from pyratk.datatypes.geometry import Point
TransmitterTuple = namedtuple('Transmitter', ['location', 'pulses'])
ReceiverTuple = namedtuple('Receiver', ['daq_index', 'location'])
Pulse = namedtuple('Pulse', ['fc', 'bw', 'delay'])
# Detection = namedtuple('Detection', ['location', 'power', 'velocity', 'doppler'])
@dataclass
......
......@@ -83,7 +83,7 @@ class Receiver(object):
self.fast_center_bin = np.ceil(self.fast_fft_size / 2)
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_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.fft_mat = np.ones((self.fast_fft_size, self.slow_fft_size))
......
......@@ -21,15 +21,14 @@ class ApsTracker(object):
"""
Initialize tracker class.
"""
self.valid_constraints = {1: ['x', 'y', 'z'],
2: ['xy', 'xz', 'yz'],
3: []}
# copy arguments into attributes
self.daq = daq
self.receiver_array = receiver_array
self.detections = []
self.pulse = self.receiver_array[0].transmitter.pulses[0]
self.chirp_rate = self.pulse.bw / self.pulse.delay
# Configure control signals
self.connect_control_signals()
......@@ -57,11 +56,11 @@ class ApsTracker(object):
#var0=signal.resample_poly(var00,4,1)
#var1=signal.resample_poly(var01,4,1)
f=np.linspace(-50000,50000,num=var0.size-1)
r_d0=np.abs(f[np.argmax(var0)]*3e8/100e9*2/3/2)
r_d1=np.abs(f[np.argmax(var1)]*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/self.chirp_rate/2)
theta=np.arcsin((r_d0-r_d1)/0.3864)+0.5*np.pi
R=0.5*(r_d0+r_d1)
# loc is cylindrical (R, theta, Z), but Z is ignored by plot
#R = np.random.rand() * 15
#theta = np.random.rand() * np.pi
......
......@@ -15,21 +15,26 @@ from matplotlib import cm # Used for colormaps
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__()
# Copy arguments to member variables
self.daq = receiver.daq
self.source = self.daq.source
self.receiver = receiver
self.pulse = self.receiver.transmitter.pulses[0]
self.showMeters = showMeters
self.update_period = \
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.yrange = yrange
# TODO temp
self.downsample = 1
self.downsample = 1 # MUST EQUAL 1
# FPS ticker data
self.lastTime = time.time()
......@@ -55,8 +60,12 @@ class RangeDopplerWidget(pg.PlotWidget):
self.rescale()
self.setLabel('left', 'Frequency', units='Hz')
self.setLabel('bottom', 'Frequency', units='Hz')
if showMeters:
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)
left_axis=self.getAxis('left')
......@@ -116,8 +125,12 @@ class RangeDopplerWidget(pg.PlotWidget):
self.update_period = \
self.source.sample_chunk_size / self.source.sample_rate
self.img.scale(self.receiver.slow_bin_size * self.downsample,
self.receiver.fast_bin_size * self.downsample)
if self.showMeters:
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))
......
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