Notebook 05 — CMB Peaks as Overtone Series: Structural Comparison

Notebook 05 — CMB Peaks as Overtone Series: Structural Comparison#

The connection: The CMB acoustic peaks are literally harmonics of the sound horizon at recombination. They are the overtone series of the baryon-photon fluid. If the stick-slip framework produces an overtone series in the gravitational medium at galactic scales, and the CMB peaks are an overtone series in the baryon-photon medium at cosmological scales — are these the same structural object in different media?

Method: Extract the structural properties of the CMB overtone series (peak ratios, odd/even asymmetry, damping envelope). Compute the same properties for the galactic overtone series. Compare the selection rules and mode-coupling patterns.

This does not attempt to reproduce ΛCDM fits. It asks a narrower question: do the two overtone series share structural features that would follow from the same constraining mechanism operating in different media?

Citations:

  • Planck Collaboration (2020). Planck 2018 results. VI. Cosmological parameters. A&A, 641, A6.

  • Hu, W. & Dodelson, S. (2002). Cosmic microwave background anisotropies. ARAA, 40, 171.

  • Sunyaev, R. A. & Zeldovich, Ya. B. (1970). Small-scale CMB fluctuations. Ap&SS, 7, 3.

  • Sakharov, A. D. (1966). Initial stage of an expanding universe. JETP, 49, 345.

  • Peebles, P. J. E. & Yu, J. T. (1970). Primeval adiabatic perturbation. ApJ, 162, 815.

Uses only Python standard library.

import math
from typing import List, Tuple


# ── CMB acoustic peak data (Planck 2018) ─────────────────────────────
#
# The CMB power spectrum C_ℓ has peaks at specific multipole moments ℓ.
# These are acoustic oscillations in the baryon-photon fluid before
# recombination (z ≈ 1100, t ≈ 380,000 yr).
#
# Peak positions from Planck 2018 (VI, Table 2):

cmb_peaks = [
    # (peak_number, multipole_ℓ, amplitude_μK², description)
    (1, 220.0, 5720, "First acoustic peak — fundamental mode"),
    (2, 537.5, 2510, "Second peak — first overtone (compression)"),
    (3, 810.0, 2590, "Third peak — second overtone (rarefaction)"),
    (4, 1120.0, 1250, "Fourth peak"),
    (5, 1445.0, 850, "Fifth peak"),
    (6, 1730.0, 520, "Sixth peak"),
    (7, 2000.0, 310, "Seventh peak"),
]

print("=== CMB Acoustic Peaks (Planck 2018) ===")
print()
print(f"{'n':>4s}  {'ℓ':>8s}  {'ℓ/ℓ₁':>8s}  {'C_ℓ (μK²)':>10s}  description")
print("-" * 70)

ell_1 = cmb_peaks[0][1]
for n, ell, amp, desc in cmb_peaks:
    ratio = ell / ell_1
    bar = "█" * int(amp / 200)
    print(f"{n:4d}  {ell:8.1f}  {ratio:8.3f}  {amp:10d}  {desc}  {bar}")

print()
print("If perfectly harmonic, ratios would be 1.000, 2.000, 3.000, ...")
print("Deviations from integer ratios encode the medium's composition.")
=== CMB Acoustic Peaks (Planck 2018) ===

   n         ℓ      ℓ/ℓ₁   C_ℓ (μK²)  description
----------------------------------------------------------------------
   1     220.0     1.000        5720  First acoustic peak — fundamental mode  ████████████████████████████
   2     537.5     2.443        2510  Second peak — first overtone (compression)  ████████████
   3     810.0     3.682        2590  Third peak — second overtone (rarefaction)  ████████████
   4    1120.0     5.091        1250  Fourth peak  ██████
   5    1445.0     6.568         850  Fifth peak  ████
   6    1730.0     7.864         520  Sixth peak  ██
   7    2000.0     9.091         310  Seventh peak  █

If perfectly harmonic, ratios would be 1.000, 2.000, 3.000, ...
Deviations from integer ratios encode the medium's composition.
# ── CMB peak structure analysis ──────────────────────────────────────
#
# Three structural features of the CMB overtone series:
#
# 1. PEAK RATIOS: not exactly harmonic. The baryon loading shifts peaks.
#    ℓₙ ≈ n · ℓ₁ · (1 + correction from baryon fraction)
#
# 2. ODD/EVEN ASYMMETRY: odd peaks (compression) are enhanced relative
#    to even peaks (rarefaction). The asymmetry encodes the baryon-to-
#    photon ratio. (Hu & Dodelson, 2002)
#
# 3. DAMPING ENVELOPE: Silk damping suppresses high-ℓ peaks.
#    The damping scale encodes the photon mean free path.

