diff --git a/ohmpi/hardware_system.py b/ohmpi/hardware_system.py index 04b3dc17de4df8c79a4f25a12f717949c236cc0e..7aaaef01985c006b28f50e30710d7010b4781d3f 100644 --- a/ohmpi/hardware_system.py +++ b/ohmpi/hardware_system.py @@ -329,7 +329,8 @@ class OhmPiHardware: self.rx._bias += (np.mean(self.readings[self.readings[:, 2] == 1, 4]) + np.mean(self.readings[self.readings[:, 2] == -1, 4])) / 2. - def vab_square_wave(self, vab, cycle_duration, sampling_rate=None, cycles=3, polarity=1, append=False): + def vab_square_wave(self, vab, cycle_duration, sampling_rate=None, cycles=3, polarity=1, duty_cycle=1., + append=False): self.exec_logger.event(f'OhmPiHardware\tvab_square_wave\tbegin\t{datetime.datetime.utcnow()}') self.tx.polarity = polarity durations = [cycle_duration/2]*2*cycles @@ -340,7 +341,16 @@ class OhmPiHardware: injection.start() gain_auto.join() injection.join() - self._vab_pulses(vab, durations, sampling_rate, append=append) + assert 0. <= duty_cycle <= 1. + if duty_cycle < 1.: + durations = [cycle_duration/2 * duty_cycle, cycle_duration/2*(1.-duty_cycle)] * cycles + pol = [-self.tx.polarity * np.heaviside(i % 2, -1.) for i in range(cycles)] + polarities = [0] * (len(cycles) * 2) + polarities[0::2] = pol + else: + durations = [cycle_duration / 2] * 2 * cycles + polarities = None + self._vab_pulses(vab, durations, sampling_rate, polarities=polarities, duty_cycle=duty_cycle, append=append) self.exec_logger.event(f'OhmPiHardware\tvab_square_wave\tend\t{datetime.datetime.utcnow()}') def _vab_pulse(self, vab, duration, sampling_rate=None, polarity=1, append=False): diff --git a/ohmpi/ohmpi.py b/ohmpi/ohmpi.py index 3c8f57cfaee110313d1791ae2c29134d2e69cd40..57a7a56b8285495f55ec8051934459e823eeed40 100644 --- a/ohmpi/ohmpi.py +++ b/ohmpi/ohmpi.py @@ -453,7 +453,7 @@ class OhmPi(object): tx_volt = float(tx_volt) bypass_check = kwargs['bypass_check'] if 'bypass_check' in kwargs.keys() else False if self.switch_mux_on(quad, bypass_check=bypass_check, cmd_id=cmd_id): - self._hw.vab_square_wave(tx_volt, cycle_length=injection_duration*2, cycles=nb_stack) + self._hw.vab_square_wave(tx_volt, cycle_duration=injection_duration*2, cycles=nb_stack) d = { "time": datetime.now().isoformat(), "A": quad[0],