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 . 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.
The 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.
The 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 ).
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.
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
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.
This 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 pulses and a negative amplitude represents a negative sense of rotation. Barends, R., Kelly, J., Megrant, A., Veitia, A., Sank, D., Jeffrey, E., White, T. C., Mutus, J., Fowler, A. G., Campbell, B., Chen, Y., Chen, Z., Chiaro, B., Dunsworth, A., Neill, C., O’Malley, P., Roushan, P., Vainsencher, A., Wenner, J., … Martinis, J. M. (2014). Superconducting quantum circuits at the surface code threshold for fault tolerance. Nature, 508(7497), 500–503. https://doi.org/10.1038/nature13171