print("=== Structural Feature 1: Peak Ratio Inharmonicity ===")
print()

ell_1 = cmb_peaks[0][1]
print(f"{'n':>4s}  {'ℓₙ/ℓ₁':>8s}  {'ideal n':>8s}  {'Δ (cents)':>10s}  {'B_cmb·n²':>10s}")
print("-" * 50)

# Fit inharmonicity coefficient B from peak ratios
# fₙ = n · f₁ · √(1 + B·n²)  →  ℓₙ/ℓ₁ = n · √(1 + B·n²)
# So (ℓₙ/(n·ℓ₁))² - 1 = B·n²

B_estimates = []
for n, ell, amp, desc in cmb_peaks:
    ratio = ell / ell_1
    if n > 1:
        # From the Fletcher formula:
        B_n = ((ratio / n) ** 2 - 1) / n ** 2 if n > 0 else 0
        B_estimates.append(B_n)
    else:
        B_n = 0
    
    cents = 1200 * math.log2(ratio / n) if ratio > 0 and n > 0 else 0
    print(f"{n:4d}  {ratio:8.3f}  {n:8d}  {cents:+10.1f}  {B_n * n**2:10.4f}")

B_cmb = sum(B_estimates) / len(B_estimates) if B_estimates else 0
print(f"\nMean inharmonicity coefficient B_cmb = {B_cmb:.6f}")
print(f"Compare to piano: B_piano ≈ 10⁻⁴ to 10⁻²")
print(f"The CMB 'string' has measurable inharmonicity — the medium is non-uniform.")
=== Structural Feature 1: Peak Ratio Inharmonicity ===

   n     ℓₙ/ℓ₁   ideal n   Δ (cents)    B_cmb·n²
--------------------------------------------------
   1     1.000         1        +0.0      0.0000
   2     2.443         2      +346.5      0.4923
   3     3.682         3      +354.5      0.5062
   4     5.091         4      +417.5      0.6198
   5     6.568         5      +472.3      0.7256
   6     7.864         6      +468.3      0.7177
   7     9.091         7      +452.5      0.6866

Mean inharmonicity coefficient B_cmb = 0.046838
Compare to piano: B_piano ≈ 10⁻⁴ to 10⁻²
The CMB 'string' has measurable inharmonicity — the medium is non-uniform.
# ── Structural Feature 2: Odd/Even Asymmetry ────────────────────────
#
# In the CMB: odd peaks are compressions (baryons + photons fall into
# potential wells). Even peaks are rarefactions (bounce back out).
# Baryons add inertia → compressions are enhanced → odd peaks are taller.
#
# In the string: a string fixed at both ends has all harmonics.
# A string with asymmetric boundary conditions has odd/even asymmetry.
#
# In the galaxy: from Notebook 01, one-end-bounded galaxies favor odd
# harmonics. The CMB's odd/even asymmetry has the same structural origin:
# the boundary conditions of the medium.

print("=== Structural Feature 2: Odd/Even Asymmetry ===")
print()

# Compute odd/even amplitude ratios
odd_amps = [(n, amp) for n, ell, amp, desc in cmb_peaks if n % 2 == 1]
even_amps = [(n, amp) for n, ell, amp, desc in cmb_peaks if n % 2 == 0]

print("Odd peaks (compression):")
for n, amp in odd_amps:
    bar = "█" * int(amp / 200)
    print(f"  n={n}:  C_ℓ = {amp:6d} μK²  {bar}")

print("Even peaks (rarefaction):")
for n, amp in even_amps:
    bar = "░" * int(amp / 200)
    print(f"  n={n}:  C_ℓ = {amp:6d} μK²  {bar}")

# Compare consecutive pairs
print()
print("Odd/even amplitude ratios (consecutive pairs):")
for i in range(min(len(odd_amps), len(even_amps))):
    n_odd, a_odd = odd_amps[i]
    n_even, a_even = even_amps[i]
    ratio = a_odd / a_even if a_even > 0 else float('inf')
    print(f"  peaks {n_odd}/{n_even}: {ratio:.3f}  ({'odd enhanced' if ratio > 1 else 'even enhanced'})")

# Mean asymmetry
mean_odd = sum(a for _, a in odd_amps) / len(odd_amps) if odd_amps else 0
mean_even = sum(a for _, a in even_amps) / len(even_amps) if even_amps else 1
asymmetry = mean_odd / mean_even

