Resources Numerical accuracy Calculation policy

Sound insulation ratings and the mass law

Works out the single-number airborne and impact sound ratings from sixteen third-octave values, and estimates a plain wall's sound reduction from its mass.

How the precision is kept

The ratings shift a reference curve in whole decibels and compare a sum of deviations with 32.0; the sums and the logarithms are 64-bit. The comparison has no tolerance. The mass law is an empirical formula with the constant 47 dB, and the critical frequency uses a fixed speed of sound of 343 m/s.

Open item. Compare the sum of unfavorable deviations with 32.0 after rounding it to the 0.1 dB the inputs carry, so that binary noise cannot move a rating by 1 dB.

Calculations under this policy

6 calculations in 1 source file. The code is read from the released app when this page loads. It is the calculation people run, not a copy kept for this page.

insul.js BimCraft 0.8.1 64-bit 6 calculations Reviewed

Tests None found by the review

Weighted sound reduction index

64-bit

Rw and the adaptation terms C and Ctr from sixteen third-octave sound reduction values.

highest shift s with Σ max(0, ref + s − R) ≤ 32; Rw = ref₅₀₀ + s; C = round(X_A − Rw)

The 16 deviations are added in band order and compared with 32 with no tolerance, so a sum that is 32.0 on paper but a hair above it in binary, as can happen with values given to 0.1 dB, gives a rating 1 dB lower. C and Ctr are rounded to whole decibels with Math.round.

  • insul.js
  • lines 37 to 44
  • BimCraft 0.8.1
export function airborneRating(Rin) {
  const R = clean(Rin);
  let shift = -Infinity;
  for (let s = -80; s <= 80; s++) if (sumBelow(R, s) <= 32) shift = s; else if (shift > -Infinity) break;
  if (shift === -Infinity) throw new Error('no position of the reference curve fits');
  const Rw = REF_AIRBORNE[AT_500] + shift;
  return { Rw, C: Math.round(adapt(SPECTRUM_1, R) - Rw) || 0, Ctr: Math.round(adapt(SPECTRUM_2, R) - Rw) || 0, shift, sumUnfavourable: sumBelow(R, shift) };
}

Spectrum adaptation sum

64-bit

The A-weighted level difference for a reference spectrum.

X_A = −10 lg Σ 10^((Lⱼ − Rⱼ) ÷ 10)

A sum of 16 powers of ten followed by one logarithm, in 64-bit. The terms are all positive, so nothing cancels.

  • insul.js
  • line 35
  • BimCraft 0.8.1
const adapt = (spec, R) => -10 * Math.log10(spec.reduce((s, lj, i) => s + Math.pow(10, (lj - R[i]) / 10), 0));

Weighted impact sound level

64-bit

Ln,w and the adaptation term CI from sixteen third-octave impact levels.

lowest shift s with Σ max(0, L − (ref + s)) ≤ 32; Ln,w = ref₅₀₀ + s; CI = round(10 lg Σ 10^(L ÷ 10) − 15 − Ln,w)

The same exact comparison with 32 as the airborne rating, searching from +80 dB down. CI sums the energy of the first 15 bands (100 to 2500 Hz) and is rounded to a whole decibel.

  • insul.js
  • lines 46 to 54
  • BimCraft 0.8.1
export function impactRating(Lin) {
  const L = clean(Lin);
  let shift = null;
  for (let s = 80; s >= -80; s--) if (sumAbove(L, s) <= 32) shift = s; else if (shift !== null) break;
  if (shift === null) throw new Error('no position of the reference curve fits');
  const Lnw = REF_IMPACT[AT_500] + shift;
  const sum = 10 * Math.log10(L.slice(0, 15).reduce((s, l) => s + Math.pow(10, l / 10), 0));
  return { Lnw, CI: Math.round(sum - 15 - Lnw), shift, sumUnfavourable: sumAbove(L, shift) };
}

Mass law

64-bit

The sound reduction of a single-leaf wall from its mass per area and the frequency.

R = 20 lg(m × f) − 47

One logarithm and a subtraction. The constant 47 is the empirical field-incidence value; the result is an estimate, not a measured value.

  • insul.js
  • line 56
  • BimCraft 0.8.1
export const massLawR = (m, f) => 20 * Math.log10(m * f) - 47;

Critical frequency

64-bit

The frequency at which a panel's bending wave matches the speed of sound in air.

fc = c² ÷ (2π h) × √(12 ρ (1 − ν²) ÷ E), c = 343

The speed of sound is fixed at 343 m/s, a rounded figure for about 20 °C. The thickness and Young's modulus are divisors and are not checked for zero.

  • insul.js
  • lines 58 to 60
  • BimCraft 0.8.1
export function criticalFrequency({ rho, E, nu = 0.2, h }) {
  return (343 * 343) / (2 * Math.PI * h) * Math.sqrt((12 * rho * (1 - nu * nu)) / E);
}

Mass-law reduction by octave band

64-bit

The mass-law value in the octave bands from 125 to 4000 Hz, up to half the critical frequency.

m = ρ × h; R(f) for f ≤ fc ÷ 2

Bands above fc ÷ 2 are returned as no value instead of an estimate. The mass per area is density × thickness.

  • insul.js
  • lines 72 to 75
  • BimCraft 0.8.1
export function massLawBands({ rho, E, nu = 0.2, h }) {
  const fc = criticalFrequency({ rho, E, nu, h }), m = rho * h;
  return { fc, m, bands: [125, 250, 500, 1000, 2000, 4000].map((f) => ({ f, R: f <= fc / 2 ? massLawR(m, f) : null })) };
}

In detail

Method
Shifting-curve method named in the file's header as ISO 717-1 and ISO 717-2; spectrum adaptation terms from −10 lg Σ 10^((Lⱼ − Rⱼ) ÷ 10); field-incidence mass law R = 20 lg(m f) − 47.
Number types
64-bit numbers; reference curves and spectra are whole-number tables in the file.
Tolerances
None: the sum of unfavorable deviations is compared with 32 exactly. Shifts are tried from −80 to +80 dB in steps of 1 dB.
Limits
The header says the reference curves and spectra were typed in and are to be confirmed by a holder of the standard before a public claim. The mass law is given only up to half the critical frequency; the coincidence dip is not estimated. Material values are described in the file as order-of-magnitude first estimates.

Approach: 64-bit, stated limit

The arithmetic is 64-bit, but the method or the data sets the accuracy: a solver tolerance, a mesh, a step size, a datum shift, a table. The limit is stated where the result is shown.

Every policy that takes this approach