コード例 #1
0
 def doppler_resolution(self):
     _, bw = dsp.range_resolution(
         self.cfg['profiles'][0]['adcSamples'],
         self.cfg['profiles'][0]['adcSampleRate'] / 1000,
         self.cfg['profiles'][0]['freqSlopeConst'] / 1e12)
     return dsp.doppler_resolution(
         bw,
         start_freq_const=self.cfg['profiles'][0]['start_frequency'] / 1e9,
         ramp_end_time=self.cfg['profiles'][0]['rampEndTime'] * 1e6,
         idle_time_const=self.cfg['profiles'][0]['idle'] * 1e6,
         num_loops_per_frame=self.cfg['numChirps'] /
         len(self.cfg['chirps']),
         num_tx_antennas=self.cfg['numTx'])
コード例 #2
0
    # numDopplerBins = numLoopsPerFrame
    numDopplerBins = numLoopsPerFrame

    numAngleBins = 64

    # data processing parameter
    numDisplaySamples = 20

    range_resolution, bandwidth = dsp.range_resolution(
        numADCSamples,
        dig_out_sample_rate=configParameters['digOutSampleRate'],
        freq_slope_const=configParameters['freqSlopeConst'])
    doppler_resolution = dsp.doppler_resolution(
        bandwidth,
        start_freq_const=configParameters['startFreq'],
        ramp_end_time=configParameters['rampEndTime'],
        idle_time_const=configParameters['idleTime'],
        num_loops_per_frame=configParameters['numLoops'],
        num_tx_antennas=numTxAntennas)
    print(
        f'Range Resolution: {range_resolution}, Bandwidth: {bandwidth}, Doppler Resolution: {doppler_resolution}'
    )

    ims = []
    max_size = 0

    # (1) Reading in adc data
    if loadData:
        adc_data = np.fromfile(adc_data_path, dtype=np.int16)
        adc_data = adc_data.reshape(numFrames, -1)
        adc_data = np.apply_along_axis(DCA1000.organize,
コード例 #3
0
ファイル: main.py プロジェクト: Zber5/OpenRadar
# QOL settings
loadData = True

numFrames = 300
numADCSamples = 128
numTxAntennas = 3
numRxAntennas = 4
numLoopsPerFrame = 128
numChirpsPerFrame = numTxAntennas * numLoopsPerFrame

numRangeBins = numADCSamples
numDopplerBins = numLoopsPerFrame
numAngleBins = 64

range_resolution, bandwidth = dsp.range_resolution(numADCSamples)
doppler_resolution = dsp.doppler_resolution(bandwidth)

plotRangeDopp = False
plot2DscatterXY = False
plot2DscatterXZ = False
plot3Dscatter = True
plotCustomPlt = False

plotMakeMovie = False
makeMovieTitle = "3dscatter"
makeMovieDirectory = r"c://Users//Zber//Desktop//mymovie.mp4"

visTrigger = plot2DscatterXY + plot2DscatterXZ + plot3Dscatter + plotRangeDopp + plotCustomPlt
assert visTrigger < 2, "Can only choose to plot one type of plot at once"

singFrameView = False
コード例 #4
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
コード例 #5
0
from etc.config_1 import NUM_CHIRPS, NUM_ADC_SAMPLES, sample_rate, freq_slope, adc_samples, \
    start_freq, idle_time, ramp_end_time

# Data specific parameters

# DSP processing parameters

# Data sampling configuration

# Range and Velocity resolution
range_res, band_width = range_resolution(NUM_ADC_SAMPLES, sample_rate,
                                         freq_slope)
# range_res = RANGE_RESOLUTION
print(f'Range Resolution: {range_res} [meters]')
velocity_res = doppler_resolution(band_width, start_freq, ramp_end_time,
                                  idle_time, NUM_CHIRPS, 1)
print(f'Velocity Resolution: {velocity_res} [meters/second]')

# Apply the range resolution factor to the range indices
ranges = np.arange(adc_samples) * range_res


def load_file(file_path, radar_config=None, discard_rx=True):
    adc_data = np.fromfile(file_path, dtype=np.uint16)
    adc_data = adc_data.reshape(NUM_FRAMES, -1)
    all_data = np.apply_along_axis(DCA1000.organize,
                                   1,
                                   adc_data,
                                   num_chirps=NUM_CHIRPS,
                                   num_rx=NUM_RX,
                                   num_samples=NUM_ADC_SAMPLES)