Single Qubit Characterization Sequences

Simple spectroscopy and coherence experiments on a single qubit.

Initial setup

In [ ]:
from QGL import *

See Auspex example notebooks on how to configure a channel library.

For the examples in this notebook, we will the channel library generated by running ex1_QGL_basics.ipynb in this same directory.

In [ ]:
cl = ChannelLibrary(db_resource_name="example.sqlite")

q1 was already defined in the example channel library, and we load it here

In [ ]:
q = cl["q1"]

Keep in mind that recreating q1 at this stage would give a warning, and try to update the existing qubit to reflect the newly requested parameters: i.e.

In [ ]:
q = cl.new_qubit("q1")


Pulsed spectroscopy sequence

A single sequence with a long saturating pulse to find qubit transitions. The specOn option turns the saturation pulse on/off as this sequence is also useful with just a readout pulse for cavity spectroscopy.

In [ ]:
plot_pulse_files(PulsedSpec(q, specOn=True)) #with a Pi/saturation pulse if specOn = True

Rabi Nutation sequences

For spectroscopy or calibration purposes we can perform a variable nutation angle experiment by varying either the amplitude or width of the excitation pulse.

In [ ]:
plot_pulse_files(RabiAmp(q, np.linspace(0,1,101)))

In [ ]:
plot_pulse_files(RabiWidth(q, np.arange(40e-9, 1e-6, 10e-9)))

Coherence Time Measurements


T$_1$ can be measured with an inversion recovery variable delay experiment. The sequence helper function tacks on calibration experiments that can be controlled with the calRepeats keyword argument.

In [ ]:
plot_pulse_files(InversionRecovery(q,np.arange(100e-9,10e-6,100e-9), calRepeats=2))


T$_2^*$ is usually characterized with a 90-delay-90 experiment where as the Hahn echo removes low frequency noise and that causes incoherent loss and recovers something closer to the true T$_2$. The delay parameter is the pulse spacing and so the total effective delay in the Hahn echo will be 2 times this plus the 180 pulse length.

In [ ]:
plot_pulse_files(Ramsey(q, np.arange(100e-9,10e-6,100e-9)))

In [ ]:
plot_pulse_files(HahnEcho(q, np.arange(100e-9,10e-6,100e-9)))

In [ ]: