Rabi experiments#
In this section we present all Rabi experiments provided by Qibocal.
Rabi lenght and amplitude#
The goal of the Rabi experiment is to tune the amplitude (duration) of the drive pulse, in order to excite the qubit from the ground state up to state \(\ket{1}\).
In the Rabi experiment, the qubit is probed with a drive pulse at the qubit frequency \(w_{01}\) before measuring. This pulse sequence is repeated multiple times changing the amplitude (duration) of the pulse. The qubit starts in the ground state, changing one of the two parameters of the drive pulse, the probability of being in the first excited state increases following a sinusoidal pattern.
For the amplitude version, we expect:
For the time version, we have to take into account the dephasing and the energy decay. In case the Rabi rate is larger than the decay and the pure dephasing rate,
where \(\Omega_R\) is the Rabi frequency and \(\tau\) the decay time.
Since many routines and protocols in quantum computing are based on R_x(pi/2) rotations, in qibocal we implemented also another version of the Rabi experiment which can be used to tune the amplitude (duration) of the drive pulse in order to excite the qubit from the ground state up to state \(\frac{\ket{0}-i\ket{1}}{\sqrt{2}}\).
The possibility to calibrate an R_x(pi/2) rotation as native gate allows us to remove the errors that could arise from assuming that the R_x(pi/2) amplitude (duration) is exactly half that of the R_x(pi) amplitude (duration). This assumption presumes a perfectly linear response of the qubit to the drive pulse, which is often not the case due to nonlinearities in the qubit’s response or imperfections in the pulse shaping [4].
In this case the pulse sequence is the same as before with the only difference that instead of a single R_x(pi) pulse we use two concatenated R_x(pi/2) pulses.
Parameters#
- class qibocal.protocols.rabi.amplitude.RabiAmplitudeParameters(min_amp: float, max_amp: float, step_amp: float, pulse_length: Optional[float] = None, rx90: bool = False)[source]
RabiAmplitude runcard inputs.
- hardware_average: bool = False
By default hardware average will be performed.
- pulse_length: Optional[float] = None
RX pulse duration [ns].
- rx90: bool = False
Calibration of native pi pulse, if true calibrates pi/2 pulse
- min_amp: float
Minimum amplitude.
- max_amp: float
Maximum amplitude.
- step_amp: float
Step amplitude.
- nshots: int
Number of executions on hardware.
- relaxation_time: float
Wait time for the qubit to decohere back to the gnd state.
- class qibocal.protocols.rabi.length.RabiLengthParameters(pulse_duration_start: float, pulse_duration_end: float, pulse_duration_step: float, pulse_amplitude: Optional[float] = None, rx90: bool = False, interpolated_sweeper: bool = False)[source]
RabiLength runcard inputs.
- pulse_duration_start: float
Initial pi pulse duration [ns].
- pulse_duration_end: float
Final pi pulse duration [ns].
- pulse_duration_step: float
Step pi pulse duration [ns].
- rx90: bool = False
Calibration of native pi pulse, if true calibrates pi/2 pulse
- interpolated_sweeper: bool = False
Use real-time interpolation if supported by instruments.
- hardware_average: bool = False
By default hardware average will be performed.
- nshots: int
Number of executions on hardware.
- relaxation_time: float
Wait time for the qubit to decohere back to the gnd state.
Example#
It follows an example of the experiment parameters.
- id: Rabi amplitude
operation: rabi_amplitude
parameters:
min_amp: 0.1
max_amp: 1.
step_amp: 0.01
pulse_length: 40
nshots: 3000
relaxation_time: 50000
To run properly this experiment it is important to set the relaxation_time higher than the qubit T1.
After running qq run, the experiment is executed and the result will looks like the following picture.

Regarding the time version of this experiment, this is an example
- id: Rabi length
operation: rabi_length
parameters:
pulse_duration_start: 16
pulse_duration_end: 100
pulse_duration_step: 4
pulse_amplitude: 0.22
nshots: 3000
relaxation_time: 50000

For each Rabi experiment Qibocal provides the signal version, where just the readout signal is acquired, without
performing state discrimination qibocal.protocols.rabi.amplitude_signal.rabi_amplitude_signal
,
qibocal.protocols.rabi.length_signal.rabi_length_signal
.
It follows an example runcard and plot for the signal exepriment
- id: Rabi signal
operation: rabi_amplitude_signal
parameters:
min_amp: 0.2
max_amp: 1.
step_amp: 0.01
pulse_length: 40
nshots: 3000
relaxation_time: 50000

In all the previous examples we run Rabi experiments for calibrating the amplitude (duration) of the drive pulse to excite the qubit from the ground state up to state \(\ket{1}\). All these example runcards can be modified to calibrate the amplitude (duration) of the drive pulse to excite the qubit from the ground state up to state \(\frac{\ket{0}-i\ket{1}}{\sqrt{2}}\) by simply setting the rx90 parameter to True.
In the following we show an example runcard for the amplitude calibration of the R_x(pi/2).
- id: Rabi signal
operation: rabi_amplitude_signal
parameters:
min_amp: 0.01
max_amp: 0.16
step_amp: 0.002
pulse_length: 40
nshots: 1024
relaxation_time: 50000
rx90: True

Requirements#
Rabi ef#
This experiment is used to characterized the \(\pi_{12}\) pulse, in order to change the qubit state from \(\ket{1}\) to \(\ket{2}\). The experiment is similar to the Rabi experiment, but at the beginning the state should be prepared in the \(\ket{1}\) state through a \(\pi_{01}\) pulse.
Example#
It follows an example of runcard and a generated report.
- id: Rabi ef
operation: rabi_amplitude_ef
parameters:
min_amp: 0.2
max_amp: 1.
step_amp: 0.01
pulse_length: 400
nshots: 3000
relaxation_time: 50000
