Files
FluidSimCpp/improvements.md

274 lines
15 KiB
Markdown

# Sound realism improvement plan
## Goal
Make engine sound emerge from the simulated engine and its surroundings. The 1D
fluid model should provide the coherent pressure and flow behavior; separate
acoustic source and propagation models should represent phenomena the 1D model
cannot resolve. The real-time path should remain affordable, deterministic when
requested, and diagnosable by source.
## Current sound path and limitations
The four-stroke and two-stroke scenarios currently pass intake and exhaust
open-end volume flow to `OutdoorAudio`. It derives a compact monopole pressure
signal from the time derivative of that flow, applies distance and ear delays,
simple image-source reflections, and an approximate late reverb. The engine's
3D scene supplies source/listener positions, but visible geometry does not yet
control detailed acoustic propagation.
This captures coherent engine pulses, but has no direct model for turbulent
noise at valves, throttle plates, sharp area changes, bends, collectors, or pipe
exits. A nonzero flow or a large opening alone is not evidence that an audible
turbulent source should be active. The 1D pipe state is cross-section averaged;
it cannot resolve vortices, transverse velocity, or separated shear layers.
The first-order pipe update also adds numerical damping, which can soften pulses
before they reach the acoustic renderer.
## 1. Separate acoustic sources
Represent and capture each major sound contribution independently before
mixing them:
- **Coherent intake and exhaust pulses:** derive from simulated pressure and
volume-flow waves at ports and mouths.
- **Intake aerodynamic noise:** generate at the throttle, valves, filter,
bends, contractions, and other restrictions when their local operating
conditions and geometry support turbulent flow or separation.
- **Exhaust aerodynamic noise:** generate at exhaust valves, collectors, abrupt
expansions/contractions, and outlets where jets or separated flow are
expected.
- **Combustion events:** retain cycle timing and add afterfire or misfire
sounds only when the combustion/fuel model predicts those events.
- **Mechanical sources:** add valve train, injector, gear, belt, and rotating
imbalance sources as their physical models become available.
Each source should have an independent output/capture channel and enable
control. This makes level and spectral calibration possible without masking
errors by changing unrelated sources.
### Flow-noise source model
Use local flow and feature data to estimate source strength, rather than mapping
area or mass flow directly to noise. Useful inputs include:
- mass or volume flow, density, local velocity, and flow direction;
- upstream/downstream pressure and pressure drop;
- effective opening area and area ratio;
- hydraulic diameter, edge radius/sharpness, bend angle, and expansion ratio;
- gas temperature and viscosity, for Reynolds-number estimates;
- opening motion and rate of change for valves and throttle plates.
Use these inputs to estimate whether the feature creates a jet, separation, or
vortex shedding, and how strongly it is excited. Reynolds number is a useful
regime indicator, not an audible-noise switch. Mean flow alone should not force
a noise source to be audible. A smooth, well-matched passage and an abrupt,
partly closed restriction should produce different results at comparable flow.
For an initial real-time model, use a seeded, band-limited stochastic source
with a smooth operating-point envelope and a short stateful correlation time.
Shape its spectrum and level from local flow power/jet speed, pressure drop,
feature geometry, and a calibrated source model. Avoid unfiltered white noise,
hard on/off thresholds, and arbitrary random pops. Keep stochastic source
generation out of the conserved pipe state in the first implementation; this
avoids changing mass, momentum, or energy merely to create audio.
Treat unsteady separated flow as a modeled source, not a directly measured
quantity in the current 1D cells. Proxies such as rapid changes in flow or
pressure, reversals, and valve motion may modulate the source, but they do not
resolve turbulent fluctuations. For higher-fidelity source data, use transient
3D CFD/LES or measurements at selected features and reduce those results to a
real-time source model.
## 2. Improve pipe and component acoustic coupling
### Diagnose wave loss before changing the model
Build small repeatable interface cases and record pressure on both sides of an
interface:
1. Send a pressure pulse through an equal-area straight connection.
2. Measure reflection and transmission at T/Y junctions.
3. Connect a pipe to a known volume and vary the volume and opening geometry.
4. Repeat at several cell sizes, CFL/time-step settings, and flux schemes.
5. Track incident, reflected, and transmitted wave energy, mass/energy
balance, `limited_fluxes`, and positivity repairs.
If pulse loss decreases with mesh refinement, spatial numerical diffusion is a
major contributor. If loss is concentrated at an interface and does not
converge with refinement, improve the boundary/junction model. Compare with
analytic acoustic impedance/scattering results where applicable and with
measured junction data for realistic geometries.
### Zero-volume pipe junctions
The current ideal N-way junction uses a zero-storage Rusanov star state. Improve
this with a characteristic junction solve that enforces mass and energy
conservation while accounting for each branch's area, orientation, flow
direction, and pressure-wave impedance. Add calibrated geometry-dependent
losses where the junction is not ideal. Validate frequency-dependent reflection
and transmission, not just steady flow or conservation.
### Pipe-to-volume transitions
The current pipe-to-component connection uses an orifice/nozzle boundary and a
shared component pressure/state. Represent the actual entry geometry where it
matters: opening area, contraction/expansion, short profiled transitions, and
calibrated discharge/loss coefficients. A shared volume pressure is appropriate
for a well-mixed compact reservoir, but may be too simple for a collector or
plenum with strong spatial pressure differences. Use resolved pipe sections or
a richer multi-port model where those differences materially affect pulse
transfer.
### Pipe wave resolution
Compare the current first-order Rusanov update with higher-order limited
finite-volume schemes that preserve shocks without excessive damping. Measure
waveform, phase, and spectrum convergence with mesh and timestep refinement.
Retain robust positivity handling and conservation checks. Do not select a
scheme on shock-tube error alone; validate acoustic pulse propagation and
engine-relevant frequencies as well.
## 3. Add acoustic networks between flow ports and listener
Separate the simulated fluid flow network from the acoustic radiation network.
For each source, represent how its sound travels through connected ducts,
plenums, filters, resonators, and mufflers before it radiates. Options include:
- **Transfer matrices / frequency-domain network models:** efficient for
linear acoustic behavior and useful for calibrating duct and chamber
resonances.
- **Digital waveguides / delay-line networks:** suitable for real-time,
time-domain wave travel, reflections, and frequency-dependent losses.
- **Reduced-order component models:** compact state-space filters derived from
measured or higher-detail simulations for complex elements.
Model acoustic reflection, transmission, resonance, and attenuation at
junctions and openings. Include frequency-dependent losses from wall friction,
viscothermal effects, and porous/absorptive parts where data supports them.
Use separate paths for intake and exhaust so changes to one system do not
unintentionally alter the other.
## 4. Use the 3D environment for propagation and radiation
The engine's 3D placement can improve more than stereo panning, provided the
scene contains usable acoustic geometry and materials. Give each source a
position, orientation, size, and frequency-dependent directivity. Relevant
sources include intake mouth, individual or grouped exhaust outlets, engine
surfaces, valve train, and drivetrain.
Use scene geometry for:
- **Directivity:** tailpipe and intake radiation vary with direction and
frequency; source orientation should affect the listener signal.
- **Occlusion and diffraction:** engine parts, chassis, bodywork, and nearby
obstacles can block or bend sound. A simple visibility test is useful only
for the frequencies where geometric acoustics applies.
- **Early reflections:** compute paths from actual ground, walls, vehicle body,
and nearby surfaces, with material-dependent reflection and absorption.
- **Late reverberation:** derive or tune the diffuse tail from the environment
rather than relying only on fixed scene presets.
- **Listener motion:** update source/listener distance, direction, delay, and
Doppler shift consistently; smooth changes without breaking phase/history.
Use a **hybrid propagation model**. Ray tracing is relatively efficient for
high-frequency reflections and occlusion. Low frequencies require wave or modal
methods because they diffract and form strong cavity/vehicle resonances. A
boundary-element, finite-element, or finite-difference time-domain (FDTD) solve
can be run offline for representative geometry, then reduced to filters or
modal data for real-time playback. The visible engine mesh alone is not enough:
acoustic propagation also needs appropriate geometry detail and surface
impedance/absorption data.
## 5. Calibration and validation
Record real intake and exhaust audio at fixed engine speed, load, throttle, and
microphone position. Keep recordings unnormalized and disable automatic gain
for comparisons. Add transient throttle sweeps and lift-off cases after the
steady points.
Compare:
- engine-order peak frequencies, amplitudes, and phase/timing;
- broadband noise level and spectral shape;
- intake/exhaust level balance;
- transient envelope and throttle response;
- changes with listener position and direction;
- reflection/decay behavior in each environment.
Use separate source captures and bypassable acoustic stages to identify where
an error enters. Calibrate source strength first, then duct/network filtering,
then 3D radiation and environment. Avoid compensating for a weak physical
source by boosting reverb or global gain.
## Implementation status and scope
- Every scenario TOML now supplies `[simulation] cells_per_meter`. The desktop
exposes a per-scenario resolution stepper with background mesh rebuild and
engine restart, retaining each selection during the app session. The desktop
calibration/geometry editor has been removed. Uniform and profiled pipe
resolution is controlled by the shared density, preserving geometry/volume.
- Source-separated captures are implemented for intake, both exhaust emitters,
and valve contact, with a separate shared diffuse-tail capture, per-source
metrics, and capture-tool solo controls. Desktop UI controls remain future work.
- Rusanov, HLLE, and HLLC are already selectable for comparison. The V8 uses
finite-volume port-coupled fittings; zero-storage junctions remain a comparison path.
- 3D CFD/LES work is out of scope. Use the 1D model, reduced acoustic source
models, and measurements for this improvement effort.
- Pulse benchmarks are implemented: 408 straight/split, zero-storage junction,
and finite-volume fitting cases across meshes, timesteps, and flux solvers.
See `docs/ACOUSTIC_BENCHMARK.md` for methodology, limitations, and findings.
- Findings: straight-pipe numerical attenuation converges with refinement;
zero-storage junction scattering has additional mesh-independent error;
small finite-volume fittings can require tighter component timesteps.
- A production-selectable `muscl` pipe solver now compares limited second-order
MUSCL-Hancock/HLLC against the original solvers via F3 or `--solver muscl`.
Automatic desktop gain defaults off. Pulse attenuation improves, with original
conservation/robustness checks retained. The sweep now covers 408 cases.
- A nonlinear characteristic zero-storage exhaust junction is available with
`--junctions characteristic`, alongside volume and legacy comparison modes.
It supports unequal areas, branch orientation, automatic flow reversal,
enthalpy/species mixing, and configurable direction-dependent turning losses.
Equal/unequal-area acoustic scattering and 500/1000 Hz phase/gain checks are
included; see `docs/JUNCTION_SOLVER.md` for scope and limitations.
- Next: listen at fixed operating points, check spectra and performance across
engine families, and investigate component coupling timestep stability before
changing acoustic source strength. The new mode remains opt-in for evaluation.
## Suggested implementation order
1. Add source-separated captures and per-source diagnostics.
2. Build pulse reflection/transmission tests for straight connections,
junctions, and pipe-volume boundaries.
3. Determine whether junction loss or first-order pipe diffusion dominates;
improve the responsible model and validate convergence.
4. Add a flow/geometry-driven intake restriction-noise source with deterministic
seeded, band-limited output and a separate capture channel.
5. Add corresponding exhaust valve/collector/outlet sources; model afterfire
only when supported by combustion state.
6. Add an acoustic network (waveguide or reduced-order transfer model) for
intake and exhaust ducts and volumes.
7. Use 3D geometry for source directivity, occlusion, early reflections, and
listener motion; add offline wave-based/acoustic calculations for important
low-frequency resonances as needed.
8. Calibrate against controlled microphone recordings and retain objective
regression measurements alongside listening tests.
## References and further reading
- Li et al., *LES-FEM coupled analysis and experimental research on aerodynamic
noise of the vehicle intake system* (2017):
https://doi.org/10.1016/j.apacoust.2016.09.009
- Ih et al., *Prediction of intake noise of an automotive engine in run-up
condition* (2009): https://doi.org/10.1016/j.apacoust.2008.03.007
- Morel et al., *Modeling of Engine Exhaust Acoustics* (1999):
https://doi.org/10.4271/1999-01-1665
- Parrondo et al., *Noise transmission through duct divisions in air circuits*
(2006), experimental scattering coefficients for duct junctions:
https://www.sciencedirect.com/science/article/abs/pii/S0022460X06002239
- Lang and Mindt, *Entropy-Preserving Coupling Conditions for One-dimensional
Euler Systems at Junctions* (2017): https://arxiv.org/abs/1704.04035
- Hu, Morfey and Sandham, *Sound radiation in turbulent channel flows* (2003):
https://doi.org/10.1017/S002211200200277X