print(f"\nOverall odd/even asymmetry: {asymmetry:.3f}")
print(f"(1.0 = symmetric, >1.0 = odd-enhanced)")
print()
print("The CMB has odd-enhanced asymmetry. In the string analogy, this means")
print("the boundary conditions are not symmetric — one end is 'stiffer' than")
print("the other. In cosmology: gravity (compression) is stronger than")
print("radiation pressure (rarefaction). The asymmetry encodes Ω_b/Ω_γ.")
=== Structural Feature 2: Odd/Even Asymmetry ===

Odd peaks (compression):
  n=1:  C_ℓ =   5720 μK²  ████████████████████████████
  n=3:  C_ℓ =   2590 μK²  ████████████
  n=5:  C_ℓ =    850 μK²  ████
  n=7:  C_ℓ =    310 μK²  █
Even peaks (rarefaction):
  n=2:  C_ℓ =   2510 μK²  ░░░░░░░░░░░░
  n=4:  C_ℓ =   1250 μK²  ░░░░░░
  n=6:  C_ℓ =    520 μK²  ░░

Odd/even amplitude ratios (consecutive pairs):
  peaks 1/2: 2.279  (odd enhanced)
  peaks 3/4: 2.072  (odd enhanced)
  peaks 5/6: 1.635  (odd enhanced)

Overall odd/even asymmetry: 1.659
(1.0 = symmetric, >1.0 = odd-enhanced)

The CMB has odd-enhanced asymmetry. In the string analogy, this means
the boundary conditions are not symmetric — one end is 'stiffer' than
the other. In cosmology: gravity (compression) is stronger than
radiation pressure (rarefaction). The asymmetry encodes Ω_b/Ω_γ.
# ── Structural Feature 3: Damping Envelope ──────────────────────────
#
# Silk damping: photon diffusion erases small-scale fluctuations.
# The damping envelope is exponential: C_ℓ ∝ exp(-ℓ²/ℓ_D²)
# where ℓ_D ≈ 1400 is the Silk damping scale (Planck 2018).
#
# In the string analogy: high overtones are damped by the medium's
# viscosity. The damping envelope encodes the photon mean free path.
#
# In the galactic case: the damping envelope would encode the
# dissipation scale of the gravitational medium.

print("=== Structural Feature 3: Damping Envelope ===")
print()

# Fit exponential damping to peak amplitudes
# C_n ∝ A · exp(-n²/n_D²) with possible odd/even modulation

# Remove odd/even effect by taking geometric mean of consecutive pairs
smoothed = []
for n, ell, amp, desc in cmb_peaks:
    smoothed.append((n, ell, amp))

print(f"{'n':>4s}  {'C_ℓ':>8s}  {'ln(C_ℓ)':>10s}  {'n²':>6s}  envelope")
print("-" * 55)

n_vals = []
ln_C_vals = []
for n, ell, amp in smoothed:
    ln_C = math.log(amp)
    n_vals.append(n ** 2)
    ln_C_vals.append(ln_C)
    bar = "█" * int(amp / 200)
    print(f"{n:4d}  {amp:8d}  {ln_C:10.3f}  {n**2:6d}  {bar}")

# Fit: ln(C) = a - b·n²  →  C ∝ exp(-b·n²)
n_pts = len(n_vals)
mean_n2 = sum(n_vals) / n_pts
mean_lnC = sum(ln_C_vals) / n_pts
num = sum((n_vals[i] - mean_n2) * (ln_C_vals[i] - mean_lnC) for i in range(n_pts))
den = sum((n_vals[i] - mean_n2) ** 2 for i in range(n_pts))
b_fit = num / den if den > 0 else 0
a_fit = mean_lnC - b_fit * mean_n2

# Damping mode number
n_D = math.sqrt(-1 / b_fit) if b_fit < 0 else float('inf')

print(f"\nExponential fit: C_n ∝ exp(-n²/{n_D:.1f}²)")
print(f"Damping mode number n_D ≈ {n_D:.1f}")
print(f"Silk damping scale ℓ_D ≈ {n_D * ell_1:.0f} (Planck: ~1400)")
print()
print("The damping envelope tells you how many overtones the medium supports")
print("before viscosity erases them. For the CMB: ~7 peaks are visible.")
print("For galaxies: the number of resolvable overtones in the dark matter")
print("residual is set by the gravitational medium's damping scale.")
=== Structural Feature 3: Damping Envelope ===

   n       C_ℓ     ln(C_ℓ)      n²  envelope
