Skip to content

A qubit channel moves points inside the Bloch ball. Dephasing squeezes transverse coordinates, depolarizing noise shrinks all coordinates equally, and amplitude damping also moves the center. This calculation reconstructs each affine map from four input states and checks its action against density-matrix evolution.

Helpful background. The Bloch sphere identifies the coordinates of a qubit state. Simulating quantum channels supplies the Kraus and Choi tests. The self-contained code below uses Python 3 and NumPy.

Bloch coordinates and the sign of the y component

Section titled “Bloch coordinates and the sign of the y component”

Use ρ=(I+r⋅σ)/2\rho=(I+\mathbf r\cdot\boldsymbol\sigma)/2 and Z=diag⁡(1,−1)Z=\operatorname{diag}(1,-1). Thus ∣0⟩|0\rangle is the north pole, and

ρ=12(1+rzrx−iryrx+iry1−rz),rx=2Re⁡ρ01,ry=−2Im⁡ρ01,rz=ρ00−ρ11.\rho=\frac12\begin{pmatrix}1+r_z&r_x-ir_y\\r_x+ir_y&1-r_z\end{pmatrix}, \qquad \begin{aligned} r_x&=2\operatorname{Re}\rho_{01},\\ r_y&=-2\operatorname{Im}\rho_{01},\\ r_z&=\rho_{00}-\rho_{11}. \end{aligned}

The minus sign in ryr_y matters: ρ01=−i/2\rho_{01}=-i/2 belongs to ∣+y⟩|+y\rangle, not ∣−y⟩|-y\rangle. The eigenvalues are (1±∥r∥)/2(1\pm\lVert\mathbf r\rVert)/2, so positivity is equivalent to ∥r∥≤1\lVert\mathbf r\rVert\le1.

A trace-preserving Hermiticity-preserving linear map acts as r′=Mr+c\mathbf r'=M\mathbf r+\mathbf c. To find it, first send I/2I/2 through the map; its output Bloch vector is c\mathbf c. Then send (I+σj)/2(I+\sigma_j)/2 through it and subtract c\mathbf c to obtain column jj of MM.

Let D[L]ρ=LρL†−{L†L,ρ}/2\mathcal D[L]\rho=L\rho L^\dagger-\{L^\dagger L,\rho\}/2. With no Hamiltonian rotation, use

Model Generator Finite-time map
Dephasing (Γϕ/2)D[Z](\Gamma_\phi/2)\mathcal D[Z] M=diag⁡(e−Γϕt,e−Γϕt,1)M=\operatorname{diag}(e^{-\Gamma_\phi t},e^{-\Gamma_\phi t},1), c=0\mathbf c=0
Depolarizing (Γd/4)∑j=x,y,zD[σj](\Gamma_d/4)\sum_{j=x,y,z}\mathcal D[\sigma_j] M=e−ΓdtI3M=e^{-\Gamma_d t}I_3, c=0\mathbf c=0
Damping into ∣0⟩\lvert0\rangle γD[∣0⟩⟨1∣]\gamma\mathcal D[\lvert0\rangle\langle1\rvert] M=diag⁡(1−p,1−p,1−p)M=\operatorname{diag}(\sqrt{1-p},\sqrt{1-p},1-p), c=(0,0,p)\mathbf c=(0,0,p); p=1−e−γtp=1-e^{-\gamma t}

The coefficients in the middle column explain the factors of two in the last column. In particular, damping reduces transverse coherence at half the population-decay rate. Parameters such as pp are dimensionless probabilities; γ\gamma has units of inverse time.

For rates equal to 11 in the chosen time unit, take t=log⁡2t=\log2 and r0=(0.6,0.8,0)\mathbf r_0=(0.6,0.8,0). The expected outputs are (0.3,0.4,0)(0.3,0.4,0), (0.3,0.4,0)(0.3,0.4,0), and (0.6/2,0.8/2,0.5)(0.6/\sqrt2,0.8/\sqrt2,0.5). Dephasing and depolarizing agree on this equatorial input, but differ on a north-pole input. One plotted trajectory cannot distinguish every channel.

