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.
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.
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.
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.