Skip to content

Noise Models ​

Kettle's quantum simulator includes realistic noise modeling based on actual qubit physics. This guide explains how to configure and use different noise models.

Quick Start ​

kettle
-- Use a transmon (superconducting) qubit model
fn main() -> Unit using quantum_simulator(qubit_type = "transmon"), file_io
  q = qubit()
  q <- hadamard
  result = measure(q)
  print(result)
end fn

Available Qubit Types ​

TypeT1T2Gate SpeedBest For
idealInfiniteInfiniteInstantAlgorithm development, debugging
transmon150us100us25ns/300nsIBM-like superconducting qubits
trapped_ionInfinite1s10us/200usIonQ-like trapped ion systems
cat100us50us50nsBiased noise (error correction research)

Physics Background ​

Decoherence Times ​

Quantum states are fragile. They lose information through two main processes:

T1 (Longitudinal Relaxation) - Energy decay

  • The qubit spontaneously decays from |1> to |0>
  • Caused by energy exchange with the environment
  • Like a ball rolling down a hill to its lowest energy state

T2 (Transverse Relaxation) - Phase coherence loss

  • The qubit loses its phase information
  • Superposition states (a|0> + b|1>) "forget" the relative phase between a and b
  • Combines T1 effects and pure dephasing (T_phi)

T_phi (Pure Dephasing) - Phase randomization without energy loss

  • Phase scrambling that doesn't involve energy exchange
  • Relationship: 1/T2 = 1/(2*T1) + 1/T_phi

The T2 <= 2*T1 Constraint ​

This is a fundamental law of quantum mechanics, not a hardware limitation:

  • T2 cannot exceed 2*T1 because amplitude damping (T1) contributes to dephasing
  • When T2 = 2*T1, there is no pure dephasing (the system is "T1-limited")
  • When T2 < 2*T1, pure dephasing adds to the T1 contribution

Kettle validates this constraint and rejects unphysical configurations:

kettle
-- This will cause an error: T2 > 2*T1
fn main() -> Unit using quantum_simulator(qubit_type = "transmon", t1 = 100.0, t2 = 250.0), file_io
  -- Error: Unphysical coherence times
end fn

Decoherence vs Gate Infidelity ​

These are separate error sources:

Decoherence (T1/T2 effects)

  • Happens during gate execution time
  • Longer gates = more decoherence
  • Doesn't depend on which gate you apply

Gate Infidelity

  • Errors in the gate operation itself
  • Control imperfections, calibration errors
  • Depends on the specific gate

For example, a transmon CX gate has:

  • ~300ns execution time -> decoherence during that time
  • ~99.5% fidelity -> 0.5% chance of depolarizing error

Qubit Type Details ​

Ideal (Default) ​

kettle
fn main() -> Unit using quantum_simulator, file_io  -- or qubit_type = "ideal"
  q = qubit()
  q <- hadamard
  print(measure(q))
end fn
  • No noise at all
  • Use for algorithm development and debugging
  • Results are deterministic (given the same random seed)

Transmon (Superconducting) ​

kettle
fn main() -> Unit using quantum_simulator(qubit_type = "transmon"), file_io
  q = qubit()
  q <- hadamard
  print(measure(q))
end fn
  • Based on IBM/Google superconducting qubit specifications
  • Fast single-qubit gates (25ns), moderate two-qubit gates (300ns)
  • T1 = 150us, T2 = 100us
  • Good for: Most algorithms, near-term quantum computing

Trapped Ion ​

kettle
fn main() -> Unit using quantum_simulator(qubit_type = "trapped_ion"), file_io
  q = qubit()
  q <- hadamard
  print(measure(q))
end fn
  • Based on IonQ/Quantinuum specifications
  • Infinite T1 (hyperfine qubits don't spontaneously decay)
  • Very long T2 (~1 second)
  • Slow gates: single-qubit 10us, two-qubit 200us
  • Highest gate fidelities (99.99% single, 99.8% two-qubit)
  • Good for: Deep circuits, high-precision algorithms

Cat Qubit ​

kettle
fn main() -> Unit using quantum_simulator(qubit_type = "cat"), file_io
  q = qubit()
  q <- hadamard
  print(measure(q))
end fn
  • Bosonic encoding in coherent states |+a> and |-a>
  • Biased noise: Phase errors >> bit flip errors
  • For n=4 photons: Z errors are ~3000x more likely than X errors
  • Good for: Error correction research, bias-preserving operations

Custom Parameters ​

Override default values for any qubit type:

kettle
-- Use transmon but with custom coherence times
fn main() -> Unit using quantum_simulator(qubit_type = "transmon", t1 = 200.0, t2 = 150.0), file_io
  -- t1 and t2 are in microseconds
  q = qubit()
  q <- hadamard
  print(measure(q))
end fn

Stochastic Simulation ​

Kettle uses quantum trajectory simulation (stochastic unraveling):

  • Each shot randomly samples error events
  • Results are ensemble averages over many shots
  • This is accurate for shot-based results and fidelity estimates

Limitations:

  • Cannot compute exact density matrix elements
  • Entanglement measures requiring the full density matrix are not available
  • For these, density matrix simulation would be needed (much more expensive)

Tips ​

  1. Start with ideal, then add noise once your algorithm works
  2. Trapped ions are better for deep circuits despite slower gates
  3. Transmons are better for shallow, wide circuits
  4. Cat qubits are specialized - use only if studying biased noise codes
  5. Check T2: If your circuit time > T2, expect significant dephasing

Next Steps ​

  • Qubits - Understanding qubit states
  • Gates - Available quantum operations
  • Backends - Simulator configuration options