A code review by a qualified acoustician went through the engine of acmap and noise-barrier-calc property by property, not just the interface. Seven corrections came out of it, and they are not about robustness: they change the results. If you ran either tool before these releases, the numbers you got then are not the numbers you get now.
Versions: acmap v0.6.1, noise-barrier-calc v0.9.3. Both public under the Apache 2.0 licence.
The correction that weighs most: A_bar is not D_z
Both engines computed the receiver level by subtracting both the ground attenuation Agr and the diffraction loss Dz. That is wrong, and the reason is physical before it is normative: a screen that breaks the line of sight breaks the ground-reflected path as well. Adding the two effects counts twice an attenuation that happens once.
ISO 9613-2 §7.4 sets Abar = Dz − Agr for over-the-top diffraction when Agr > 0, so that the net is Dz: the screen replaces the ground effect, it does not add to it.
How much it weighs. In the barrier calculation a screen’s insertion loss was overestimated by exactly Agr, up to about 4.6 dB over absorbing ground at 500 m. In acmap the effect showed up on the acoustic shadows of buildings, which came out deeper than they should by the same amount. On a compliance calculation those are decibels that move a conclusion.
Lateral paths keep Abar = Dz, and the three-path combination of §7.4.4 now works on Abar rather than on raw Dz.
K_met given the wrong distance
In the meteorological correction, d_sr is documented as the screen-to-receiver distance. The application instead passed the total source-to-receiver distance, and did so in all three places where the calculation happens: buildings on the grid, barrier on the grid, manual receivers. The correct distance, d_br, was already computed a few lines above and discarded.
Non-conservative source discretisation
A line or area source is discretised into points, and the power has to be distributed among them so that the sum adds up. It did not.
Line source: each point received the sampling step, whose sum exceeds the real length of the source. The error is small over long stretches — about +0.11 dB over 200 m — and large over short ones, +3 dB over 5 m, that is the case of a short source modelled as a line. The weight is now real length divided by number of points.
Area source: each cell received step², while fixed-step sampling left out the edge band. A 15×15 m area at a 10 m step produced a 100 m² point instead of 225, that is −3.5 dB; and a rectangle smaller than the step produced no point at all — the source was not there. The discretisation function now generates nx·ny uniform cells covering the rectangle exactly, and the weight is real area divided by number of cells.
Source spectra normalised
The spectrum presets (urban traffic, motorway, plant, and so on) are defined as per-band offsets relative to the overall level. Those offsets did not sum to 0 dB in energy, so the total level departed from the Lw that had been set — up to +1.36 dB on the motorway preset in the barrier calculation, about +1.2 dB in acmap — and, worse, changing preset at equal Lw also changed the total source power. A comparison between two scenarios with the same declared power was not comparing the same power.
The spectral shapes are unchanged: they are normalised before use by subtracting the shape total from every band, so the relative differences between bands are identical to before. In acmap the band label in the code comments was also corrected, as it did not match the resolution actually used.
Standards attributions put right
Three documentation entries stated things that were not true, and on a technical tool that is a defect like any other.
- The README and technical note still described ISO 9613-2:1996 as the default method, while the code implements the 2024 edition with lateral diffraction. The third mode is now declared “legacy 1996” and not canonical, because it omits one term of Kmet.
- The Maekawa formula was placed alongside §7.4 of ISO 9613-2: they are two different things. The one implemented is the analytic approximation (Tatge parametrisation) of the 1968 experimental curve, not the screening method of the standard.
- The ground effect was given as “general formula with G factor (§7.3.2)”. It is in fact a simplified broadband model of ours; the standard’s simplified method is defined for A-weighted levels.
What remains as a guard
The 64 frozen numerical values in the repository still pass identically, because they test the diffraction function, which was not touched: the corrections sit upstream and downstream of it. All 23 API symbols the application uses are present. The four corrected properties have a dedicated guard of ten tests in the site repository, where the implementation with unit tests lives.
On the data-acquisition side, acmap v0.6.0 of 24 August had already fixed two defects that bear on the same calculations: buildings mapped as multipolygons were downloaded and silently discarded — 129 relations out of 1365 elements on a real response for central Treviso, close to one building in ten — and the height chain was too short, with a flat 9 m default that on that same bounding box applied to 99.4 % of buildings, including 112 churches and 38 sheds.
If you have earlier results
They need re-running. Corrections 1 and 2 lower the computed attenuation behind a screen, 3 and 4 shift the source level: none of the four is an adjustment below the threshold of relevance. These remain demonstrative tools, with the perimeter declared in their wikis — acmap, noise-barrier-calc — and a document that carries a signature requires surveyed geometry, a model appropriate to the required methodology, and the responsibility of a qualified acoustician.
The tools run in the browser: acoustic map and barrier calculation.