Step 15. The data-analysis bones: whitening, matched filters, and what you actually compute

Here’s the nuts-and-bolts workflow the paper prescribes for both channels, with the exact objects you build and why.

Inputs & units you’ll use

You record the fractional frequency series \(y(t)\equiv \ln(\nu_\infty/\nu_r)\) and adopt one-sided PSDs: \(S_y(f)\) in Hz\(^{-1}\) for the clock and \(S_\Phi(\Omega)\) in seconds for lapse noise; Fourier and filter conventions are explicit in the paper.


A) Flux → drift (Lever A): the matched-filter recipe

  1. Whiten the slope. Differentiate and whiten \(\dot y(t)\) using the measured \(S_y(f)\) (one-sided).

  2. Build the template primitive. Form

\[ s(t)=\int^t L(t')\,dt',\quad s(f)=\frac{L(f)}{i\,2\pi f}, \]

so the prediction \(\dot y(t) \approx -\lambda\,L(t)\) is linear in \(\lambda=G/(c^4 r)\).

  1. Estimate & quantify uncertainty. With GLS/whitened matched filter,

\[ \mathrm{Var}(\hat\lambda)=\Big[\,2\!\int_0^\infty \frac{|s(f)|^2}{S_y(f)}\,df\Big]^{-1}. \]

Stacking \(M\) flares increases the integral by \(M\) (hence SNR \(\propto\sqrt{M}\)); two-clock cross-correlation earns another \(\sqrt2\) for uncorrelated noise.

  1. Account for systematics. Linearized nuisances \(r\to r(1+\epsilon_r),\, L\to L(1+\epsilon_L)\) give

\[ \frac{\delta\hat\lambda}{\hat\lambda}\simeq-\epsilon_r-\epsilon_L \quad\Rightarrow\quad \mathrm{Var}_{\rm tot}\!\left(\hat\lambda\right)\approx \mathrm{Var}_{\rm stat}\!+\hat\lambda^2(\sigma_r^2+\sigma_L^2)+\Delta_S, \]

with \(\Delta_S\) from PSD mis-model tests; lab runs are typically dominated by \(r,L\) calibration.

  1. Registered checks. Pre-register band, vetoes, stacking; then execute the four-step “exact analysis recipe” (whiten, build \(s\), estimate \(\lambda\), quote the variance) and require sign-lock, zero-lag, strict \(1/r\) in your pass/fail.

B) Visibility (Lever B): build the filter, integrate the spectrum, publish two bounds

  1. Use the measured timing pattern. Compute

\[ F(\Omega)=\int f_{\rm meas}(t)\,e^{i\Omega t}\,dt , \]

noting that finite rise/fall simply reshapes \(|F(\Omega)|^2\); the matched-filter integral remains valid (no deconvolution needed).

  1. Turn visibility into a bound. Report the filter-weighted integral

\[ -\ln V=\frac{\omega^2}{2}\int_0^\infty \frac{d\Omega}{2\pi}\, S_\Phi(\Omega)\,|F(\Omega)|^2 , \]

and—if you also give a white/low-band approximation—add the Markovian \(S_\Phi(0)\) bound for the same data.

  1. Common filters. For Ramsey/Mach–Zehnder of duration \(T\):

\[ |F(\Omega)|^2=\left(\frac{2\sin(\Omega T/2)}{\Omega}\right)^{\!2}, \]

which sets the sinc² passband used in the integral.

  1. Noise budget disclosure. List gravity-gradient (sub-Hz dominant), stress-tensor (shot/thermal), and vacuum TT contributions; provide a source-off baseline and subtraction.

That’s the full “what you compute” picture; next we can walk through an example run end-to-end.


Glossary (for this step)

Symbol Name Meaning (units) Typical value/example Metaphor
\(y(t)\) Log redshift \(\ln(\nu_\infty/\nu_r)\) (–) Clock output you record “Pitch log”
\(S_y(f)\) Clock PSD One-sided PSD of \(y\) (Hz\(^{-1}\)) Used for whitening \(\dot y\) “Noise map of the dial”
\(\dot y(t)\) Redshift drift Time-slope of \(y\) (s\(^{-1}\)) Cross-correlate with \(L(t)\) “Pitch change rate”
\(s(t)\) Flux primitive \(\int^t\!L(t')dt'\) (J) \(s(f)=L(f)/(i2\pi f)\) “Cumulative push”
\(\lambda\) Gain \(G/(c^4 r)\) (s²·kg\(^{-1}\)·m\(^{-1}\)) Slope in \(\dot y=-\lambda L\) “Gear ratio”
\(\mathrm{Var}(\hat\lambda)\) Estimator variance From \(S_y\) and ( s(f) ^2) Eq. above “Error bar size”
\(f(t)\) Path indicator +1/−1 timing pattern (–) Ramsey/MZ/echo “Which road when”
\(F(\Omega)\) Sequence filter FT of \(f\) (s) sinc² for rectangular “Sieve selecting tones”
\(V\) Visibility Fringe contrast \([0,1]\) (–) Measured per run “Stripe sharpness”
\(S_\Phi(\Omega)\) Lapse PSD One-sided spectrum (s) Bounded via integral “Noise color of time”