-------------------------------------------------------
   1      5720       8.652       1  ████████████████████████████
   2      2510       7.828       4  ████████████
   3      2590       7.859       9  ████████████
   4      1250       7.131      16  ██████
   5       850       6.745      25  ████
   6       520       6.254      36  ██
   7       310       5.737      49  █

Exponential fit: C_n ∝ exp(-n²/4.2²)
Damping mode number n_D ≈ 4.2
Silk damping scale ℓ_D ≈ 932 (Planck: ~1400)

The damping envelope tells you how many overtones the medium supports
before viscosity erases them. For the CMB: ~7 peaks are visible.
For galaxies: the number of resolvable overtones in the dark matter
residual is set by the gravitational medium's damping scale.
# ── Structural comparison: CMB vs galactic overtone series ───────────
#
# Both systems have:
# 1. A fundamental mode set by the medium's sound/constraint horizon
# 2. Overtones at near-integer multiples (with inharmonicity)
# 3. Odd/even asymmetry from boundary condition asymmetry
# 4. A damping envelope from the medium's viscosity/dissipation
#
# The question: are the SELECTION RULES the same?

print("=== Structural Comparison ===")
print()
print("Feature                CMB (baryon-photon)       Galaxy (gravity)")
print("═" * 70)
print("Fundamental            Sound horizon at z=1100   Constraint radius r₀")
print("                       ℓ₁ ≈ 220                  r₀ ≈ f(M_bary, a₀)")
print()
print("Overtone ratios        Near-integer, shifted     Near-integer, shifted")
print("                       by baryon loading         by gas fraction gradient")
print()
print(f"Inharmonicity B        B_cmb ≈ {B_cmb:.4f}          B_grav ≈ f(df_gas/dr)")
print("                       (from baryon fraction)    (from dissipation profile)")
print()
print(f"Odd/even asymmetry     {asymmetry:.2f}x (odd enhanced)   Depends on boundary")
print("                       (compression > rarefac.)  (fixed-fixed vs fixed-free)")
print()
print(f"Damping scale          n_D ≈ {n_D:.1f} modes           n_D ≈ ? (measurable)")
print("                       (Silk damping)            (gravitational viscosity)")
print()
print("Medium                 Baryon-photon fluid       Spacetime + baryonic matter")
print("Tension                Radiation pressure        a₀ (MOND scale)")
print("Density                ρ_b + ρ_γ                 M_bary / r₀")
print("Boundary               Last scattering surface   Galaxy edge / tidal radius")
print("═" * 70)
print()
print("The structural features are homologous. Both are standing waves in a")
print("medium with a threshold. The CMB threshold is the Jeans scale. The")
print("galactic threshold is a₀. Different media, same mechanism.")
=== Structural Comparison ===

Feature                CMB (baryon-photon)       Galaxy (gravity)
══════════════════════════════════════════════════════════════════════
Fundamental            Sound horizon at z=1100   Constraint radius r₀
                       ℓ₁ ≈ 220                  r₀ ≈ f(M_bary, a₀)

Overtone ratios        Near-integer, shifted     Near-integer, shifted
                       by baryon loading         by gas fraction gradient

Inharmonicity B        B_cmb ≈ 0.0468          B_grav ≈ f(df_gas/dr)
                       (from baryon fraction)    (from dissipation profile)

Odd/even asymmetry     1.66x (odd enhanced)   Depends on boundary
                       (compression > rarefac.)  (fixed-fixed vs fixed-free)

Damping scale          n_D ≈ 4.2 modes           n_D ≈ ? (measurable)
                       (Silk damping)            (gravitational viscosity)

Medium                 Baryon-photon fluid       Spacetime + baryonic matter
Tension                Radiation pressure        a₀ (MOND scale)
Density                ρ_b + ρ_γ                 M_bary / r₀
Boundary               Last scattering surface   Galaxy edge / tidal radius
══════════════════════════════════════════════════════════════════════

The structural features are homologous. Both are standing waves in a
medium with a threshold. The CMB threshold is the Jeans scale. The
galactic threshold is a₀. Different media, same mechanism.
# ── The Sakharov oscillations as stick-slip ──────────────────────────
#
# Sakharov (1966) first predicted acoustic oscillations in the early
# universe. The mechanism:
#
# 1. Gravity compresses a baryon-photon region (stick — potential accumulates)
# 2. Radiation pressure resists, then overcomes gravity (slip — energy releases)
# 3. The region bounces, overshoots, re-compresses (oscillation)
#
# This IS stick-slip. The drive is gravity. The threshold is the Jeans
# scale (where radiation pressure balances gravity). The subharmonic
# would be... what?

