You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
watterson: run the Doppler filter in double, it diverges at high sample rates
The fading tap is a 2nd-order Butterworth driven by white noise. As fc/fs
shrinks its poles crowd the unit circle: at 48 kHz with 1 Hz Doppler the ratio
is 2e-5 and the poles sit within ~1e-4 of the circle, where float's ~6e-8 of
relative resolution is enough to place one OUTSIDE it. The filter then diverges
instead of fading, and the "measured signal power" is the blow-up:
fs= 8000 2 paths 1 Hz -> SNR3k -8.37 dB sane
fs=48000 1 path 0 Hz -> SNR3k -8.24 dB sane (no Doppler filter)
fs=48000 2 paths 1 Hz -> SNR3k +65.76 dB diverged
Coefficients and filter state are now double. After the change the same case
reads -6.43 dB, and 8 kHz is unmoved (-8.37 -> -8.32, inside the scatter of a
2 s window of slow fading).
Mercury runs at 8 kHz, which is why this sat unnoticed: 8 kHz is 6x further
from the cliff and stayed marginally stable. It surfaced only when driving a
48 kHz modem through the same channel, and it matters now because wider
bandwidth means higher sample rates -- this model is the instrument behind
every sensitivity number in the project, so it has to hold up above 8 kHz
before any of those numbers can be trusted there.
No behaviour change at 8 kHz: the MFSK AWGN cliff is unchanged (11/20 at
-11.1 dB, 19/20 at -10.1 dB) and the 1 Hz fading point moved 0.20 -> 0.25 FER
over 60 trials, which is 3 frames and a necessarily different RNG sequence.
The test pins two properties and was verified to fail on the old code:
- fading stays finite and in range over 8/16/24/48/96 kHz x 0.1..2 Hz. The
band is wide on purpose; it is there to catch divergence, not pin a value.
- a SINGLE static path is rate-invariant to 0.5 dB (measured: 0.04 dB). That
is the property that lets an 8 kHz result be compared with a 48 kHz one.
Deliberately not two paths -- a delayed copy adds a multipath interference
term that really does vary with rate (~1.5 dB), which would turn this into
a test of interference rather than of the model's rate handling.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
0 commit comments