The Machinery · Topic 32 of 41 · The Workbench: the circuits

Two coupled qubits: ZZ and frequency collisions

What does a second qubit do to the first just by sitting next to it, and why do designers keep their frequencies apart?

  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06
  7. 07
  8. 08
  9. 09
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
About this section: The Workbench: the circuits

These four topics are the physics the two programs encode: the Hamiltonians of the common superconducting circuits, the way a resonator reads one out, and what happens when two sit side by side. Each is worked by diagonalising a matrix, so each can be checked against the programs in the next group, and each ends in numbers a design review would ask for.

See it

the ZZ shift against frequency difference collision |11⟩ = |02⟩ collision |11⟩ = |20⟩ 0: the qubits swap f₁ − f₂ from −1 to +1 GHz (each qubit’s anharmonicity −0.3, coupling 20 MHz) ≈ −0.5 MHz
Coupling is never switched all the way off. Two transmons joined by a small capacitance push each other’s levels. The one measurable effect, a shift of the two-excitation state called ZZ, is small and negative when the qubits are far apart and runs away at the two frequencies where a state with two excitations in one qubit becomes degenerate with one in each. Every point is an exact diagonalisation.

Try it: place two qubits and see where they collide

Set the frequency of each qubit, their anharmonicities and the coupling between them. The panel shows the eight lowest levels of the pair and the ZZ shift they produce, and flags the frequencies at which the pair is close to a collision. Try moving the second qubit towards the first and then past the collision at a spacing equal to the anharmonicity; then increase the coupling and watch how much room you have left.

Honest limits: each transmon is modelled as an anharmonic oscillator with five levels, and the coupling is a plain capacitive one. Real devices add a coupler, a control line and many neighbours. The numbers agree with QuTiP for this model, not with any chip.

The intuition

The topics so far had one qubit at a time. A processor needs at least two, and they have to talk, which means they are joined by something (a capacitor, a coupler, a resonator). The trouble is that the thing that lets them talk when you want it to also lets them talk when you do not. Two transmons side by side hybridise a little all the time, and their combined levels are not the sum of their separate ones.

The ZZ shift. Take the four basis states 00, 01, 10 and 11, where a 1 means that qubit is excited. If the qubits did not interact, the energy of 11 would be exactly the energy of 10 plus the energy of 01 (minus that of 00). In fact it is a little off. That difference, ζ = E11 − E10 − E01 + E00, is the ZZ coupling: the frequency of qubit 1 depends on whether qubit 2 is excited. It is an always-on error, because it turns every operation on one qubit into a small, unwanted phase on the other, and it is the reason a pair of qubits is a different problem from a single one. Part of the work of making a high-quality two-qubit gate is cancelling or avoiding it.

Why it grows near a collision. The source of ζ is that the state 11 is pushed by the neighbouring states it can mix with. Because transmons are anharmonic, the state with two excitations in the same qubit (02 or 20) sits a distance of the anharmonicity above 11 when the qubits are tuned apart. If you tune the qubits so that distance shrinks to zero, 11 and 02 are at the same energy and mix completely. That is a frequency collision: the interaction does not just shift the levels, it exchanges them, and a gate or an idle qubit placed there is ruined. The collisions on this page sit where the frequency difference equals plus or minus the anharmonicity. A third, at zero difference, is the qubits swapping a single excitation.

What a designer does. Choose the frequencies and the coupling so that all the qubits sit between collisions with room to spare, then check that fabrication spread, which moves each qubit’s frequency away from its design value, does not push any pair across one. This is a layout problem on a whole processor, solved with exactly this calculation for every neighbouring pair.

The mathematics

The model. Treat each transmon as an anharmonic oscillator with frequency ωi and anharmonicity αi, and couple them through their charges,

H = Σi=1,2 [ ωi bi†bi + (αi/2) bi†bi†bibi ] + g (b1 + b1†)(b2 + b2†)

Each qubit keeps five levels, so the pair lives in a 25-dimensional space, the product of two lists of five, as in topic 24. Diagonalise, find the four states that overlap most with |00⟩, |01⟩, |10⟩ and |11⟩, and subtract.

The perturbative answer. With Δ = ω1 − ω2 and |g| small compared with every distance,

ζ ≈ 2g² (α1 + α2) / ( (Δ + α1)(Δ − α2) )

This has a pole where Δ = −α1 or Δ = α2: the collisions. For α1 = α2 = −0.3 GHz and g = 20 MHz it gives −0.527 MHz at Δ = 1 GHz, against −0.531 MHz from exact diagonalisation, and −0.87 MHz at Δ = −0.8 GHz against −0.876 MHz. Closer in, the formula fails as the poles take over: the exact values are −4.12 MHz at Δ = −0.45, −11.7 MHz at Δ = −0.35 and +24.5 MHz just on the other side of the collision at Δ = −0.29. The table is ZZ = −0.531, −1.765, −4.124 and −11.716 MHz at Δ = +1.0, +0.6, −0.45 and −0.35 GHz for two transmons with α = −0.3 GHz and g = 20 MHz.

The four collisions at small coupling. The two-excitation states 02 and 20 have energies 2ω2 + α2 and 2ω1 + α1, against ω1 + ω2 for 11; equating gives Δ = α2 and Δ = −α1. The single-excitation swap is at Δ = 0. The collisions are widths, not points: the coupling sets how close you may come.

Try it in Python. The same calculation in QuTiP: build the two oscillators, add the coupling, diagonalise, and label states by overlap. Run on QuTiP 5.2.0, 25 October 2026:

import numpy as np
import qutip as qt

def zz(w1, w2, a1, a2, g, L=5):
    b1 = qt.tensor(qt.destroy(L), qt.qeye(L))
    b2 = qt.tensor(qt.qeye(L), qt.destroy(L))
    H = (w1 * b1.dag() * b1 + 0.5 * a1 * b1.dag() * b1.dag() * b1 * b1
         + w2 * b2.dag() * b2 + 0.5 * a2 * b2.dag() * b2.dag() * b2 * b2
         + g * (b1 + b1.dag()) * (b2 + b2.dag()))
    ev, st = H.eigenstates()
    def level(i, j):                                  # the dressed state that overlaps most with |i, j>
        k = qt.tensor(qt.basis(L, i), qt.basis(L, j))
        return ev[int(np.argmax([abs(k.overlap(s)) ** 2 for s in st]))]
    return level(1, 1) - level(1, 0) - level(0, 1) + level(0, 0)

for delta in (1.0, 0.6, -0.45, -0.35):                # f1 - f2 in GHz; both anharmonicities are -0.3 GHz
    print(f"{delta:+.2f} GHz   ZZ = {zz(5.0 + delta, 5.0, -0.3, -0.3, 0.02) * 1e3:+.3f} MHz")
+1.00 GHz   ZZ = -0.531 MHz
+0.60 GHz   ZZ = -1.765 MHz
-0.45 GHz   ZZ = -4.124 MHz
-0.35 GHz   ZZ = -11.716 MHz

Where it actually matters

Frequency planning, and why couplers exist Every multi-qubit superconducting design has a frequency plan, and this calculation is how it is checked. The unwanted ZZ is also the motive for adding a tunable coupler between two qubits: a device whose own frequency can be set so that the net coupling cancels when no gate is wanted (Yan et al., Phys. Rev. Applied 10, 054062, 2018). Scaling the calculation up is where the exponential cost of topic 24 returns: a pair needs 25 numbers at five levels each, a ring of ten transmons would need 510, about ten million, which is why designers simulate pairs and triples and add up the effects, not whole chips.