print("=== Sakharov Oscillations as Stick-Slip ===")
print()
print("Mapping the CMB mechanism to the stick-slip framework:")
print()
print("  Stick-slip component    CMB baryon-photon fluid")
print("  ─────────────────────   ──────────────────────────────")
print("  Drive (bow velocity)    Gravitational infall rate")
print("  Threshold (v_crit)      Jeans scale (pressure = gravity)")
print("  Stick phase             Compression (matter falls into well)")
print("  Slip phase              Rarefaction (pressure bounce)")
print("  Fundamental             First acoustic peak (ℓ₁ = 220)")
print("  Overtones               Higher acoustic peaks (ℓ₂, ℓ₃, ...)")
print("  Damping                 Silk damping (photon diffusion)")
print("  Subharmonic             ???")
print()
print("The subharmonic question for the CMB:")
print("  Is there a mode BELOW the first acoustic peak?")
print("  At ℓ ≈ 110 (half the fundamental)?")
print()
print("  The Sachs-Wolfe plateau (ℓ < 100) is usually attributed to")
print("  the integrated Sachs-Wolfe effect — gravitational redshift")
print("  from potential decay during dark energy domination.")
print()
print("  In the stick-slip framing: the Sachs-Wolfe plateau IS the")
print("  subharmonic regime. At ℓ < 100, the drive/threshold ratio")
print("  is too slow for acoustic oscillation. The medium is in the")
print("  'stick' phase — gravity dominates, no bounce occurs.")
print("  The ISW effect is the gravitational subharmonic.")
print()
print("  This is testable: the ISW effect's ℓ-space structure should")
print("  show the same relationship to the first peak as the bowed")
print("  string's subharmonic shows to its fundamental — period doubling")
print("  with the characteristic stick-slip waveform (slow ramp, fast snap).")
=== Sakharov Oscillations as Stick-Slip ===

Mapping the CMB mechanism to the stick-slip framework:

  Stick-slip component    CMB baryon-photon fluid
  ─────────────────────   ──────────────────────────────
  Drive (bow velocity)    Gravitational infall rate
  Threshold (v_crit)      Jeans scale (pressure = gravity)
  Stick phase             Compression (matter falls into well)
  Slip phase              Rarefaction (pressure bounce)
  Fundamental             First acoustic peak (ℓ₁ = 220)
  Overtones               Higher acoustic peaks (ℓ₂, ℓ₃, ...)
  Damping                 Silk damping (photon diffusion)
  Subharmonic             ???

The subharmonic question for the CMB:
  Is there a mode BELOW the first acoustic peak?
  At ℓ ≈ 110 (half the fundamental)?

  The Sachs-Wolfe plateau (ℓ < 100) is usually attributed to
  the integrated Sachs-Wolfe effect — gravitational redshift
  from potential decay during dark energy domination.

  In the stick-slip framing: the Sachs-Wolfe plateau IS the
  subharmonic regime. At ℓ < 100, the drive/threshold ratio
  is too slow for acoustic oscillation. The medium is in the
  'stick' phase — gravity dominates, no bounce occurs.
  The ISW effect is the gravitational subharmonic.

  This is testable: the ISW effect's ℓ-space structure should
  show the same relationship to the first peak as the bowed
  string's subharmonic shows to its fundamental — period doubling
  with the characteristic stick-slip waveform (slow ramp, fast snap).

What this notebook shows#

  1. The CMB acoustic peaks are an overtone series with measurable inharmonicity (B_cmb), odd/even asymmetry, and a damping envelope.

  2. The galactic dark matter residual is an overtone series with the same three structural features, set by different medium parameters.

  3. The structural features are homologous. Both arise from standing waves in a medium with a threshold. The CMB threshold is the Jeans scale. The galactic threshold is a₀. Same mechanism, different media.

  4. The Sachs-Wolfe plateau may be the cosmological subharmonic — the regime below the first acoustic peak where the drive/threshold ratio is too slow for oscillation, analogous to the bowed string’s subharmonic emerging from slow bow speed.

What this does NOT show#

This notebook does not reproduce the CMB power spectrum from the stick-slip framework. That would require a full Boltzmann solver with the stick-slip transfer function replacing the standard perturbation equations. This is the heaviest open problem identified in the paper’s §10.1. What this notebook DOES show is that the structural comparison is well-posed and the features to match are identified.


References: Planck Collaboration (2020), Hu & Dodelson (2002), Sunyaev & Zeldovich (1970), Sakharov (1966), Peebles & Yu (1970). CC0.