Inertial Drift and Schuler Cycle

Inertial Drift and Schuler Cycle#

Real inertial drift is not a clean linear ramp. The horizontal position error of an unaided inertial system is the sum of three components:

\[ e_H(t) = b\, t \;+\; A \cos(\omega t + \phi_0) \;+\; v(t), \]

with

  • a true drift \(b\) (m/s), the long-term slope you actually care about;

  • a Schuler oscillation at \(\omega = 2\pi / T_{\text{Schuler}}\), where \(T_{\text{Schuler}} = 2\pi\sqrt{R_e/g} \approx 84.4\) min;

  • and measurement noise \(v(t)\).

If you fit a linear regression to \(e_H(t)\) to estimate \(b\), the fit’s quality depends sensitively on the test window length. A short window catches the cosine on a non-zero phase and the slope estimate is biased; a window that spans an integer number of Schuler cycles averages the cosine to zero and the slope estimate snaps to truth. This page lets you build that intuition by sweeping the window length interactively while watching both the time series and a drift-vs-window curve that lays out the bias structure across all possible window choices on the same data.

Interactive demo#

Open in full screen

Walkthrough#

The demo opens at the canonical scenario: 1.0 NM/hr true drift, 1000 m Schuler amplitude, 30° phase, 10 m noise, 85-minute test window over a 200-minute total run. Try:

  1. Read the headline metrics. Estimated drift ≈ 1.37 NM/hr, 95% CI roughly [1.35, 1.40], bias from truth ≈ +0.37 NM/hr (≈ 37%). Note that the CI does not contain truth — the deterministic Schuler residual is biasing the estimate even though the noise-driven CI is tight. Confidence interval \(\ne\) accuracy.

  2. Look at the bottom plot — estimated drift vs. test-window length. The orange curve oscillates around the green dashed truth line with period \(T_S/2\), and its amplitude shrinks as the window grows. Vertical dashed lines mark \(T_S\) and \(2T_S\).

  3. Slide the test-window slider. The blue dot tracks along the curve, the time-series fit window shading and best-fit line update live, and the headline metrics update. At \(\approx 168\) min (\(\approx 2 T_S\)), the dot lands on truth and the bias readout turns green. Anywhere between full cycles, the bias is non-zero.

  4. Slide the Schuler phase from 0° to 360°. The drift-vs-window curve reshapes — the bias structure depends on phase. The lesson is that for a fixed test design (fixed window length), some phases give you a clean estimate and others don’t. You can’t pick the phase you start on, so design the window to be robust to all phases — that means an integer number of Schuler cycles.

  5. Toggle “include Schuler component” off. The Schuler cosine vanishes from the time series and the drift-vs-window curve flattens onto truth. The CI band remains, narrowing with longer windows because more samples reduce noise variance. This is what a slope fit “should” look like when only noise is present.

  6. Re-enable Schuler. Click “show drift & Schuler components” in the time series. The drift line (rust dashed) and the Schuler oscillation (purple) overlay the total error. It becomes obvious why a slope fit on a partial window is fooled — the cosine has not had a chance to integrate to zero.

  7. Reseed. The noise realization changes, but the Schuler component and the deterministic drift-vs-window structure stay essentially the same. The bias from truth is dominated by Schuler residual, not by noise.

Key observations#

  • The Schuler period is universal. \(T_S = 2\pi\sqrt{R_e/g} \approx 84.4\) min depends only on Earth’s radius and gravity. Every unaided inertial system on Earth’s surface has it. The mechanism (attitude error → mis-projected gravity → false horizontal acceleration → velocity → position → attitude correction) is closed-loop and self-resonating; the period is the small-signal natural frequency of that loop.

  • Drift tests must span at least one full Schuler cycle. The course rule of thumb is 85 minutes minimum. The drift-vs-window curve makes the reason visible: any window shorter than \(T_S\) leaves significant Schuler residual in the slope estimate.

  • Multiple cycles are better. Two full cycles (170 min) tighten the bias dramatically; three cycles (≈ 253 min) tighten it further. The amplitude of the bias decays roughly as \(1/W\) for \(W \gg T_S\).

  • Noise sets the CI; Schuler sets the bias. Increasing \(\sigma_{noise}\) widens the CI band on the drift-vs-window curve but does not move the central oscillation. Increasing the Schuler amplitude inflates the oscillation but does not widen the CI. The two error sources are orthogonal in their effect on the slope estimate.

  • A tight CI is not an accurate estimate. This is the operationally critical takeaway. The 95% CI here captures noise-driven variability around the OLS slope; it has no idea about the deterministic Schuler component. A flight-test report that shows a tight CI on a partial-cycle window is reporting precision, not accuracy.

This demo is the bridge to Block 9, where the correlation-time and effective-sample-size (\(N_\text{eff}\)) framework gives you defensible drift-slope confidence intervals when the residuals are autocorrelated.

Source#

MATLAB · code/InertialDriftDemo.m