Qubit spectroscopies#
In this section we are going to present how to run with qibocal some qubit spectroscopy experiments.
Qubit Spectroscopy#
To measure the resonance frequency of the qubit it is possible to perform a qubit spectroscopy experiment. After having obtained an initial guess for the readout amplitude and the readout frequency through a Resonator punchout this experiment aims at extracting the frequency of the qubit.
In this protocol the qubit is probed by sending a drive pulse at variable frequency \(w\) before measuring. When \(w\) is close to the transition frequency \(w_{01}\) some of the population will move to the excited state. If the drive pulse is long enough it will be generated a maximally mixed state with \(\rho \propto I\) [2, 8].
Parameters#
- class qibocal.protocols.qubit_spectroscopy.QubitSpectroscopyParameters(freq_width: int, freq_step: int, drive_duration: int, drive_amplitude: Optional[float] = None, hardware_average: bool = True)[source]
QubitSpectroscopy runcard inputs.
- freq_width: int
Width [Hz] for frequency sweep relative to the qubit frequency.
- freq_step: int
Frequency [Hz] step for sweep.
- drive_duration: int
Drive pulse duration [ns]. Same for all qubits.
- hardware_average: bool = True
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.
How to execute a qubit spectroscopy experiment#
A possible runcard to launch a qubit spectroscopy experiment could be the following:
- id: qubit spectroscopy 01
operation: qubit_spectroscopy
parameters:
drive_amplitude: 0.01 # drive power
drive_duration: 4000 # ns
freq_width: 20_000_000
freq_step: 1_000_000
nshots: 1024
relaxation_time: 20_000
Here is the corresponding plot:
To extract the qubit frequency a Lorentzian fit is performed. After the post-processing the following parameters will be updated:
qubit.drive_frequency
qubit.native_gates.RX.frequency
Requirements#
Qubit spectroscopy for higher excited states#
Through a qubit spectroscopy experiment it is possible to target also the transition frequencies towards higher energy level other than the first excited state.
To visualize these secondary excitations it is necessary to provide a considerable amount of drive power, which might be outside the limit of the experimental setup.
Another way to address the higher levels is to first excite the qubit to state \(\ket{1}\) followed by the sequence previously presented for the qubit spectroscopy. In this way it is possible to induce a transition between \(\ket{1}\leftrightarrow\ket{2}\).
Such frequency \(\omega_{12}\) should be below \(\omega_{01}\) by around \(200 - 300\) MHz for flux tunable transmons. From \(\omega_{12}\) and \(\omega_{01}\) it is possible to compute the anharmonicity \(\alpha\) as [12]:
In the literature the energy levels can be expressed as \(\ket{g}, \ket{e}, \ket{f}\), to
address the ground state, the excited state and the first excited state above the excited state.
For this reason the experiments has been labelled qubit_spectroscopy_ef
.
Parameters#
- class qibocal.protocols.qubit_spectroscopy_ef.QubitSpectroscopyEFParameters(freq_width: int, freq_step: int, drive_duration: int, drive_amplitude: Optional[float] = None, hardware_average: bool = True)[source]
QubitSpectroscopyEF runcard inputs.
- drive_amplitude: Optional[float] = None
Drive pulse amplitude (optional). Same for all qubits.
- hardware_average: bool = True
By default hardware average will be performed.
- freq_width: int
Width [Hz] for frequency sweep relative to the qubit frequency.
- freq_step: int
Frequency [Hz] step for sweep.
- drive_duration: int
Drive pulse duration [ns]. Same for all qubits.
- nshots: int
Number of executions on hardware.
- relaxation_time: float
Wait time for the qubit to decohere back to the gnd state.
How to execute a qubit spectroscopy experiment#
A possible runcard to launch a qubit spectroscopy experiment could be the following:
- id: qubit spectroscopy 12
operation: qubit_spectroscopy_ef
parameters:
drive_amplitude: 0.01 # drive power
drive_duration: 4000 # ns
freq_width: 20_000_000
freq_step: 1_000_000
nshots: 1024
relaxation_time: 20_000
Here is the corresponding plot:
To extract \(\omega_{12}\) a lorentzian fit is performed. After the post-processing both the anharmonicity and the frequency of the RX12 pulse (which is the pulse that allows to drive a qubit from state \(\ket{1}\) to state \(\ket{2}\)) are updated.