import numpy as np
I = np.eye(2, dtype=complex)
X = np.array([[0, 1], [1, 0]], dtype=complex)
Y = np.array([[0, -1j], [1j, 0]])
Z = np.diag([1, -1])
paulis = [X, Y, Z]
def state(r):
return (I + sum(x*S for x, S in zip(r, paulis))) / 2
def bloch(A):
return np.array([np.trace(A @ S).real for S in paulis])
def affine(phi):
c = bloch(phi(I/2))
M = np.column_stack([bloch(phi((I+S)/2))-c for S in paulis])
return M, c
t = np.log(2.0)
lam = np.exp(-t)
p = 1-lam
K0 = np.diag([1, np.sqrt(1-p)])
K1 = np.array([[0, np.sqrt(p)], [0, 0]])
channels = {
'dephasing': lambda A: ((1+lam)*A+(1-lam)*Z@A@Z)/2,
'depolarizing': lambda A: lam*A+(1-lam)*np.trace(A)*I/2,
'damping': lambda A: K0@A@K0.conj().T+K1@A@K1.conj().T,
}
expected = {
'dephasing': (np.diag([lam, lam, 1]), np.zeros(3)),
'depolarizing': (lam*np.eye(3), np.zeros(3)),
'damping': (np.diag([np.sqrt(lam), np.sqrt(lam), lam]),
np.array([0, 0, p])),
}
r0 = np.array([0.6, 0.8, 0.0])
assert np.allclose(bloch(state([0, 1, 0])), [0, 1, 0])
for name, phi in channels.items():
M, c = affine(phi)
assert np.allclose(M, expected[name][0])
assert np.allclose(c, expected[name][1])
out = phi(state(r0))
r = M@r0+c
assert np.allclose(out, state(r))
assert np.linalg.eigvalsh(out).min() >= -1e-12
assert np.linalg.norm(r) <= 1+1e-12
print(name, np.round(r, 6))
# Damping composes by multiplying survival probabilities.
p1, p2 = 0.2, 0.3
combined_p = 1-(1-p1)*(1-p2)
assert np.isclose(combined_p, 0.44)

Reconstructing MM and c\mathbf c from a spanning set checks the entire linear qubit map. Checking that a few states stay inside the ball serves a different purpose: it does not establish complete positivity. For example, M=−0.4I3M=-0.4I_3, c=0\mathbf c=0 maps the whole Bloch ball into itself but has a negative Choi eigenvalue.

Repeat the calculation for times 0,0.25,0.5,1,2,40,0.25,0.5,1,2,4. Plot each coordinate against time before attempting a three-dimensional sphere: this makes decay rates and fixed points easier to read. For damping, the endpoint is (0,0,1)(0,0,1); for depolarizing it is the origin; for dephasing it is (0,0,rz(0))(0,0,r_z(0)).

These finite-time formulas are exact for their stated generators. They have no time-step error. Compare them with a numerical ODE method on solving Lindblad equations, where halving the integration step tests a different source of error. A discrete dephasing channel may have negative λ\lambda, but the purely dissipative semigroup e−Γϕte^{-\Gamma_\phi t} above never does; such a negative factor cannot be fitted by a positive real rate in this model.

Recover the coordinates. Find the Bloch vector of ρ=(3/4−i/4i/41/4)\rho=\bigl(\begin{smallmatrix}3/4&-i/4\\i/4&1/4\end{smallmatrix}\bigr) and its purity.

Solution

r=(0,1/2,1/2)\mathbf r=(0,1/2,1/2) and Tr⁡ρ2=(1+∥r∥2)/2=3/4\operatorname{Tr}\rho^2=(1+\lVert\mathbf r\rVert^2)/2=3/4. This complex example distinguishes the two possible signs of YY.

Distinguish two contractions. What happens to r=(0,0,1)\mathbf r=(0,0,1) at t=log⁡2t=\log2 under dephasing and depolarizing noise with unit rates?

Solution

Dephasing leaves it unchanged. Depolarizing gives (0,0,1/2)(0,0,1/2). Their identical outputs for an equatorial input did not imply identical channels.

Damping composition. Derive the combined damping probability for two successive steps.

Solution

The excited population is multiplied by (1−p1)(1−p2)(1-p_1)(1-p_2), so p12=p1+p2−p1p2p_{12}=p_1+p_2-p_1p_2. The coherence factors also multiply to 1−p12\sqrt{1-p_{12}}. Thus two steps with probabilities 0.20.2 and 0.30.3 give 0.440.44, not 0.50.5.

The depolarizing rate. Show that (Γd/4)∑jD[σj](\Gamma_d/4)\sum_j\mathcal D[\sigma_j] gives r˙=−Γdr\dot{\mathbf r}=-\Gamma_d\mathbf r.

Solution

For a fixed Pauli component σk\sigma_k, the term with j=kj=k vanishes and the two anticommuting Pauli matrices each give D[σj](σk)=−2σk\mathcal D[\sigma_j](\sigma_k)=-2\sigma_k. The sum is −4σk-4\sigma_k, which the prefactor converts to −Γdσk-\Gamma_d\sigma_k.

  • I. Bengtsson and K. Życzkowski, Geometry of Quantum States: An Introduction to Quantum Entanglement, Cambridge University Press (2006).
  • H.-P. Breuer and F. Petruccione, The Theory of Open Quantum Systems, Oxford University Press (2002).
  • M. A. Nielsen and I. L. Chuang, Quantum Computation and Quantum Information, 10th anniversary edition, Cambridge University Press (2010).
  • J. Watrous, The Theory of Quantum Information, Cambridge University Press (2018). Author’s manuscript and errata.