def setUp(self): d = Device(0, "test") dc = DeviceConfig(0, "foo", d) dc.base = 1000 dc.spacing = 1 dc.num = 1000 sc = SweepConfig(dc, 0, 3, 1) p = SpectrumSensorProgram(sc, 0, 10, 1) self.r = r = SpectrumSensorResult(p) s = Sweep() s.timestamp = 0.0 s.data = [0.0, 1.0, 2.0] r.sweeps.append(s) s = Sweep() s.timestamp = 1.0 s.data = [3.0, 4.0] r.sweeps.append(s)
def _decode(program, data): num_channels = program.sweep_config.num_channels line_bytes = num_channels * 2 + 4 result = SpectrumSensorResult(program) sweep = Sweep() for n in range(0, len(data), 2): datum = data[n:n + 2] if len(datum) != 2: continue if n % line_bytes == 0: # got a time-stamp t = data[n:n + 4] tt = struct.unpack("<i", t)[0] assert not sweep.data sweep.timestamp = tt * 1e-3 continue if n % line_bytes == 2: # second part of a time-stamp, just ignore assert not sweep.data continue dbm = struct.unpack("<h", datum)[0] * 1e-2 sweep.data.append(dbm) if len(sweep.data) >= num_channels: result.sweeps.append(sweep) sweep = Sweep() if (sweep.data): result.sweeps.append(sweep) return result
def sweep(self, sweep_config): """Perform a single frequency sweep and return results immediately :param sweep_config: frequency sweep configuration to use, a :py:class:`SweepConfig` object """ sweep = Sweep() sweep.timestamp = 0 for sweep_config in self._split_sweep_config(sweep_config): data = self._sweep(sweep_config) sweep.data += data return sweep