Reverse Engineering the CMB
Every other page here runs the cosmology forwards: choose the parameters, compute the curve. This one runs it backwards. Take the Planck measurement, lay a ruler across it, and see how far five numbers read off a graph will carry you — to the densities of matter and of ordinary atoms, to the size of a sound wave frozen 380,000 years after the Big Bang, to the distance light has travelled since, and finally to the expansion rate of the universe today.
Five numbers off a graph
The microwave background is usually presented as a triumph of prediction: feed six parameters to a Boltzmann code and out comes a curve that matches the data to a fraction of a percent. True, and not very illuminating — it tells you the model works without telling you which feature of the data pins down which number.
So run it the other way. Below is the Planck 2018 temperature measurement and nothing else. Lay a comb of evenly spaced teeth across the peaks and slide it until it fits. From the spacing of that comb and the heights of the first three peaks — five numbers, read off a graph — the chain beneath solves for the ordinary matter density, the dark matter density, the size of the sound horizon, the distance to the surface of last scattering, and the present expansion rate of the universe.
It very nearly works. Where it stops working is the interesting part, and the page does not hide it.
the measurement
the chain
where that puts the expansion rate
What each number does
The comb spacing is the acoustic scale. Peaks sit where a sound wave had completed a whole number of half-oscillations when the photons broke free, so they form a harmonic series — the rungs are \(\pi/r_\mathrm{s}\) in wavenumber, projected onto the sky as \(\Delta\ell \approx \pi/\theta_*\). Across the whole model grid that relation holds to about 2%. Measuring the spacing therefore measures \(\theta_*\), the angle the sound horizon subtends, which is the single best-determined quantity in all of cosmology.
Notice that the comb does not line up if you put a tooth at the origin. It needs an offset, and the fitted value is between −0.23 and −0.27 of a tooth spacing. That is the acoustic phase shift — partly the gravitational driving of the oscillator, partly neutrino free-streaming, partly the fact that projecting a three-dimensional wave onto a two-dimensional sky is not a simple relabelling. A box with walls would land on the rungs exactly. The universe misses them by a fifth of a spacing, every time, which is why the spacing is the thing to measure and the position of the first peak alone is not.
The first-to-second peak ratio is the baryon density. Baryons give the photon–baryon fluid inertia, and that displaces the oscillation's zero point downward into the gravitational wells: compressions are deepened, rarefactions are not. Odd-numbered peaks are compressions and even-numbered ones rarefactions, so adding baryons raises peaks 1 and 3 relative to peak 2. Over the range of this grid the ratio runs monotonically from 1.89 to 2.54, which is enough to invert.
The third-to-second ratio is the total matter density. This is the radiation-driving effect: a mode that enters the horizon while radiation still dominates has its potential well decay underneath it, and that decay pumps the oscillation. More matter brings matter–radiation equality earlier, cuts the pumping short, and lowers the later peaks relative to the first. The two ratios respond to the two densities almost orthogonally — the angle between their gradients across the grid is 66 to 90 degrees — so the pair can be untangled rather than merely constrained.
The sound horizon is computed, not measured. Given the two densities, how far sound travelled before decoupling follows from the expansion rate and the sound speed of the fluid, and the grid returns it: about 145 Mpc. This is the one link in the chain that comes from theory rather than from the graph, and it is worth being conscious of, because everything downstream rests on it.
The rest is geometry. A known length \(r_\mathrm{s}\) subtending a measured angle \(\theta_*\) gives a distance, \(D_\mathrm{A} = r_\mathrm{s}/\theta_*\), of about 13.9 Gpc. Demanding that a flat universe containing the inferred amount of matter actually put last scattering at that distance fixes the expansion rate. Nothing in that last step needs a Boltzmann code; it is an integral over the expansion history, done in the page.
Where the ruler runs out
Align the comb carefully by eye and you will land near \(\Delta\ell = 296.4\), which gives \(H_0 = 72.2 \pm 1.2\ \mathrm{km\,s^{-1}\,Mpc^{-1}}\) — four sigma from Planck, and sitting almost exactly on the local distance-ladder value. Press fit the whole curve and the spacing moves to 299.2, the acoustic scale lands on Planck's to four decimal places, and \(H_0\) falls to 68.9 ± 1.2. Two and a half units of \(\ell\) — a hundredth of a tooth spacing — moved the answer across the entire Hubble tension. That gap is not a bug, and it is the most useful thing on this page.
\(H_0\) is roughly five times more sensitive to the acoustic scale than the acoustic scale is to the data. A one-part-in-three-hundred error in the comb spacing — a single unit of \(\ell\), far less than the width of a tooth — moves \(H_0\) by more than one unit. Reading peak positions off a binned, noisy spectrum is good to about a percent; that is a five percent uncertainty on the expansion rate, which is not enough to say anything about the Hubble tension — and, worse, it is a five percent bias, because locating peaks on binned data does not scatter symmetrically. Fitting the whole curve instead of five points gets the acoustic scale to better than a tenth of a percent, and only then does the answer become sharp.
There is a related trap in the peak-finding itself. The Planck points show a seventh maximum out near \(\ell = 2000\), but at the data's own resolution the best fitting model has no seventh peak there — it is noise. Including it drags the fitted spacing by a full percent, which is five percent in \(H_0\). The comb here uses five teeth for that reason. A good deal of practical cosmology consists of this sort of thing.
The uncertainties in the chain are real ones, propagated from Planck's own error bars on the three peak heights. They are what makes the table readable: the baryon density comes out \(0.8\sigma\) from Planck, the matter density \(0.7\sigma\), the sound horizon \(0.4\sigma\). Those are agreements, not discrepancies, even though two of them are off by more than a percent. The matter density is the loosest link, because the third-to-second ratio moves only about three percent across an eight percent change in \(\Omega_\mathrm{m}h^2\), so a one percent reading error becomes three percent in the density.
So the honest summary is that a ruler gets you the densities to a few percent, the sound horizon to about one percent, and — once the acoustic scale is taken from the whole curve rather than from five points — the expansion rate to under two percent. That is enough to see the shape of the answer and not quite enough to settle an argument, which is a fair description of what this measurement was like before the likelihood machinery existed.
Why this is the interesting direction
Run forwards, the CMB is a consistency check. Run backwards, it is a distance measurement — and one that never touches a Cepheid or a supernova. The sound horizon is a ruler of known length laid down at \(z = 1090\), its angular size is measured, and the expansion rate follows. That is the inverse distance ladder, and it is the reason the CMB has anything to say about the Hubble constant at all.
It is also why the disagreement with the local distance ladder is hard to dismiss. The two methods share no rungs. If the CMB value is wrong, the error is most likely in \(r_\mathrm{s}\) — the one computed link — which is why most serious proposals to resolve the tension change the physics before recombination, shrinking the sound horizon rather than touching anything we can see directly.
How this was computed
Sixty-three CAMB models on a grid in the two densities at fixed \(\theta_*\), with the peak positions and height ratios of each one measured on the Planck binning, by exactly the routine the page applies to the data. That matters: locating peaks on 30-wide bins biases the answer by half a percent, and the bias only cancels if model and measurement are treated alike. The grid is inverted by bilinear interpolation; the distance integral and the root-find for \(H_0\) run in the page, with a per-node calibration factor that reconciles the simple flat-\(\Lambda\)CDM integral with CAMB's own distance to better than a tenth of a percent.
Planck 2018 values quoted for comparison: \(\Omega_\mathrm{b}h^2 = 0.02237\), \(\Omega_\mathrm{m}h^2 = 0.1430\), \(100\theta_* = 1.04109\), \(r_* = 144.43\ \mathrm{Mpc}\), \(H_0 = 67.36 \pm 0.54\ \mathrm{km\,s^{-1}\,Mpc^{-1}}\). The local distance-ladder value shown is SH0ES, 73.04 ± 1.04. Data points are the Planck 2018 binned TT spectrum.
Further afield: what sets the CMB peaks, where the driving and the acoustic ladder come from; the CMB power spectrum with all six parameters on sliders; from sky map to power spectrum; the Hubble tension.