From 73243c7fee12047185b0f4ffa17ae971abca1d49 Mon Sep 17 00:00:00 2001 From: Sander de Snoo <59472150+sldesnoo-Delft@users.noreply.github.com> Date: Mon, 4 Dec 2023 14:27:31 +0100 Subject: [PATCH] Added rf oscillators and analogue shift --- pulse_lib/tests/mock_m3202a.py | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/pulse_lib/tests/mock_m3202a.py b/pulse_lib/tests/mock_m3202a.py index 08a6bd00..8c67d870 100644 --- a/pulse_lib/tests/mock_m3202a.py +++ b/pulse_lib/tests/mock_m3202a.py @@ -76,7 +76,7 @@ class MockM3202A(Instrument): size = len(wave) # discretize samples data = (wave*2**15).astype(np.int16) - data &= 0xFFFC # 14 bit resolution + data &= 0xFFF8 # 13 bit resolution data = data.astype(float) data /= 2**15 slot = self.memory_manager.allocate(size) @@ -148,20 +148,24 @@ class MockM3202A(Instrument): return 200e6/prescaler def _upconvert_filtered(self, t, wave): - t = np.linspace(t[0], t[-1]+1e-9, len(t)*10, endpoint=False) - d = np.zeros(len(wave)*10) - d[::10] = wave fname = os.path.dirname(__file__) + f'/keysight_data/keysight_pulse_response_{self.digital_filter_mode}.hdf5' pulse_response = xr.open_dataset(fname) t_response = pulse_response.coords['t'].data response = pulse_response['y'].data / 0.77 + sr = round(1/(t_response[1]-t_response[0])) + + t = np.linspace(t[0], t[-1]+1e-9, len(t)*sr, endpoint=False) + d = np.zeros(len(wave)*sr) + d[::sr] = wave + d = np.convolve(d, response) - n_before = round(-t_response[0]*10) - n_after = round(t_response[-1]*10) + n_before = round(-t_response[0]*sr) + n_after = round(t_response[-1]*sr) return t, d[n_before: -n_after] - def plot(self, bias_T_rc_time=0, discrete=False, analogue=False, IQ=False, LO_f=None): + def plot(self, bias_T_rc_time=0, discrete=False, analogue=False, IQ=False, LO_f=None, + analogue_shift=0.0): iq_data = {} for channel in range(1,5): data, prescaler = self.get_data_prescaler(channel) @@ -219,7 +223,7 @@ class MockM3202A(Instrument): ta,da = self._upconvert_filtered(t, wave) if IQ: iq_data[channel] = da - pt.plot(ta, da, label=f'{self.name}-{channel} analogue') + pt.plot(ta+analogue_shift, da, label=f'{self.name}-{channel} analogue') if bias_T_rc_time: biased = np.concatenate(biased_data) pt.plot(t, biased, ':', label=f'{self.name}-{channel} bias-T') @@ -261,6 +265,12 @@ class MockM3202A_fpga(MockM3202A): ''' self.marker_table = table.copy() + def set_lo_mode(self, ch, enable): + pass + + def config_lo(self, awg_ch, osc_num, enable, frequency, amplitude): + pass # TODO: add to plotting. + def plot_marker(self): if len(self.marker_table) > 0: t = [] @@ -283,7 +293,8 @@ class MockM3202A_fpga(MockM3202A): pt.plot(t, values, ':', label=f'{self.name}-T') - def plot(self, bias_T_rc_time=0, discrete=False, analogue=False, IQ=False, LO_f=None): + def plot(self, bias_T_rc_time=0, discrete=False, analogue=False, IQ=False, LO_f=None, + analogue_shift=0.0): super().plot(bias_T_rc_time=bias_T_rc_time, discrete=discrete, analogue=analogue, - IQ=IQ, LO_f=LO_f) + IQ=IQ, LO_f=LO_f, analogue_shift=analogue_shift) self.plot_marker() -- GitLab