Chapter 53
Doppler and Beat Frequency Flows
Wave Coherence and Optics
Author: Mark Anthony Higgins
© Mark Anthony Higgins 11 October 2025
Revised Date: 23 February 2026
flow "Doppler and Beat Frequency Flows" v1.0
# ---------- PURPOSE ----------
# Models frequency variation and superposition between moving sources and observers.
# The Doppler effect arises from relative motion altering wave phase arrival rate.
# Beat frequency emerges from interference between two close frequencies — a temporal interference pattern.
# IB measures coherence retention in temporal phase alignment.
# IB = 1 → perfect coherence (pure tone or steady shift).
# IB < 1 → partial coherence (phase jitter, modulation blur).
# ---------- PARAMETERS ----------
params:
units: "SI"
f0: positive # source frequency [Hz]
v_wave: positive # propagation speed (sound/light) [m/s]
v_source: real = 0.0 # velocity of source (+ = toward observer)
v_observer: real = 0.0 # velocity of observer (+ = toward source)
IB: 0.0..1.0 = 1.0 # temporal coherence index
Δf: real? # frequency difference between two waves [Hz]
include_beat: bool = false
include_motion: bool = true
λ_decay: nonnegative = 0.0 # damping rate of coherence [s^-1]
dt: positive? # timestep for coherence update [s]
# ---------- STATE ----------
state WaveInteraction:
f_obs: real # observed frequency [Hz]
f_beat: real # beat frequency [Hz]
phase_diff: real # relative phase between waves [rad]
amplitude_envelope: real # modulation amplitude
coherence_loss: real # 1 - IB
signal_state: str # "steady", "modulated", or "diffuse"
# ---------- INVARIANTS ----------
invariants:
# Doppler shift for moving observer and source
if params.include_motion:
WaveInteraction.f_obs = params.f0 * (params.v_wave + params.v_observer) / (params.v_wave - params.v_source)
else:
WaveInteraction.f_obs = params.f0
# Beat frequency (temporal interference)
if params.include_beat and params.Δf is defined:
WaveInteraction.f_beat = abs(params.Δf)
else:
WaveInteraction.f_beat = 0
# Amplitude envelope for beats (two close frequencies)
if params.include_beat:
WaveInteraction.amplitude_envelope = 2 * cos(π * WaveInteraction.f_beat * t)
else:
WaveInteraction.amplitude_envelope = 1
# Phase difference evolution
WaveInteraction.phase_diff = 2π * WaveInteraction.f_beat * t
# Coherence decay law
params.IB = clamp(params.IB - params.λ_decay * (1 - params.IB) * (params.dt or 1), 0, 1)
WaveInteraction.coherence_loss = 1 - params.IB
# Signal classification
if params.IB == 1 and not params.include_beat:
WaveInteraction.signal_state = "steady"
elif params.include_beat and params.IB > 0.5:
WaveInteraction.signal_state = "modulated"
else:
WaveInteraction.signal_state = "diffuse"
# ---------- TRANSFORMS ----------
transforms:
shift_velocity:
comment: "Change source or observer velocity to simulate Doppler shift."
params.v_source += Δv_source
params.v_observer += Δv_observer
introduce_beat:
comment: "Enable temporal interference from two frequencies."
params.include_beat = true
params.Δf = Δf_value
decay_coherence:
comment: "Apply damping to coherence index."
params.IB = clamp(params.IB - 0.01 * (1 - params.IB), 0, 1)
# ---------- MONITORS ----------
monitors:
doppler_consistency:
assert params.v_wave > 0
comment: "Wave speed must be positive for physical Doppler shift."
beat_visibility:
if params.include_beat:
comment: "Beat visibility decreases as IB falls."
coherence_bounds:
assert 0 <= params.IB <= 1
# ---------- SCENES ----------
scenes:
stationary_source:
given params:
f0: 440
v_wave: 343
v_source: 0
v_observer: 0
expect:
WaveInteraction.f_obs = 440
comment: "No motion — observed frequency equals source frequency."
approaching_source:
given params:
f0: 440
v_wave: 343
v_source: 30
v_observer: 0
expect:
WaveInteraction.f_obs > 440
comment: "Approaching source compresses wavefronts — frequency increases."
receding_source:
given params:
f0: 440
v_wave: 343
v_source: -30
expect:
WaveInteraction.f_obs < 440
comment: "Receding source stretches wavefronts — frequency decreases."
beat_superposition:
given params:
f0: 440
Δf: 5
v_wave: 343
include_beat: true
IB: 1.0
expect:
WaveInteraction.signal_state = "modulated"
comment: "Two close frequencies produce amplitude modulation — beats."
coherence_decay:
given params:
f0: 440
Δf: 5
include_beat: true
IB: 0.6
λ_decay: 0.02
dt: 1.0
enable:
- decay_coherence
expect:
WaveInteraction.signal_state = "diffuse"
comment: "Phase instability blurs beat envelope — partial coherence."
# ---------- NOTES ----------
notes:
- **Doppler Shift:**
\[
f' = f_0 \frac{v_\text{wave} + v_\text{observer}}{v_\text{wave} - v_\text{source}}
\]
Describes observed frequency for relative motion between source and observer.
- **Beat Frequency:**
\[
f_\text{beat} = |f_1 - f_2|
\]
Temporal interference pattern resulting from two nearby frequencies.
- **Amplitude Modulation:**
\[
A(t) = 2\cos(\pi f_\text{beat} t)
\]
Governs the envelope oscillation — perceived as loudness variation in sound.
- **Coherence Law:**
\[
\dot{I_B} = -\lambda (1 - I_B)
\]
Models loss of temporal phase alignment due to environmental or systemic damping.
- **Interpretation:**
- Doppler effect = moving boundary altering phase arrival rate.
- Beat pattern = interference in time between close frequencies.
- Both arise from recursive modulation of phase coherence.
- **Visualization:**
- Left: stationary wavefronts and compressed wavefronts for Doppler motion.
- Middle: two sinusoids interfering to form beat envelope.
- Right: blurred modulation envelope as IB < 1 (temporal coherence decay).
Every oscillation is a dialogue between source and observer — a continuous negotiation of phase through motion and time.
When the geometry of that dialogue changes, the rhythm of arrival changes too.
This is the essence of the Doppler effect: not simply a shift in tone, but a reconfiguration of temporal curvature — how phase lines intersect an observer’s frame.
When two nearby frequencies interact, that same process produces a beat pattern — a slower modulation arising from the interference of phase histories.
Both effects emerge from the same structure: recursive phase realignment in time.
When either a source or observer moves relative to a wave, the apparent frequency changes because the spacing between successive wavefronts is altered.
If the source moves toward the observer, each crest arrives sooner; if it moves away, each crest arrives later.
The observed frequency is given by:
\[ f' = f_0 \frac{v_{\text{wave}} - v_{\text{source}}}{v_{\text{wave}} + v_{\text{observer}}} \] ``
This equation describes how the motion of the boundary redefines the effective wavelength in the observer’s frame.
Classically, this is treated as compression or stretching of the wavefronts — but in the coherence framework, it is phase density modulation: the observer experiences a different temporal sampling of the same continuous field.
A moving boundary effectively bends time within the wave’s local geometry — not relativistically, but as a dynamic phase reindexing of coherence.
When two waves of slightly different frequency and overlap, their instantaneous amplitudes combine:
\[ I = I_1 + I_2 + 2\sqrt{I_1 I_2}\cos(\Delta\phi) \]
where
This produces beats — rhythmic rises and falls in intensity at the frequency:
\[ f_{\text{beat}} = |f_1 - f_2| \]
Beats are the temporal analogue of spatial interference fringes.
They arise when phase coherence alternates between alignment and opposition — a periodic constructive/destructive recursion in time.
Where phase alignment persists (), beats are crisp and stable; as coherence drifts, the modulation softens into a blur of amplitude variation.
Both Doppler shift and beat patterns depend on how well phase memory is maintained across cycles.
The coherence law:
\[ \dot{I_B} = -\lambda (1 - I_B) \]
captures how temporal alignment decays through damping, turbulence, or noise.
A high means that each phase crest knows where it came from — the field maintains a consistent rhythm.
As falls, the wave’s memory diffuses: beats lose definition, and Doppler shifts fluctuate.
What was once rhythmic becomes stochastic — the sound or signal loses clarity as coherence dissolves.
The Doppler effect and beat interference are two manifestations of recursive temporal modulation:
In both cases, the system measures how quickly its curvature changes with respect to time.
The observer does not perceive “frequency” as a quantity but as the rhythm of phase intersection — the rate at which coherence crosses the boundary of awareness.
Thus, frequency is not inherent to the wave but emergent from the relationship between field and frame.
Resonance, Doppler, and beats are all points along the same continuum:
when feedback is spatial (standing wave), coherence forms a pattern;
when feedback is temporal (phase modulation), coherence forms a tone.
As damping increases (), phase drift accumulates.
The envelope of beats becomes unstable, and frequency ceases to be sharply defined.
This is not a failure of physics, but the natural relaxation of coherence — energy diffusing across unresolved curvature.
In the limit , the waveform becomes noise: uncorrelated phase events with no persistent rhythm.
The fading of a resonant tone, the blurring of beats, or the instability of Doppler under turbulence all describe the same phenomenon — curvature memory decaying in time.
The Doppler effect and beat patterns are two expressions of time-based coherence flow.
They reveal how motion and superposition sculpt temporal geometry:
In the HST–Flow view:
“Motion bends time through phase density;
interference modulates it through phase recursion.”
Both are self-consistent reflections of the same principle:
waves are coherence structures re-encoding themselves through time.