A Doppler Velocity Log (DVL) estimates a vehicle’s velocity relative to the seafloor by measuring the Doppler shift of acoustic pulses reflected off the bottom.

Basic Principle

A DVL emits acoustic beams — typically four, in a Janus configuration — and measures the frequency shift of each return. For a beam with transmitted frequency f0f_0 and measured return frequency frf_r, the Doppler shift gives the along-beam velocity component:

vbeam=c2f0(fr−f0)v_{beam} = \frac{c}{2 f_0} (f_r - f_0)

where cc is the speed of sound in water.

Combining Beams

With four beams arranged symmetrically around the vehicle’s vertical axis, the individual beam velocities are combined into a 3D velocity vector in the vehicle frame:

vvehicle=B+vbeam\mathbf{v}_{vehicle} = \mathbf{B}^{+} \mathbf{v}_{beam}

where B+\mathbf{B}^{+} is the pseudo-inverse of the beam geometry matrix.

Practical Notes

ConditionEffect
Altitude too lowBeam overlap, corrupted return
Altitude too highLoss of bottom lock
Soft or sloped terrainReduced return quality

A simple bottom-lock check in code:

def has_bottom_lock(beam_ranges, min_range=0.5, max_range=100.0):
    return all(min_range < r < max_range for r in beam_ranges)

Summary

DVL velocity is a bottom-relative measurement, not an inertial one. Combined with an IMU and a state estimator, it forms the backbone of most practical underwater dead-reckoning systems.