# Single qubit randomized benchmarking

Randomized benchmarking (RB) is a procedure to generate an
average figure-of-merit characterizing the fidelity of
qubit operations. This procedure is useful as full process tomography
may be prohibitively costly in terms of the number of required operations.

RB utilizes operations from the Clifford group, which for 1 qubit is (roughly) the set
of unitary operations mapping the Pauli group onto itself. See, for example [1].
We implement both a "standard" RB sequence where there are only clifford gates
randomized and an *interleaved* version where each randomly selected clifford
is followed by a *target* operation, which must also be a member of the clifford
group.

## #

ConfigThe configuration defines a mixed input quantum element: `qe1`

which is the qubit control
element and a `rr`

mixed input element representing the readout.

The element defines operations to rotate the qubit by plus/minus pi/2 or pi around the
X and Y axes. This is done for clarity but can indeed be converted into a more
condensed form involving only X and Z rotations with an arbitrary angle parameter.
Each pulse is defined as a gaussian with different amplitude and the `intermediate frequency`

(IF)
is set to 0. This is done not for physical reasons, but so that inspecting the
simulated signals is made easier.

## #

ProgramThe one qubit RB procedure involves uniform random selection from a group of 24 clifford gate (or just 2 generators). This number grows exponentially large and is unwieldy for even two qubits, but it is instructive to explicitly write these as is done in the program (see also supplementary material to [1]).

Perhaps the main issue one has to tackle when performing a RB sequence is keeping
track of the expected current state of the system, such that a single recovery clifford gate
can be performed to return to the ground state. To do this, we define a We also write out a `transformations`

dictionary and a
`transform_state`

function. This allows us to take the current expected state, and the performed
operation, and update our expected state accordingly.

The `play_clifford`

function is where each operation is played and the state is updated. This function
is called from the `randomize_and_play_circuit`

function as can be seen in the QUA program itself.

With how the program is implemented, there is quadratic dependence between the circuit depth and the
number of play commands sent to the OPX. Depending on the length of the `circtuit_depth_vec`

vector
you are scanning over, the maximum depth may be limited to about 200 cliffords, or less. Take this into
account when designing your sequence. In addition, play mind that a relatively long compile time (up to
10s of seconds) may be expected.

## #

Post processingN/A

## #

Sample outputThis is a sample pulse sequence generated by this program. Not the orange pulses which represent Y gates, the blue pulses which represent X gates and the red blocks which represent the measurement operations. Blue/ orange pulses with half-amplitude represent $\pi/2$ pulses and a negative amplitude represents a negative sense of rotation.

## #

ScriptDownload randomized benchmark script

Download interleaved randomized benchmark script