General information

The data set contains data from 10 participants [p_1,..p_n, p_10] performing six activities within a driving simulator. Each activity was recorded separately in a continuous manner (small variations in recording length are possible).

The data stored in the zip file has the following structure:

<user>/<activity>/pulsedoppler_float.csv

Extracting range-Doppler data

  1. The following section provides information on the reading of pulsedoppler_float.csv and transforming it to a .npy file. Thereby only information about bins [1, 24], frequency values [1, 1024], and frames (recording length) is extracted.
with open 'pulsedoppler_float'.csv as f:
    pulse_doppler = csv.reader(f)

    for row in pulse_doppler:
        idx, frame_counter, matrix_counter, range_idx, range_bins, frequency_count, pulsedoppler_instance,\
        fps, fps_decimated, frequency_start, frequency_step, rrange, data = row

        if idx == "":
            pass
        else:
            data = np.array(data[1:-1].split(",")).astype(float)
            if matrix_counter in frames:
                range_idx = int(range_idx)
                
                if float(frequency_start) < 0:
                    frames[matrix_counter][0:512, range_idx] = data
                else:
                    frames[matrix_counter][512:1024, range_idx] = data
            else:
                frames[matrix_counter] = np.zeros((1024, 24))

frames = np.array(list(frames.values()))

2. Generated .npy files can be used to generate sliding windows. The proposed study used a 2/3 frames overlap for building a ResNet-18-based ring buffer. A sliding window of one second (doppler_frame) contains roughly 3 frames and has a shape (3, 1024, 24).

pulse_doppler = np.load('doppler_float'.npy)

win_len = 3
i = 0

# store only full 1 second/3 frames files 
for i in range(len(pulse_doppler)-2):
    doppler_frame = pulse_doppler[i:i+win_len]     
    
    np.save(os.path.join(file_storage, f'<user>_<activity>_doppler_float_{i}'.npy), doppler_frame)
    i+=1

Dataset statistics

Using the aforementioned steps, the following class distribution was observed:

{'Autopilot': 1844, 'Driving': 1747, 'Driving & smartphone utilization': 1692, 'Sleeping': 1708, 'Smartphone utilization': 1715, 'Talking to passenger': 1700}. Total size: 10406.