コード例 #1
0
    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
コード例 #2
0
 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'])
コード例 #3
0
    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()
コード例 #4
0
 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])
コード例 #5
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'))
コード例 #6
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(200, [], 1000.0)
     b.insert_raw(raw)
     b.process()
     self.assertEqual(0, b.samples_get(0, 8, fields=['current'])[0][-1])
コード例 #7
0
 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])
コード例 #8
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'])
コード例 #9
0
 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'])
コード例 #10
0
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
コード例 #11
0
    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()