All projectsDirectional speaker
Theory
The KZK equation, term by term
The model equation for a directional, nonlinear, lossy sound beam, and the three length scales that tell you which effect wins.
Goals
- Explain the retarded time and the paraxial approximation that turn the Westervelt equation into the KZK equation.
- Identify the diffraction, absorption and nonlinearity terms and the length scale each one sets.
- Compute the Rayleigh length, shock formation distance and absorption length for the department speaker in air.
Why this matters
Berktay’s formula only holds far from the source. Your listener stands one to three metres away, which is close to the Rayleigh distance, so the full picture needs a beam equation. The KZK equation is the standard one, and your simulation in the next step solves it.
The physics
Write the equation in the retarded time , which moves with the wave, and assume the beam is directional (, small angles from the axis). Keeping diffraction, thermoviscous absorption and quadratic nonlinearity to leading order gives
Each term has a length scale. For a source of half-width , frequency and peak pressure :
These are the Rayleigh length, the plane-wave shock formation distance and the absorption length. The Gol’dberg number says whether nonlinearity () or absorption () wins.

Hints
Hint 1Derive the retarded-time step yourself
Substitute into the Westervelt equation and keep only the largest terms. Which second derivative cancels? That cancellation is where the beam becomes “parabolic” and why you can march in .
Hint 2Put air numbers in
Use m/s, kg/m³, and a carrier amplitude around 100 Pa at 60 kHz (the defaults of kzk_sim.py --am). What is ? Compare it with for the speaker and with the ISO 9613-1 absorption length from the first step. Which effect dominates where your listener stands?
Hint 3Know where the model breaks
The paraxial approximation fails close to the source and at wide angles. Look up the usual rule of thumb for how far off axis KZK stays accurate, and mark that on your beam plots.
What past teams did
2026–27 team
The scales above are exactly what derived_scales() in kzk_sim.py computes. Print them for every run, because they tell you whether a strange-looking result is physics or a bad parameter.