Flux crosstalk experiments

In this section we show how to run flux crosstalk experiments.

As we saw in Frequency vs flux experiments the external flux affecting a qubit line \(i\) will receive contributions from other qubits

\[\Phi_i = \sum_{j} C_{ij} V_j + \Phi_i^{\text{offset}} \quad ,\]

which means that the transmon frequency can change when current is applied on other qubits.

Qubit crosstalk

It is possible to measure qubit crosstalk by running a qubit_crosstalk experiment. Assuming that the target qubit is at the sweetspot, in order to measure crosstalk effects it is suggested to bias the qubit away.

Here is a possible runcard where we measure the crosstalk on qubit 2 caused by qubit 3 and 0.

Parameters

class qibocal.protocols.flux_dependence.qubit_crosstalk.QubitCrosstalkParameters(drive_amplitude: float = 0.01, drive_duration: int = 2000, bias_point: dict[~types.Annotated[int | str, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(union_mode='left_to_right')])], float] | None = <factory>, flux_qubits: list[~types.Annotated[int | str, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(union_mode='left_to_right')])]] | None = None, *, freq_width: int | None = None, freq_step: int | None = None, frequency: tuple[float, float, float] | tuple[~typing.Literal['linspace'], float, float, int] | tuple[~typing.Literal['window'], float, float, float] | tuple[~typing.Literal['linwindow'], float, float, int] | tuple[~typing.Literal['center'], float, float] | tuple[~typing.Literal['lincenter'], float, int] | tuple[~typing.Literal['asym'], tuple[float, float], float] | tuple[~typing.Literal['linasym'], tuple[float, float], int] | None = None, bias_width: float | None = None, bias_step: float | None = None, bias: tuple[float, float, float] | tuple[~typing.Literal['linspace'], float, float, int] | tuple[~typing.Literal['window'], float, float, float] | tuple[~typing.Literal['linwindow'], float, float, int] | tuple[~typing.Literal['center'], float, float] | tuple[~typing.Literal['lincenter'], float, int] | tuple[~typing.Literal['asym'], tuple[float, float], float] | tuple[~typing.Literal['linasym'], tuple[float, float], int] | None = None)[source]

Crosstalk runcard inputs.

bias_point: dict[Annotated[int | str, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(union_mode='left_to_right')])], float] | None

bias_point_qubit_id}.

Type:

Dictionary with {qubit_id

flux_qubits: list[Annotated[int | str, FieldInfo(annotation=NoneType, required=True, metadata=[_PydanticGeneralMetadata(union_mode='left_to_right')])]] | None = None

IDs of the qubits that we will sweep the flux on. If None flux will be swept on all qubits that we are running the routine on in a multiplex fashion. If given flux will be swept on the given qubits in a sequential fashion (n qubits will result to n different executions). Multiple qubits may be measured in each execution as specified by the qubits option in the runcard.

bias: tuple[float, float, float] | tuple[Literal['linspace'], float, float, int] | tuple[Literal['window'], float, float, float] | tuple[Literal['linwindow'], float, float, int] | tuple[Literal['center'], float, float] | tuple[Literal['lincenter'], float, int] | tuple[Literal['asym'], tuple[float, float], float] | tuple[Literal['linasym'], tuple[float, float], int] | None = None

Bias [a.u.] range for sweep.

bias_range(center: float = 0.0) tuple[float, float, float]
bias_step: float | None = None

Bias step for sweep [a.u.].

bias_width: float | None = None

Width for bias sweep [a.u.].

drive_amplitude: float = 0.01

Amplitude of the drive pulse.

drive_duration: int = 2000

Duration of the drive pulse.

freq_step: int | None = None

Frequency step for sweep [Hz].

freq_width: int | None = None

Width for frequency sweep relative to the readout frequency [Hz].

frequency: tuple[float, float, float] | tuple[Literal['linspace'], float, float, int] | tuple[Literal['window'], float, float, float] | tuple[Literal['linwindow'], float, float, int] | tuple[Literal['center'], float, float] | tuple[Literal['lincenter'], float, int] | tuple[Literal['asym'], tuple[float, float], float] | tuple[Literal['linasym'], tuple[float, float], int] | None = None

Frequency [Hz] range for sweep.

frequency_range(center: float = 0.0) tuple[float, float, float]
nshots: int

Number of executions on hardware.

relaxation_time: float

Wait time for the qubit to decohere back to the ground state.

Example

- id: qubit crosstalk
  operation: qubit_crosstalk
  targets: [2]
  parameters:
    bias_point:
        2: 0.25
    bias_step: 0.001
    bias_width: 0.05
    drive_amplitude: 0.002
    drive_duration: 4000
    flux_qubits: [0, 3]
    freq_step: 200000
    freq_width: 10000000
    nshots: 1024
    relaxation_time: 20000
../../_images/qubit_crosstalk.png

The previous runcard aims at extracting the crosstalk coefficients \(C_{20}\) and \(C_{23}\).

Requirements