Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 51 additions & 5 deletions mmwave/dataloader/adc.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,22 +259,68 @@ def _stop_stream(self):
return self._send_command(CMD.RECORD_STOP_CMD_CODE)

@staticmethod
def organize(raw_frame, num_chirps, num_rx, num_samples):
def organize(raw_frame, num_chirps, num_rx, num_samples, sensor_type='xWR14xx', real=False):
"""Reorganizes raw ADC data into a full frame

Args:
raw_frame (ndarray): Data to format
num_chirps: Number of chirps included in the frame
num_rx: Number of receivers used in the frame
num_samples: Number of ADC samples included in each chirp
sensor_type: Type of sensor used for measurement, default is xWR14xx

Returns:
ndarray: Reformatted frame of raw data of shape (num_chirps, num_rx, num_samples)

"""
ret = np.zeros(len(raw_frame) // 2, dtype=complex)
ret = None

sensor_type = self.generalizedSensorType(sensor_type)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i believe this is a wrong insertion

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about it do you think is incorrect? I set ret to None b/c for real or complex data the size of ret should be different, they are then respectively defined in a later section. The generalizedSensorType is just one way of categorizing the different ways to partition the data.


if not real:
ret = np.zeros(len(raw_frame) // 2, dtype=complex)

if sensor_type == 'xWR14xx':
for rx in range(num_rx):
ret[rx*num_samples*num_chirps:num_samples*num_chirps*(rx+1)] = raw_frame[rx::num_rx][0::2] + 1j * raw_frame[rx::num_rx][1::2]

elif sensor_type == 'xWR16xx' or sensor_type == 'IWR6843':
#can reshape after calc
ret = raw_frame[0::2][0::2] + 1j*raw_frame[0::2][1::2]
#
else:
# Separate IQ data
# **Original code, untouched**
# **Not sure which sensor type this fits**
ret[0::2] = raw_frame[0::4] + 1j * raw_frame[2::4]
ret[1::2] = raw_frame[1::4] + 1j * raw_frame[3::4]
else:
ret = np.zeros(len(raw_frame), dtype=np.int16)
if sensor_type == 'xWR14xx':
for rx in range(num_rx):
ret[rx*num_samples*num_chirps:num_samples*num_chirps*(rx+1)] = raw_frame[rx::num_rx]
elif sensor_type == 'xWR16xx' or sensor_type == 'IWR6843':
#already in format of shape (numchirp, numrx, numsample)
ret = raw_frame

# Separate IQ data
ret[0::2] = raw_frame[0::4] + 1j * raw_frame[2::4]
ret[1::2] = raw_frame[1::4] + 1j * raw_frame[3::4]
return ret.reshape((num_chirps, num_rx, num_samples))


'''
Given sensor type returns generalized name

Args:
sensor_type: The name of the TI sensor used

Returns:
String: The generalized form of the name of the TI sensor used. ex: IWR1438 --> xWR14xx
'''
def generalizedSensorType(self, sensor_type):
general_classes = ['xWR14xx', 'xWR16xx', 'IWR6843']

for c in general_classes:
if c.replace('x','') in sensor_type:
return c
else:
print('Sensor Type ('+ sensor_type +') not supported!')