Exemple #1
0
 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
Exemple #2
0
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',
Exemple #4
0
    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()
Exemple #5
0
    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,
Exemple #6
0
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