The raw pressure trace at the tailpipe exit does not directly sound like a bang; it must be converted to radiated sound. The Ffowcs Williams–Hawkings (FW‑H) equation [1] provides the exact far‑field pressure generated by a surface with mass and momentum injection.
For a stationary exit plane, neglecting the quadrupole term (valid for exit Mach < 0.9), the radiated pressure at listener distance \(r\) is:
$$ p'(t) = \frac{\rho_0}{4\pi r}\,\dot{Q}\!\left(t - \frac{r}{c_0}\right) \;+\; \frac{1}{4\pi r c_0}\,\dot{F}\!\left(t - \frac{r}{c_0}\right), $$where
The code below computes the source signal for one audio sample. The delay line first writes the current source, then reads the delayed value corresponding to the propagation time.
// Per sample (C# float arithmetic for audio) float Q = massFlow / rho0; float F = (pressure - p_atm) * exitArea; float dQ = (Q - lastQ) * sampleRate; float dF = (F - lastF) * sampleRate; float monopole = (rho0 / (4.0f * MathF.PI * r)) * dQ; float dipole = (1.0f / (4.0f * MathF.PI * r * c0)) * dF; float source = monopole + dipole; int delaySamples = (int)MathF.Round((r / c0) * sampleRate); delayLine.Write(source); float output = delayLine.Read(delaySamples); lastQ = Q; lastF = F;
For moving sources or listeners the distance \(r\) changes continuously; using integer‑sample delays introduces zipper noise. In that case a fractional‑delay interpolation (linear, Lagrange, or Thiran) should replace the simple integer‑read delay line.
The quadrupole term \(\frac{1}{4\pi r c_0^2}\ddot{T}_{ij}\) is small for subsonic exits but can be added as a filtered noise source whose amplitude scales with \(U^8\) (Lighthill’s law [2]) to produce the characteristic jet roar. This is mixed in only when the exit Mach number exceeds ~0.5.