Noise and Decoherence: What Actually Goes Wrong on Real Qubits
Every tutorial up to here pretended qubits are perfect. They aren't. This tutorial covers the four main noise processes every quantum dev should know cold — relaxation, dephasing, depolarization, and readout error — with their Kraus operator forms, their T₁/T₂ signatures, and a runnable Qiskit experiment that measures them on a real device.
Prerequisites: Gates & Circuits track
Every previous tutorial has used a language that quietly assumed perfect qubits: unitary gates, exact measurements, clean Bell states. Real hardware isn’t like that. A qubit’s job is to hold a delicate superposition against a relentless environment of thermal photons, residual magnetic fields, crosstalk from neighbors, and the qubit’s own imperfect control hardware. This tutorial makes the noise concrete: four canonical noise processes, their signatures, and the numbers that describe them on real hardware in 2026.
You can’t do error correction (next tutorial) without knowing what you’re correcting. And you can’t interpret real-hardware results without knowing which noise dominated.
From closed to open systems
A unitary acting on a pure state produces another pure state . That’s a closed quantum system — no interaction with the environment.
Real qubits are open quantum systems. They entangle with stray environmental degrees of freedom, which act like a continuous “measurement” you didn’t ask for. The qubit’s state becomes mixed (classically random even when the initial state was pure). The tool for describing this is the density matrix instead of the state vector.
A pure state corresponds to — a rank-1 projector. A mixed state is any positive-semi-definite matrix with trace 1 and rank . Unitary gates act as . Noise processes act as more general quantum channels.
Kraus operators
A quantum channel can always be written in Kraus form:
The are matrices (not unitary in general) and their sum of adjoint-products is identity (trace-preservation condition).
Two intuitions:
- Ensemble interpretation. Each corresponds to one possible “branch” of the noise process; the probability of branch is .
- Stinespring dilation. Any channel can be realized as a unitary on a larger system (qubit + environment) followed by discarding the environment.
Qiskit represents channels via Kraus objects:
import numpy as np
from qiskit.quantum_info import Kraus, Operator
# Identity (no noise)
identity_channel = Kraus([np.eye(2)])
# Bit flip with probability p = 0.1
p = 0.1
bit_flip = Kraus([
np.sqrt(1 - p) * np.eye(2), # nothing happens
np.sqrt(p) * np.array([[0, 1], [1, 0]]), # X flip
])
Verify trace preservation: . ✓
The four noise processes you should know
1. Amplitude damping (T₁ process)
Models spontaneous emission: the qubit in decays to over time. Kraus operators with decay probability :
preserves and scales the amplitude. transfers . Characteristic time: . For a qubit prepared in and waited for time , the probability of still measuring is .
Typical values in 2026:
- IBM Heron / Nighthawk (superconducting): ~200-500 µs
- Google Willow: ~100-300 µs
- IonQ / Quantinuum (trapped ion): ~10-60 seconds (orders of magnitude longer)
- Atom Computing / QuEra (neutral atom): ~20-60 seconds
Trapped-ion machines have brutally long because atomic energy levels are protected from the environment in a way superconducting circuits simply can’t be.
2. Phase damping / dephasing (T₂ process)
Models loss of phase coherence without energy loss. The qubit’s and populations stay the same, but the relative phase becomes randomized. Kraus operators with dephasing probability :
Think of the Bloch vector: shrinks the -component back to equilibrium (qubit relaxing to ); shrinks the -plane components back to zero (phase randomization). The two happen together, so what you measure on hardware is the combined decoherence time:
where is the pure dephasing time. Note always. For modern superconducting qubits, is usually ~50-80% of ; any extra dephasing beyond the -induced minimum is pure environmental noise.
3. Depolarizing noise
The “generic” single-qubit noise model. With probability , replace the qubit’s state with a maximally mixed state:
Equivalent Kraus decomposition using Pauli operators:
With probability nothing happens; with probability each, an X, Y, or Z error is applied.
Depolarizing noise is a convenient abstraction — real physical noise is usually biased (some Pauli errors much more likely than others) but theoretical analyses and early error-correction demonstrations often assume uniform depolarizing to keep math tractable.
4. Readout (measurement) error
The last-mile error: when you try to read a qubit in state , you sometimes get “1” as the classical outcome, and vice versa. Characterized by a 2×2 confusion matrix:
Ideal ; real hardware has -, -. The asymmetry is physical: qubits usually relax during the measurement itself, so “1 measured as 0” is more common than the reverse.
Readout error is often the single biggest contributor to circuit error on real NISQ hardware — a 3% readout error per qubit means a 5-qubit measurement has error just from the readout step.
Realistic error numbers in 2026
| Quantity | IBM Heron r2 | Quantinuum H2 | IonQ Forte | Google Willow |
|---|---|---|---|---|
| Single-qubit gate error | 2×10⁻⁴ | 3×10⁻⁵ | 2×10⁻⁴ | 1×10⁻³ |
| Two-qubit gate error | 3×10⁻³ | 1×10⁻³ | 4×10⁻⁴ | 4×10⁻³ |
| Readout error | 1.5% | 0.3% | 0.5% | 1% |
| T₁ | 300 µs | 50 s | 60 s | 100 µs |
| T₂ | 200 µs | 10 s | 1 s | 80 µs |
Two-qubit gate error is usually the dominant cost, and everything else you do on the hardware must budget around that number. Quantinuum’s 10⁻³ two-qubit error is the current state of the art on commercial hardware; fault tolerance requires pushing this below ~10⁻³ with surface-code error correction absorbing the rest.
Measuring T₁ yourself (on a simulator)
Simulate a noisy qubit and extract its T₁ from a decay curve:
import numpy as np
import matplotlib.pyplot as plt
from qiskit import QuantumCircuit, transpile
from qiskit.providers.fake_provider import GenericBackendV2
from qiskit.transpiler import CouplingMap
from qiskit_aer import AerSimulator
from qiskit_aer.noise import NoiseModel, thermal_relaxation_error
# Build a synthetic noise model with known T1 and T2
T1 = 200e-6 # 200 µs
T2 = 100e-6 # 100 µs
gate_time = 50e-9
relax = thermal_relaxation_error(T1, T2, gate_time)
idle_relax = lambda t: thermal_relaxation_error(T1, T2, t)
noise_model = NoiseModel()
noise_model.add_all_qubit_quantum_error(relax, ["id"])
# Measure T1: prepare |1⟩, wait t, measure. Fit exponential decay.
delays_us = np.linspace(0, 800, 30)
populations = []
for t_us in delays_us:
qc = QuantumCircuit(1, 1)
qc.x(0)
n_ids = max(1, int(t_us * 1e-6 / gate_time))
for _ in range(n_ids):
qc.id(0)
qc.measure(0, 0)
backend = AerSimulator(noise_model=noise_model)
counts = backend.run(transpile(qc, backend), shots=2048).result().get_counts()
p_one = counts.get("1", 0) / 2048
populations.append(p_one)
populations = np.array(populations)
# Fit a + b·exp(-t/T1) to recover T1
from scipy.optimize import curve_fit
def model(t, T1, c):
return np.exp(-t * 1e-6 / T1) + c
popt, _ = curve_fit(model, delays_us, populations, p0=[150e-6, 0.0])
print(f"Fitted T1 = {popt[0] * 1e6:.1f} µs (injected T1 = {T1 * 1e6:.1f} µs)")
# Fitted T1 = 198.3 µs (injected T1 = 200.0 µs)
The fit recovers the injected to a few percent. On real hardware, drifts from minute to minute by 10-20%, so experiments average over many runs to get stable estimates.
Error budgets
Before running any serious experiment, do an error budget:
- Count one-qubit and two-qubit gates in the transpiled circuit.
- Multiply by the per-gate error from the calibration data.
- Add readout errors for each measured qubit.
- Sum to get the expected total error rate.
- If the total is > 50%, abandon — the signal-to-noise will be too poor for any result.
Example: a 50-CNOT circuit on a 10⁻³ error machine with 1% readout on 5 qubits:
- CNOT errors:
- Readout:
- Expected fidelity: , or 80%. Workable.
Double the circuit to 100 CNOTs: fidelity drops to ~65%. Still workable. 200 CNOTs: ~45% — marginal. 500: ~20% — abandon unless you can exploit error mitigation.
Error mitigation vs error correction
Two different ideas you should not confuse:
Error mitigation is a collection of post-processing techniques that reduce the apparent error in measured expectation values without adding qubits. Examples:
- Zero-noise extrapolation (ZNE): run the circuit at different noise levels and extrapolate to zero noise.
- Probabilistic error cancellation (PEC): run a weighted combination of modified circuits that cancel some error types.
- Readout error mitigation: invert the confusion matrix to correct measurement bit strings.
ZNE and PEC incur an exponential cost in shots to cancel deeper errors, so they work for shallow NISQ circuits but don’t scale.
Error correction (next tutorial) encodes one logical qubit into many physical qubits and detects and fixes errors as they happen, with an exponentially decreasing logical error rate in the number of physical qubits. Scales to arbitrary fault-tolerant computation. Orders of magnitude more expensive in qubit count.
For today’s NISQ workloads, mitigation. For tomorrow’s fault-tolerant workloads, correction. VQE and QAOA use mitigation; Shor requires correction.
Exercises
1. Bloch-sphere evolution under T₁ only
Starting from , where does the Bloch vector end up after a long time under pure T₁ noise ()?
Show answer
T₁ drives the qubit to (north pole of the Bloch sphere, ). Starting from , the -component grows exponentially toward 1 while and both decay. If , , so the component decays at rate — specifically .
2. Kraus verification
Verify that the amplitude damping Kraus operators (defined above with ) satisfy . What state does the channel produce when applied to ?
Show answer
; . Sum = ✓.
Applied to : ; . Sum: — with probability the qubit has relaxed to , else it’s still in .
3. Error budget a circuit
A 4-qubit circuit has 80 CNOTs and 200 single-qubit gates. On IBM Heron r2 (using the numbers above), what’s the expected total gate error? Does readout error dominate or is it a minor add-on?
Show answer
CNOTs: . Single-qubit gates: . Readout: . Total: . Fidelity . CNOTs dominate by far; readout is a meaningful add-on but not the biggest factor.
4. T₁ experiment design
You want to measure on a real qubit to within 10% precision. How many delay points should you sweep? How should you space them? What’s the minimum shot count per point?
Show answer
Space delays logarithmically from to to capture the decay shape well. Maybe 10-15 points. Each point needs enough shots that binomial noise on the probability is small compared to the decay rate you’re trying to measure — 2048-4096 shots typically yields precision per point. Total: 15 × 4096 = ~60,000 shots, which runs in a few minutes on IBM’s free tier.
What you should take away
- Density matrices and Kraus operators are the general language of noisy quantum evolution.
- T₁ (energy relaxation) and T₂ (phase coherence) are the two primary decoherence timescales.
- Amplitude damping + phase damping + depolarization + readout cover the four main noise processes you’ll meet.
- 2026 hardware reality: trapped-ion > superconducting on T₁ / T₂ by 5-6 orders of magnitude; superconducting wins on gate speed.
- Error mitigation fights NISQ noise in post-processing; error correction is the scalable approach that requires exponential qubit overhead.
Next: the surface code and Willow — how to turn 1000 noisy physical qubits into one reliable logical qubit, and why Google’s December 2024 result changed the mood of the entire field.