Пример #1
0
    def _read_header(self) -> None:
        self._sr = self._read_sample_rate()
        self._sensors = self._read_enabled_sensors()
        self._channels = self.get_data_channels(self._sensors)
        self._channel_dtypes = get_ch_dtypes(self._channels)
        self._rtc_diff = self._read_rtc_clock_diff()
        self._start_ts = self._read_start_time()
        self._trial_config = self._read_trial_config()
        self._exg_regs = self._read_exg_regs()

        self._samples_per_block, self._block_size = self._calculate_block_size(
        )
Пример #2
0
    def test_get_ch_dtypes(self):
        channels = [EChannelType.INTERNAL_ADC_13, EChannelType.GYRO_MPU9150_Y]
        r = get_ch_dtypes(channels)

        self.assertEqual(len(r), 2)
        first, second = r

        self.assertEqual(first.size, 2)
        self.assertEqual(first.little_endian, True)
        self.assertEqual(first.signed, False)

        self.assertEqual(second.size, 2)
        self.assertEqual(second.little_endian, False)
        self.assertEqual(second.signed, True)
Пример #3
0
    def test_parsing_w_sync(self):
        fpath, _ = get_synced_bin_vs_consensys_pair_fpath()
        with open(fpath, 'rb') as f:
            reader = ShimmerBinaryReader(f)

            exp_dr = 64
            exp_sensors = [ESensorGroup.CH_A13]
            exp_channels = [
                EChannelType.TIMESTAMP, EChannelType.INTERNAL_ADC_13
            ]
            exp_offsets = np.array([372, 362, 364, 351])
            exp_sync_ts = np.array([3725366, 4071094, 4397558, 4724022])
            exp_exg_reg1 = ExGRegister(
                b'\x00\x80\x10\x00\x00\x00\x00\x00\x02\x01')
            exp_exg_reg2 = ExGRegister(
                b'\x00\x80\x10\x00\x00\x00\x00\x00\x02\x01')

            sample_size = sum([dt.size for dt in get_ch_dtypes(exp_channels)])
            samples_per_block = int((512 - 9) / sample_size)
            block_size = samples_per_block * sample_size + 9

            self.assertEqual(reader.has_global_clock, True)
            self.assertEqual(reader.has_sync, True)
            self.assertEqual(reader.is_sync_master, False)
            self.assertEqual(reader.enabled_sensors, exp_sensors)
            self.assertEqual(reader.enabled_channels, exp_channels)
            self.assertEqual(reader.sample_rate, exp_dr)
            self.assertEqual(reader.samples_per_block, samples_per_block)
            self.assertEqual(reader.start_timestamp, 3085110)
            self.assertEqual(reader.block_size, block_size)

            self.assertEqual(reader.get_exg_reg(0), exp_exg_reg1)
            self.assertEqual(reader.get_exg_reg(1), exp_exg_reg2)
            self.assertEqual(reader.exg_reg1, exp_exg_reg1)
            self.assertEqual(reader.exg_reg2, exp_exg_reg2)

            samples, (off_index, sync_off) = reader.read_data()
            ts = samples[EChannelType.TIMESTAMP]

            np.testing.assert_equal(ts[off_index], exp_sync_ts)
            np.testing.assert_equal(sync_off, exp_offsets)

            # Sanity check on the timestamps: they should all be spaced equally apart with a stride that is equal
            # to the sampling rate.
            ts = samples[EChannelType.TIMESTAMP]
            ts_diff = np.diff(ts)
            correct_diff = np.sum(ts_diff == exp_dr)
            self.assertTrue(correct_diff / len(ts_diff) > 0.98)
Пример #4
0
    def test_parsing_wo_sync(self):
        fpath = get_binary_sample_fpath()
        with open(fpath, 'rb') as f:
            reader = ShimmerBinaryReader(f)

            exp_dr = 65
            exp_sensors = [
                ESensorGroup.ACCEL_LN, ESensorGroup.BATTERY,
                ESensorGroup.CH_A13
            ]
            exp_channels = [
                EChannelType.TIMESTAMP, EChannelType.ACCEL_LN_X,
                EChannelType.ACCEL_LN_Y, EChannelType.ACCEL_LN_Z,
                EChannelType.VBATT, EChannelType.INTERNAL_ADC_13
            ]

            sample_size = sum([dt.size for dt in get_ch_dtypes(exp_channels)])
            samples_per_block = int(512 / sample_size)
            block_size = samples_per_block * sample_size

            self.assertEqual(reader.enabled_sensors, exp_sensors)
            self.assertEqual(reader.enabled_channels, exp_channels)
            self.assertEqual(reader.sample_rate, exp_dr)
            self.assertEqual(reader.has_global_clock, True)
            self.assertEqual(reader.has_sync, False)
            self.assertEqual(reader.is_sync_master, False)
            self.assertEqual(reader.samples_per_block, samples_per_block)
            self.assertEqual(reader.start_timestamp, 31291951)
            self.assertEqual(reader.block_size, block_size)
            self.assertEqual(reader.exg_reg1.binary,
                             b'\x00\x80\x10\x00\x00\x00\x00\x00\x02\x01')
            self.assertEqual(reader.exg_reg2.binary,
                             b'\x00\x80\x10\x00\x00\x00\x00\x00\x02\x01')

            data, _ = reader.read_data()
            ts = data[EChannelType.TIMESTAMP]

            # Sanity check on the timestamps: they should all be spaced equally apart with a stride that is equal
            # to the sampling rate.
            ts_diff = np.diff(ts)
            correct_diff = np.sum(ts_diff == exp_dr)
            self.assertTrue(correct_diff / len(ts_diff) > 0.98)