def range_doppler(self): if self.__range_doppler is not None: return self.__range_doppler else: range_doppler = dsp.doppler_processing(self.raw_cube) self.__range_doppler = range_doppler return self.__range_doppler
def plot_range_velocity(range_data, is_plot=True): # rd_map = np.zeros((numFrames, numTxAntennas * numRxAntennas, numADCSamples, numDopplerBins)) for i, radar_cube in enumerate(range_data[10:15:5]): det_matrix, aoa_input = dsp.doppler_processing( radar_cube, num_tx_antennas=numTxAntennas, clutter_removal_enabled=True, window_type_2d=Window.HAMMING, interleaved=True, accumulate=False) det_matrix = det_matrix.transpose((1, 0, 2)) if is_plot: fig, axes = plt.subplots(3, 4, figsize=(120, 90)) det_matrix_vis = np.fft.fftshift(det_matrix, axes=2) # det_matrix_vis = det_matrix_vis[:, :32, :] mean = np.mean(det_matrix_vis, axis=0) std = np.std(det_matrix_vis, axis=0) for ax, virtual_index in zip(fig.axes, range(numTxAntennas * numRxAntennas)): plt_matrix = det_matrix_vis[virtual_index] # img = ax.imshow(plt_matrix / plt_matrix.max(), cmap='viridis', aspect='auto') img = ax.imshow((plt_matrix - mean) / std, cmap='bwr', aspect='auto') # cbar = fig.colorbar(img, ax=ax) # cbar.minorticks_on() fig.tight_layout() plt.show() if DebugMode else None plt.savefig("{}_range_velocity_{}.pdf".format( os.path.join(figpath, fig_prefix), i)) # det_matrix_vis = np.fft.fftshift(det_matrix, axes=1) # rd_map[i] = det_matrix return aoa_input
radar_cube = dsp.range_processing(frame, window_type_1d=Window.BLACKMAN) assert radar_cube.shape == ( numChirpsPerFrame, numRxAntennas, numADCSamples), "[ERROR] Radar cube is not the correct shape!" # (3) Doppler Processing # det_matrix, aoa_input = dsp.doppler_processing(radar_cube, num_tx_antennas=numTxAntennas, # clutter_removal_enabled=True, # window_type_2d=Window.HAMMING, # interleaved=True, accumulate=True) det_matrix, aoa_input = dsp.doppler_processing( radar_cube, num_tx_antennas=numTxAntennas, clutter_removal_enabled=True, window_type_2d=Window.HAMMING, interleaved=True, accumulate=True) # --- Show output if plotRangeDopp: det_matrix_vis = np.fft.fftshift(det_matrix, axes=1) # doppler_data[i] = det_matrix_vis if plotMakeMovie: ims.append((plt.imshow(det_matrix_vis / det_matrix_vis.max(), interpolation='nearest', aspect='auto'), )) else: plt.imshow(det_matrix_vis / det_matrix_vis.max(), interpolation='nearest',
for i, frame in enumerate(dataCube): # print(i,end=',') # Frame tracker # (2) Range Processing from mmwave.dsp.utils import Window cluster = None radar_cube = dsp.range_processing(frame, window_type_1d=Window.BLACKMAN) assert radar_cube.shape == ( numChirpsPerFrame, numRxAntennas, numADCSamples), "[ERROR] Radar cube is not the correct shape!" # (3) Doppler Processing det_matrix, aoa_input = dsp.doppler_processing( radar_cube, num_tx_antennas=3, clutter_removal_enabled=True, window_type_2d=Window.HAMMING) # --- Show output if plotRangeDopp: det_matrix_vis = np.fft.fftshift(det_matrix, axes=1) if plotMakeMovie: ims.append( (plt.imshow(det_matrix_vis / det_matrix_vis.max()), )) else: plt.imshow(det_matrix_vis / det_matrix_vis.max()) plt.title("Range-Doppler plot " + str(i)) plt.pause(0.05) plt.clf()
while True: cluster = None # (1) Reading in adc data adc_data = dca.read() frame = dca.organize(adc_data, num_chirps=numChirpsPerFrame, num_rx=numRxAntennas, num_samples=numADCSamples) # (2) Range Processing from mmwave.dsp.utils import Window radar_cube = dsp.range_processing(frame, window_type_1d=Window.BLACKMAN) assert radar_cube.shape == ( numChirpsPerFrame, numRxAntennas, numADCSamples), "[ERROR] Radar cube is not the correct shape!" # (3) Doppler Processing det_matrix, aoa_input = dsp.doppler_processing(radar_cube, num_tx_antennas=numTxAntennas, clutter_removal_enabled=True) # --- Show output if plotRangeDopp: det_matrix_vis = np.fft.fftshift(det_matrix, axes=1) plt.imshow(det_matrix_vis / det_matrix_vis.max(), interpolation='nearest', aspect='auto') plt.pause(0.05) plt.clf() # (4) Object Detection # --- CFAR, SNR is calculated as well. fft2d_sum = det_matrix.astype(np.int64) thresholdDoppler, noiseFloorDoppler = np.apply_along_axis(func1d=dsp.ca_, axis=0, arr=fft2d_sum.T, l_bound=1.5,
def generate_spectrum_from_RDC(filename, numFrames=500, numADCSamples=128, numTxAntennas=3, numRxAntennas=4, numLoopsPerFrame=128, numAngleBins=64, chirpPeriod=0.06, logGabor=False, accumulate=True, save_full=False): numChirpsPerFrame = numTxAntennas * numLoopsPerFrame # ============================================================================= # numADCSamples = number of range bins # numLoopsPerFrame = number of doppler bins # ============================================================================= range_resolution, bandwidth = dsp.range_resolution(numADCSamples) doppler_resolution = dsp.doppler_resolution(bandwidth) if filename[-4:] != '.bin': filename += '.bin' adc_data = np.fromfile(filename, dtype=np.int16) adc_data = adc_data.reshape(numFrames, -1) adc_data = np.apply_along_axis(DCA1000.organize, 1, adc_data, num_chirps=numChirpsPerFrame, num_rx=numRxAntennas, num_samples=numADCSamples) print("Data Loaded!") dataCube = adc_data micro_doppler_data = np.zeros((numFrames, numLoopsPerFrame, numADCSamples), dtype=np.float64) theta_data = np.zeros((numFrames, numLoopsPerFrame, numTxAntennas * numRxAntennas, numADCSamples), dtype=np.complex) for i, frame in enumerate(dataCube): # (2) Range Processing from mmwave.dsp.utils import Window radar_cube = dsp.range_processing(frame, window_type_1d=Window.BLACKMAN) assert radar_cube.shape == ( numChirpsPerFrame, numRxAntennas, numADCSamples), "[ERROR] Radar cube is not the correct shape!" # (3) Doppler Processing det_matrix, theta_data[i] = dsp.doppler_processing( radar_cube, num_tx_antennas=3, clutter_removal_enabled=True, window_type_2d=Window.HAMMING) # --- Shifts & Store det_matrix_vis = np.fft.fftshift(det_matrix, axes=1) micro_doppler_data[i, :, :] = det_matrix_vis # Data should now be ready. Needs to be in micro_doppler_data, a 3D-numpy array with shape [numDoppler, numRanges, numFrames] # LOG GABOR if logGabor: if accumulate: image = micro_doppler_data.sum(axis=1).T else: image = micro_doppler_data.T from LogGabor import LogGabor import holoviews as hv lg = LogGabor("default_param.py") lg.set_size(image) lg.pe.datapath = 'database/' image = lg.normalize(image, center=True) # display input image # hv.Image(image) # display log gabor'd image image = lg.whitening(image) * lg.mask hv.Image(image) uDoppler = image elif accumulate: uDoppler = micro_doppler_data.sum(axis=1).T else: uDoppler = micro_doppler_data.T if save_full: return range_resolution, doppler_resolution, uDoppler, theta_data else: return range_resolution, doppler_resolution, uDoppler