def create_sinusoid_file(self, sample_rate, samples): cal = Calibration() cal.current_offset[:7] = -3000 cal.current_gain[:7] = [1e-3, 1e-4, 1e-5, 1e-6, 1e-7, 1e-8, 1e-9] cal.voltage_offset[:2] = -3000 cal.voltage_gain[:2] = [1e-3, 1e-4] cal.data = cal.save(bytes([0] * 32)) fh = io.BytesIO() d = DataRecorder(fh, calibration=cal) stream_buffer = StreamBuffer(1.0, [100], sample_rate) stream_buffer.calibration_set(cal.current_offset, cal.current_gain, cal.voltage_offset, cal.voltage_gain) d.stream_notify(stream_buffer) data = self.create_sinusoid_data(sample_rate, samples) chunk_size = (sample_rate // 2) * 2 for i in range(0, 2 * samples, chunk_size): stream_buffer.insert_raw(data[i:(i + chunk_size)]) stream_buffer.process() d.stream_notify(stream_buffer) d.close() fh.seek(0) return fh
def test_insert_former_nan_case(self): raw = np.array( [ [61957, 16937], [62317, 16935], [62585, 16937], [62853, 16935], [65535, 16916], # raw_i = 0xffff (i_range=3) [18932, 16942], [8876, 16932], [9788, 16938], [10300, 16936], [10368, 16930], [10528, 16932], [10584, 16938], [10564, 16936], [10568, 16942], [12497, 16932], [12733, 16946], [12613, 16940], [12561, 16930] ], dtype=np.uint16) b = StreamBuffer(0.2, [], 1000.0) b.insert_raw(raw) b.process() self.assertEqual(0, b.status()['skip_count']['value'])
def _export_jls(self): view = self._view cfg = self._cfg sampling_frequency = view.sampling_frequency sample_step_size = sampling_frequency stream_buffer = StreamBuffer(sampling_frequency * 2, []) data_recorder = DataRecorder(cfg['filename'], calibration=view.calibration.data, sampling_frequency=sampling_frequency) data_recorder.process(stream_buffer) try: idx_start = cfg['sample_id_start'] idx_stop = cfg['sample_id_stop'] idx_range = idx_stop - idx_start idx = idx_start self.sigProgress.emit(0) while not self._stop and idx < idx_stop: log.info('export_jls iteration') idx_next = idx + sample_step_size if idx_next > idx_stop: idx_next = idx_stop data = view.raw_get(idx, idx_next) log.info('export_jls (%d, %d) -> %d', idx, idx_next, len(data)) stream_buffer.insert_raw(data) stream_buffer.process() data_recorder.process(stream_buffer) idx = idx_next self.sigProgress.emit(int(1000 * (idx - idx_start) / idx_range)) finally: data_recorder.close()
def test_insert_raw_simple(self): b = StreamBuffer(1000, [100, 100, 100]) b.suppress_mode = 'off' expect = np.arange(126 * 2, dtype=np.uint16).reshape((126, 2)) b.insert_raw(np.left_shift(expect, 2)) b.process() data = b.data_get(0, 126) np.testing.assert_allclose(expect[:, 0], data[:, 0, 0])
def test_i_range_off(self): raw = np.array([[0x1003, 0x1001], [0x1003, 0x1003], [0x1003, 0x1001], [0x1003, 0x1003], [0x1003, 0x1001], [0x1003, 0x1003], [0x1003, 0x1001], [0x1003, 0x1003]], dtype=np.uint16) b = StreamBuffer(0.2, [], 1000.0) b.insert_raw(raw) b.process() np.testing.assert_allclose(0, b.samples_get(0, 8, fields='current'))
def test_i_range_off(self): raw = np.array([[0x1003, 0x1001], [0x1003, 0x1003], [0x1003, 0x1001], [0x1003, 0x1003], [0x1003, 0x1001], [0x1003, 0x1003], [0x1003, 0x1001], [0x1003, 0x1003]], dtype=np.uint16) b = StreamBuffer(200, [], 1000.0) b.insert_raw(raw) b.process() self.assertEqual(0, b.samples_get(0, 8, fields=['current'])[0][-1])
def test_insert_raw_wrap(self): b = StreamBuffer(200, []) expect = np.arange(250 * 2, dtype=np.uint16).reshape((250, 2)) b.insert_raw(np.left_shift(expect[:100], 2)) b.process() b.insert_raw(np.left_shift(expect[100:], 2)) b.process() data = b.data_get(50, 250) np.testing.assert_allclose(expect[50:, 0], data[:, 0, 0])
def test_insert_raw_simple(self): b = StreamBuffer(1.0, [100, 100, 100], 1000.0) b.suppress_mode = 'off' expect = np.arange(126 * 2, dtype=np.uint16).reshape((126, 2)) raw = np.left_shift(expect, 2) raw[1::2, 1] = np.bitwise_or(raw[1::2, 1], 0x0002) b.insert_raw(raw) b.process() data = b.data_get(0, 126) np.testing.assert_allclose(expect[:, 0], data[:, 0]['mean']) self.assertEqual(0, b.status()['skip_count']['value'])
def test_insert_raw_wrap(self): b = StreamBuffer(0.2, [], 1000.0) expect = np.arange(250 * 2, dtype=np.uint16).reshape((250, 2)) raw = np.left_shift(expect, 2) raw[1::2, 1] = np.bitwise_or(raw[1::2, 1], 0x0002) b.insert_raw(raw[:100]) b.process() b.insert_raw(raw[100:]) b.process() data = b.data_get(50, 250) np.testing.assert_allclose(expect[50:, 0], data[:, 0]['mean']) self.assertEqual(0, b.status()['skip_count']['value'])
def run(cmd_queue, filehandle, sampling_frequency, calibration): r = DataRecorder(filehandle, sampling_frequency, calibration) b = StreamBuffer(int(sampling_frequency), [], sampling_frequency) b.calibration_set(calibration.current_offset, calibration.current_gain, calibration.voltage_offset, calibration.voltage_gain) while True: cmd, args = cmd_queue.get() if cmd == 'stream_notify': raw_data, voltage_range = args b.voltage_range = voltage_range b.insert_raw(raw_data) b.process() r.stream_notify(b) elif cmd == 'close': r.close() break
def _export_jls(self, data): cfg = self._cfg sampling_frequency = data.sample_frequency stream_buffer = StreamBuffer(sampling_frequency * 2, [], sampling_frequency=sampling_frequency) stream_buffer.calibration_set(data.calibration.current_offset, data.calibration.current_gain, data.calibration.voltage_offset, data.calibration.voltage_gain) stream_buffer.voltage_range = data.cmdp['Plugins/#state/voltage_range'] data_recorder = DataRecorder(cfg['filename'], calibration=data.calibration.data, sampling_frequency=sampling_frequency) data_recorder.stream_notify(stream_buffer) try: for block in data: log.info('export_jls iteration') stream_buffer.insert_raw(block['signals']['raw']['value']) stream_buffer.process() data_recorder.stream_notify(stream_buffer) finally: data_recorder.close()