Skip to content

Façade Sound Insulation

Standards: ISO 16283EN 12354ISO 717Key references: Hopkins 2007

A façade is the one element of a building that faces the noise everybody complains about: the road, the railway, the flight path. It is also the element whose insulation gets asked for twice, once predicted and once measured, which is why both halves live on this page. ISO 16283-3 measures the finished envelope, referencing the receiving-room level to the level 2 m in front of the façade under a 45° loudspeaker or under the road traffic itself. EN 12354-3 predicts the same standardized level difference from the sound reduction indices of the wall, the glazing and the air inlet before any of them is installed, and EN 12354-4 turns the envelope round to radiate an indoor source outwards. A closing section puts the measured and the predicted side by side and shows what does, and does not, separate them. The reference curves behind every single number live in Insulation Ratings (ISO 717); the internal partitions of the same building in Field Insulation Measurement (ISO 16283) and Predicting Sound Insulation (EN 12354).

How do I compute the façade sound insulation D2m,nT,w in Python?

Section titled “How do I compute the façade sound insulation D2m,nT,w in Python?”

Pass the level 2 m in front of the façade, the receiving-room level and the receiving-room reverberation time to building.facade_insulation(), then rate its d_2m_nt spectrum with building.weighted_rating(): the façade quantity is airborne, so the ISO 717-1 engine applies unchanged (Annex F). Before the façade exists, building.facade_sound_reduction() predicts the same quantity from the element indices and returns the rating itself; for the EN 12354-3 Annex F example below, fac.d_2m_nt_w is 33 dB.

A façade measurement asks a question an internal partition never does: what is outside, and where is it? There is no source room, so the reference level has to be established in a free field that a reflecting building is standing in, and every quantity on this page inherits the geometry of that choice. ISO 16283-3 resolves it by splitting the method twice over — a global result that describes the whole envelope as built, against an element result that describes one component; and a loudspeaker source that the operator controls, against road traffic that is free but arrives from everywhere. Those two splits give the four combinations of Table 1 (plus railway and aircraft in Annex E), and they are chosen on different grounds, which Choosing and running the method sets out. The quantities themselves follow from the choice: ISO 16283-3 references the receiving-room level to the level 2 m in front of the façade , giving the level difference and, exactly as in the airborne case, its standardized and normalized forms:

with s, m² and (dwellings). When the microphone sits on the test element (surface level ) the element method also yields an apparent sound reduction index, carrying a fixed angle-of-incidence correction: dB for the 45° loudspeaker method, dB for the all-angle road-traffic method:

The façade quantity is airborne, so its single-number rating uses the ISO 717-1 reference curve through weighted_rating unchanged (Annex F).

Neither constant is arbitrary. A microphone fastened on the façade reads incident plus reflected pressure, because the façade is the reflector; the subtraction converts that surface level back to the level of the incident wave alone, and how much has to come off depends on the geometry the sound arrives with. ISO 16283-3 states the assumption behind each in its own definitions: the dB of “is based on the assumption that the sound is incident from one angle only, 45°, and the sound field in the receiving room approximates to a diffuse field” (3.12, Note 3), while the dB of assumes the sound arrives “from all angles” (3.13, Note 2). So the 1.5 dB between the two methods is a statement about the source, not about the wall, and it is why a loudspeaker result is labelled and a traffic result rather than both being called the same thing.

The 2 m of the global method is a compromise of the same kind. Closer in, the microphone reads a pressure dominated by the façade’s own reflection and by whatever detail of the elevation it happens to sit against; much further out, it stops describing this façade and starts describing the street. Two metres is far enough that the direct and reflected paths have settled into a stable sum over most of the range and close enough to stay in the façade’s field — but the standard is candid about the cost, noting under Clause 9.6.1 that “systematic errors will occur at low frequencies due to interference effects”. The practical consequence is the one to carry away: the reference level of a is measured in front of a reflecting surface and is therefore higher than the free field the same source would produce with the building removed, so a and an internal are not the same kind of number even when they are the same size.

Section through a dwelling facade: a loudspeaker on the ground with the 45 degree plus or minus 5 degree incidence line to the centre of an 11.5 square metre test specimen, the slant distance r dimensioned at 5 m for the element method and 7 m for the global method and the perpendicular D beneath it, a microphone fastened flush on the specimen with its 10 mm parallel and 3 mm normal tolerances, and the global microphone 2.0 plus or minus 0.2 m from the facade plane at 1.5 m above the receiving-room floorSection through a dwelling facade: a loudspeaker on the ground with the 45 degree plus or minus 5 degree incidence line to the centre of an 11.5 square metre test specimen, the slant distance r dimensioned at 5 m for the element method and 7 m for the global method and the perpendicular D beneath it, a microphone fastened flush on the specimen with its 10 mm parallel and 3 mm normal tolerances, and the global microphone 2.0 plus or minus 0.2 m from the facade plane at 1.5 m above the receiving-room floor

Choosing and running the method (Clauses 9 and 10)

Section titled “Choosing and running the method (Clauses 9 and 10)”

Global or element. They answer different questions and ISO 16283-3 Table 1 says which is preferred for which. The global methods give (or ) and “quantify the airborne sound insulation of a whole façade or a whole building in a specified situation”; that result “cannot be compared with a sound reduction index obtained in a laboratory”, because it is a property of the building as built. The element methods give or and are the route when the aim is to characterise one component or to compare against laboratory data. Method 1, element loudspeaker, is the preferred way to estimate an element’s apparent index; method 6, global road traffic, is the preferred way to estimate the global insulation of a façade exposed to road traffic.

Loudspeaker or traffic. A loudspeaker is controllable and always admissible; traffic is free and is what the façade actually faces, but it comes with conditions. Traffic varies, so indoor and outdoor levels must be measured simultaneously; the average must include at least 50 vehicle pass-bys; and the receiving-room background must be at least 10 dB below the measured equivalent level, because a background correction normally cannot be applied at all under a varying source (Clause 10.2). The traffic must flow approximately along a straight line within ±60° of the angle of sight from the façade, with deviations up to ±15°, and the elevation angle from the point of closest approach must be under ±40° (Clause 10.3.2). The standard also states the ceiling on the element traffic method plainly: background noise usually limits it to elements or façades with dB (Clause 10.1 NOTE).

Where the loudspeaker goes (Clauses 9.3 and 9.4). Angle of incidence 45° ± 5°, preferably on the ground or as high above it as practice allows, at a slant distance from the source to the centre of the specimen of at least 5 m ( m) for the element method and at least 7 m ( m) for the global method — the larger distance because the global method must illuminate the whole façade evenly, not one element. Choose the position so the level varies as little as possible over the specimen: the directivity requirement is under 5 dB of local variation per band over a surface the size and orientation of the specimen, relaxed to 10 dB (and stated in the report) where one dimension exceeds 5 m. The source spectrum must be steady and continuous, with the one-third-octave levels inside an octave differing by no more than 6 dB at 125 Hz, 5 dB at 250 Hz and 4 dB above; and it must put the receiving-room level at least 6 dB over the background.

Where the microphones go. Element method (Clause 9.5.1): the microphone is fastened directly to the specimen, either with its axis parallel to the surface (centre of the membrane ≤ 10 mm from it) or normal to it (≤ 3 mm), with a hemispherical windscreen, securely fixed so it cannot move — and so that the fixing itself does not change what the specimen transmits. Use 3 to 10 fixed positions, distributed evenly but asymmetrically and never in a regular grid. The count is not chosen up front: begin with , and if any two positions differ by more than dB in any band, add positions, up to 10. A specimen mounted in a recess takes 10 positions outright, and a difference above 10 dB must be stated in the report. Global method (Clauses 9.6.1 and 10.4.1): one microphone m from the plane of the façade, in front of the middle of it, at a height of 1.5 m above the receiving-room floor — or 1 m in front of a balustrade or similar protrusion where one intervenes. A room with more than one outside wall, or a very large one, needs a position on each façade, and a very large façade needs several loudspeaker positions each complying with Clause 9.4 in full.

None of this is checked by the functions below: facade_insulation and facade_sound_reduction energy-average whatever positions they are given (Clause 9.5.1, Formula (7)) and combine loudspeaker positions with Formula (8) if you do it yourself.

import numpy as np
from phonometry import building
# Outdoor level 2 m in front of the façade, receiving-room level and T per
# one-third-octave band; surface_level is the microphone on the test element.
l1_2m = np.full(16, 75.0) # L1,2m outdoors
l2 = np.full(16, 33.0) # receiving-room L2
t2 = np.full(16, 0.5) # receiving-room T (s)
fac = building.facade_insulation(l1_2m, l2, t2, volume=50.0, area=11.5,
surface_level=np.full(16, 78.0), method="loudspeaker")
print(round(float(fac.d_2m[0]), 1)) # 42.0 D2m = L1,2m - L2
print(round(float(fac.d_2m_nt[0]), 1)) # 42.0 (= D2m since T = T0)
print(round(float(fac.d_2m_n[0]), 1)) # 40.0 normalized to A0 = 10 m^2
print(round(float(fac.r_prime[0]), 1)) # 42.1 R'45deg (loudspeaker, -1.5 dB)
# The road-traffic element method carries the -3 dB all-angle correction instead
tr = building.facade_insulation(l1_2m, l2, t2, volume=50.0, area=11.5,
surface_level=np.full(16, 78.0), method="road_traffic")
print(round(float(tr.r_prime[0]), 1)) # 40.6 R'tr,s (traffic, -3 dB)
# The façade quantity is airborne: rate D2m,nT with the ISO 717-1 engine
print(building.weighted_rating(fac.d_2m_nt).rating) # 42 Dls,2m,nT,w
fac.plot() # per-band D2m,nT with D2m, D2m,n and R' overlaid (needs matplotlib)
Field facade insulation of a dwelling under the 45-degree loudspeaker method: the standardized D2m,nT, the raw D2m, the normalized D2m,n and the apparent reduction index R'45 per one-third-octave band, with the Dls,2m,nT,w rating annotatedField facade insulation of a dwelling under the 45-degree loudspeaker method: the standardized D2m,nT, the raw D2m, the normalized D2m,n and the apparent reduction index R'45 per one-third-octave band, with the Dls,2m,nT,w rating annotated

The four façade quantities of one measurement: the raw , its standardized and normalized forms, and the element carrying the −1.5 dB angle-of-incidence correction. The rating box reads the single number obtained by feeding to the ISO 717-1 engine.

Show the code for this figure
import matplotlib.pyplot as plt
import numpy as np
from phonometry import building
# A dwelling façade, 45° loudspeaker method: outdoor level 2 m in front,
# receiving-room level and T per one-third-octave band.
bands = np.array([100, 125, 160, 200, 250, 315, 400, 500,
630, 800, 1000, 1250, 1600, 2000, 2500, 3150], float)
l1_2m = np.array([76.0, 77.0, 78.0, 78.5, 79.0, 79.0, 79.0, 79.0,
78.5, 78.0, 77.5, 77.0, 76.5, 76.0, 75.0, 74.0])
d2m = np.array([24.0, 25.5, 27.0, 28.5, 30.0, 31.5, 33.0, 34.5,
36.0, 37.0, 38.0, 38.5, 39.0, 39.0, 38.5, 38.0])
t2 = np.array([0.65, 0.62, 0.58, 0.55, 0.52, 0.50, 0.49, 0.48,
0.47, 0.46, 0.45, 0.44, 0.43, 0.43, 0.42, 0.42])
fac = building.facade_insulation(l1_2m, l1_2m - d2m, t2, volume=32.0,
area=10.8, surface_level=l1_2m + 3.0,
method="loudspeaker", frequencies=bands)
# One line — D2m,nT with D2m, D2m,n and R' overlaid per band:
fac.plot()
plt.show()
# By hand, from the result's fields:
w = building.weighted_rating(fac.d_2m_nt)
fig, ax = plt.subplots()
ax.semilogx(bands, fac.d_2m_nt, "-s", label="D2m,nT (standardized)")
ax.semilogx(bands, fac.d_2m, "--o", label="D2m")
ax.semilogx(bands, fac.d_2m_n, ":", label="D2m,n (normalized)")
ax.semilogx(bands, fac.r_prime, "-.", label="R'45°")
ax.set_xlabel("Frequency [Hz]")
ax.set_ylabel("Level difference / reduction index [dB]")
ax.set_title(f"Dls,2m,nT,w = {w.rating} dB (C={w.c:+d}; Ctr={w.ctr:+d})")
ax.legend()
plt.show()

surface_level, area and volume are all optional: with only l1_2m, l2 and t2 the function returns d_2m and d_2m_nt; add volume for d_2m_n; add surface_level and area and volume for r_prime. Positions are energy-averaged with the surface-level formula (Clause 9.5.1); band levels are assumed already corrected for background noise.

ParameterTypeUnitsRange / defaultNotes
l1_2m1D or 2D arraydBone/band, or (positions, bands)Level 2 m in front of the façade
l21D or 2D arraydBsame band countReceiving-room levels
t21D arrays> 0, one per bandReceiving-room reverberation time
areafloat, optional> 0, with surface_level, volumeTest-element area (enables )
volumefloat, optional> 0Receiving-room (enables ; required for )
surface_level1D/2D array, optionaldBsame band countSurface level on the element (enables )
methodstr'loudspeaker' (−1.5 dB) / 'road_traffic' (−3 dB)Angle-of-incidence correction of
t0floatsdefault 0.5Reference reverberation time
frequencies1D array, optionalHzBand centres carried on the result for plotting

facade_insulation() returns a FacadeInsulationResult (d_2m, d_2m_nt, d_2m_n or None, r_prime or None, frequencies); feed any 16-band façade quantity to weighted_rating for its ISO 717-1 single number.

ISO 16283-3 field façade report (.report())

Section titled “ISO 16283-3 field façade report (.report())”

FacadeInsulationResult.report(path) writes the one-page ISO 16283-3 field façade test report: the standard-basis line, an optional metadata header, the one-third-octave table beside the measured-versus-shifted-reference curve, the boxed field rating , the engineering-method statement, an optional requirement verdict (a level difference passes at or above it) and a footer. quantity="d_2m_nt" (default) reports the standardized level difference; "d_2m_n" the normalized one; "r_prime" the apparent sound reduction index . verbose=True, metadata, language="es" and the phonometry[report] extra behave exactly as in the fiches above.

fac.report("D2mnTw_facade.pdf") # D2m,nT,w (C; Ctr)
fac.report("Rp45_facade.pdf", quantity="r_prime") # R'45,w (C; Ctr)
Field façade ISO 16283-3 example report (PDF)

One-page field façade sound insulation test report: the metadata header, the one-third-octave D2m,nT table beside the measured-versus-shifted-reference curve, the boxed D2m,nT,w (C; Ctr) field rating, the engineering-method statement and a PASS verdict.

Download the report (PDF)

Field façade fiche (FacadeInsulationResult.report), D2m,nT,w (C; Ctr).

Parts 3 and 4 predict the two directions across the building envelope, both from the same energy summation of the element transmission factors , area-weighted by (a small element or air path enters through its element-normalized level difference with the reference area ):

Part 3: outdoor → indoor. From (Formula 10) follow the loudspeaker- and traffic-referenced indices and , and the primary output, the standardized level difference at 2 m (Formula 13)

with the façade-shape term (Annex C; 0 dB for a flat reflecting façade; facade_shape_level_difference looks it up from the Figure C.2 table for galleries, balconies and terraces, interpolating over the underside absorption ). Single-number ratings reuse EN ISO 717-1 (weighted_rating).

Per-element partial sound reduction indices and the resulting façade apparent reduction R' and standardized level difference D2m,nT for the EN 12354-3 Annex F worked example, the air inlet limiting the low bandsPer-element partial sound reduction indices and the resulting façade apparent reduction R' and standardized level difference D2m,nT for the EN 12354-3 Annex F worked example, the air inlet limiting the low bands

A composite façade is governed by its worst element, and the drawn curves say which one that is band by band: the air inlet, a fraction of a square metre, holds the low bands down while the 6 m² wall is doing nothing to limit the result. The two output curves sit far below every element curve because the composite is an energy sum of transmitted power, not an average of indices.

from phonometry import building
# EN 12354-3 Annex F: an 11.3 m² façade (V = 50 m³, flat so ΔLfs = 0) of a double
# wall, a window, a small skylight and an acoustically-treated air inlet (a Dn,e
# element).
elements = [
building.FacadeElement("wall", area=6.0, r=[41, 46, 52, 58, 64]), # octave 125-2000
building.FacadeElement("window", area=4.5, r=[23, 22, 30, 36, 37]),
building.FacadeElement("skylight", area=0.5, r=[24, 27, 30, 33, 30]),
building.FacadeElement("air inlet", dn_e=[28, 23, 25, 38, 44]), # small element
]
fac = building.facade_sound_reduction(elements, area=11.3, volume=50.0,
frequencies=[125, 250, 500, 1000, 2000], bands="octave")
print(fac.r_tr_s_w, fac.c_tr, fac.d_2m_nt_w) # 31 -3 33 (R'tr,s,w / Ctr / D2m,nT,w)
fac.plot() # per-element partial indices with R' and D2m,nT overlaid (needs matplotlib)
Show the code for this figure
import numpy as np
import matplotlib.pyplot as plt
from phonometry import building
# EN 12354-3 Annex F: an 11.3 m² façade (V = 50 m³, flat so ΔLfs = 0) of a double
# wall, a window, a small skylight and an acoustically-treated air inlet (a Dn,e
# element).
elements = [
building.FacadeElement("wall", area=6.0, r=[41, 46, 52, 58, 64]), # octave 125-2000
building.FacadeElement("window", area=4.5, r=[23, 22, 30, 36, 37]),
building.FacadeElement("skylight", area=0.5, r=[24, 27, 30, 33, 30]),
building.FacadeElement("air inlet", dn_e=[28, 23, 25, 38, 44]), # small element
]
fac = building.facade_sound_reduction(elements, area=11.3, volume=50.0,
frequencies=[125, 250, 500, 1000, 2000], bands="octave")
x = np.arange(5)
fig, ax = plt.subplots(figsize=(9, 5.5))
for name, rp in fac.element_r.items():
ax.plot(x, rp, "--", alpha=0.6, marker=".", label=f"Rp — {name}")
ax.plot(x, fac.r_prime, "k-", lw=2.5, marker="o", label="R′ (façade)")
ax.plot(x, fac.d_2m_nt, lw=2, marker="s", label="D2m,nT")
ax.set_xticks(x); ax.set_xticklabels([125, 250, 500, 1000, 2000])
ax.set_xlabel("Frequency [Hz]"); ax.set_ylabel("Index / level difference [dB]")
ax.set_title("EN 12354-3 façade sound insulation (Annex F)")
ax.legend(ncol=2); ax.grid(alpha=0.4)
fig.tight_layout(); plt.show()

The composite is easier to reason about drawn as areas. The elevation below is a second, simpler façade than the Annex F one above — a 6 m² masonry wall, a 1.5 m² window and its 0.3 m² roller shutter box, chosen so the tiles are legible — not a drawing of the prediction just computed. plot_facade_elements tiles it with every element’s drawn area equal to its real area, and a prediction that retained its elements redraws its own façade with fac.plot_geometry().

To-scale elevation of a composite facade: a hatched 6 m2 masonry wall, a 1.5 m2 window and a narrow 0.3 m2 roller shutter box drawn as tiles of a 3.95 m by 1.97 m facade whose drawn areas equal their real areas, each tile labelled with its area and the overall width and height dimensionedTo-scale elevation of a composite facade: a hatched 6 m2 masonry wall, a 1.5 m2 window and a narrow 0.3 m2 roller shutter box drawn as tiles of a 3.95 m by 1.97 m facade whose drawn areas equal their real areas, each tile labelled with its area and the overall width and height dimensioned

The areas the energy sum weighs, to scale: the window holds a quarter of the wall’s area but each square metre of it transmits a hundred times more, so the small tiles decide .

Show the code for this figure
import matplotlib.pyplot as plt
from phonometry import building
# The prediction's composite drawn as areas: 6 m2 of wall, a 1.5 m2 window
# and its 0.3 m2 roller shutter box.
elements = [
building.FacadeElement("Masonry wall", area=6.0, r=[50.0] * 5),
building.FacadeElement("Window", area=1.5, r=[30.0] * 5),
building.FacadeElement("Roller shutter box", area=0.3, r=[22.0] * 5),
]
building.plot_facade_elements(elements)
plt.show()
# A prediction retains its elements, so it redraws its own elevation:
# fac = building.facade_sound_reduction(elements, area=7.8, volume=50.0)
# fac.plot_geometry()

The façade prediction also writes a one-page prediction report through a report(path) method, the same layout as the airborne and impact prediction fiches. FacadePredictionResult.report() renders the façade-element table (each element’s weighted partial index ) beside the per-element / / plot, the boxed predicted (with and ), the prediction statement and, when a requirement is supplied, a PASS/FAIL verdict (the level difference passes at or above it). verbose=True annexes each element’s share of the transmitted sound energy, which singles out the limiting element (the air inlet here, not the wall). The report needs the ISO 717-1 single-number ratings, so build the result on the 5 octave or 16 one-third-octave bands. The applicable ReportMetadata fields describe the predicted situation: specimen (the façade element set), area (the exposed façade area), the receiving-room receiving_volume, the outdoor/traffic situation in test_room, plus the calculator / laboratory identity fields (client, manufacturer, measurement_standard, laboratory, operator, report_id, test_date), a free-text façade-shape and model summary in notes and the target in requirement. Metadata, language="es" and the phonometry[report] extra behave as in the measurement fiches.

from phonometry import building, ReportMetadata
# EN 12354-3 Annex F facade -> D2m,nT,w = 33 dB (R'tr,s,w = 31, Ctr = -3).
elements = [
building.FacadeElement("Masonry wall", area=6.0, r=[41, 46, 52, 58, 64]),
building.FacadeElement("Glazing", area=4.5, r=[23, 22, 30, 36, 37]),
building.FacadeElement("Roof light", area=0.5, r=[24, 27, 30, 33, 30]),
building.FacadeElement("Air inlet", dn_e=[28, 23, 25, 38, 44]),
]
fac = building.facade_sound_reduction(elements, area=11.3, volume=50.0,
frequencies=[125, 250, 500, 1000, 2000], bands="octave")
fac.report("D2mnT_prediction.pdf", metadata=ReportMetadata(
specimen="Masonry wall + window + roof light + air inlet", area=11.3,
receiving_volume=50.0, requirement=30.0,
notes="Flat facade, ΔLfs = 0 dB (Annex C).")) # D2m,nT,w = 33 dB
Predicted facade EN 12354-3 example report (PDF)

One-page predicted facade sound insulation report (EN 12354-3 Annex F): the metadata header (facade element set, exposed area, receiving-room volume, traffic situation), the facade-element table (each element's weighted partial index Rp,w) beside the per-element partial-index and R' / D2m,nT chart, the boxed predicted D2m,nT,w = 33 dB (with R'tr,s,w = 31 and Ctr = -3), the prediction statement noting the model's ~2 dB standard deviation and a PASS verdict against the 30 dB requirement.

Download the report (PDF)

Predicted facade fiche (FacadePredictionResult.report), D2m,nT,w.

Indoor sound radiated outdoors (EN 12354-4)

Section titled “Indoor sound radiated outdoors (EN 12354-4)”

Part 4: indoor → outdoor. The sound power level radiated by a segment (Formula 2) is with m² and the inside-field diffusivity term (Annex B; −6 dB ideal diffuse, −5 dB average industrial). Openings are elements whose “R” is the silencer insertion loss (a bare opening is 0 dB). The exterior level follows from the simplified Annex E attenuation of a finite radiating side, .

from phonometry import building
# EN 12354-4 Annex G, side 1: a 10×20 m concrete wall segment with a 6×4 m
# industrial door, inside level Lp,in, Cd = -5 dB. The 40 dB cap on R' is an
# Annex G example footnote (field leaks), not part of Formula (2)/(3): pass it
# explicitly to reproduce Annex G; by default no cap is applied.
bands = [63, 125, 250, 500, 1000, 2000, 4000, 8000]
seg = building.radiated_sound_power(
[building.FacadeElement("wall", area=176.0, r=[32, 36, 36, 33, 39, 49, 57, 63]),
building.FacadeElement("door", area=24.0, r=[21, 23, 28, 30, 30, 30, 30, 30])],
lp_in=[70, 74, 76, 72, 70, 67, 62, 57], area=200.0, c_d=-5.0,
r_prime_cap=40.0, octave_bands=bands)
print(round(seg.l_w[0], 1), round(seg.l_w[1], 1)) # 59.8 61.2 (LW at 63/125 Hz)
# The exterior level is computed for a whole SIDE, not for the segment above.
# Annex G Table G.8 sums side 1's three segments to LWA = 62.9 dB(A) over the
# full 10 x 60 m side; Table G.9 then reads the level 5 m in front of its
# centre. (`seg.l_w_dba` is 58.2 dB(A): one segment of that side, not the side.)
a_tot = building.outdoor_attenuation(width=60.0, height=10.0, distance=5.0)
print(round(a_tot, 1), round(building.outdoor_level(62.9, a_tot), 1)) # 26.3 36.6
seg.plot() # radiated LW per octave with the A-weighted LWA line (needs matplotlib)
Radiated sound power level per octave band of the EN 12354-4 Annex G wall segment with an industrial door, with the A-weighted single number drawn as a dashed line across the barsRadiated sound power level per octave band of the EN 12354-4 Annex G wall segment with an industrial door, with the A-weighted single number drawn as a dashed line across the bars

The Annex G side-1 segment: the wall dominates the area but the door’s weaker carries the radiated power, so the octave spectrum stays flat where the wall alone would fall. The dashed line is the A-weighted single number formed from the octave bands.

Show the code for this figure
import matplotlib.pyplot as plt
import numpy as np
from phonometry import building
# EN 12354-4 Annex G, side 1: a 10×20 m concrete wall segment with a 6×4 m
# industrial door, inside level Lp,in, Cd = -5 dB.
bands = [63, 125, 250, 500, 1000, 2000, 4000, 8000]
seg = building.radiated_sound_power(
[building.FacadeElement("wall", area=176.0, r=[32, 36, 36, 33, 39, 49, 57, 63]),
building.FacadeElement("door", area=24.0, r=[21, 23, 28, 30, 30, 30, 30, 30])],
lp_in=[70, 74, 76, 72, 70, 67, 62, 57], area=200.0, c_d=-5.0,
r_prime_cap=40.0, octave_bands=bands)
# One line — LW per octave with the A-weighted LWA line:
seg.plot()
plt.show()
# By hand, from the result's fields:
x = np.arange(len(bands))
fig, ax = plt.subplots()
ax.bar(x, seg.l_w, label="radiated LW per octave")
ax.axhline(seg.l_w_dba, ls="--", color="tab:red",
label=f"LWA = {seg.l_w_dba:.1f} dB(A)")
ax.set_xticks(x, [str(b) for b in bands])
ax.set_xlabel("Frequency [Hz]")
ax.set_ylabel("Radiated sound power level [dB re 1 pW]")
ax.set_title("EN 12354-4 radiated sound power (Annex G)")
ax.legend()
plt.show()

Worked-example note. The 2000 worked examples carry small internal rounding inconsistencies at the higher octave bands (Part 3’s printed disagrees with its own per-element partial indices at 1 k/2 k; Part 4’s rows above 500 Hz disagree with its Table G.2 inputs). The implementation is faithful to the formulas: it reproduces the low bands, every single-number rating and the whole Annex E propagation exactly.

FacadeElement / facade_sound_reduction() / radiated_sound_power() parameters

Section titled “FacadeElement / facade_sound_reduction() / radiated_sound_power() parameters”
ParameterTypeUnitsRange / defaultNotes
FacadeElement.areafloat> 0 for r / insertion_lossElement area (ignored for dn_e)
FacadeElement.r / dn_e / insertion_lossfloat or seqdBgive exactly oneArea element / small-element / opening insertion loss
facade_sound_reduction(area)float> 0Total façade area
facade_sound_reduction(volume)float> 0Receiving-room volume (Formula 13)
facade_sound_reduction(delta_l_fs)floatdBdefault 0Façade-shape term (Annex C; look it up with facade_shape_level_difference)
radiated_sound_power(lp_in)float or seqdBInside level per band
radiated_sound_power(c_d)floatdBdefault -6Diffusivity term (Annex B)
radiated_sound_power(r_prime_cap)floatdBdefault None (off)Optional field cap on , an Annex G example footnote (it uses 40 dB), not part of Formula (2)/(3)
radiated_sound_power(octave_bands)seq of intHzdefault NoneOctave centres matching the bands; enables the A-weighted
facade_sound_reduction(frequencies)seqHzdefault None; length = band countBand centres carried on the result for plotting
facade_sound_reduction(bands)str or None'octave' / 'third-octave' / NoneWhich band set the input is in; None infers it from the count, as on the ratings page
outdoor_attenuation(width, height, distance)floatm> 0Finite radiating side and reception distance (Annex E)
outdoor_level(l_w, attenuation)float or seqdBbroadcast-compatibleExterior from one or more sides (Formula E.1)

facade_sound_reduction() returns a FacadePredictionResult (r_prime, r_45, r_tr_s, d_2m_nt, element_r, and the r_tr_s_w / d_2m_nt_w / c_tr single numbers); radiated_sound_power() a RadiatedPowerResult (l_w, r_prime, l_w_dba). Both expose .plot().

The two halves of this guide describe the same wall from opposite ends of its life: EN 12354-3 before it exists, ISO 16283-3 once it does. They are worth comparing because they end on the same quantity, the standardized level difference at 2 m, and because the geometry term that carries the prediction from an index to a level difference is the measurement’s own normalisation written another way. Start from the measured definition, replace by the apparent index it implies and substitute the Sabine absorption area :

The reverberation time cancels: what survives is the room volume against the façade area. EN 12354-3 Formula (13) writes that same term as , which is the Sabine constant carried as instead of the of the measurement standard. The two therefore differ by a fixed dB in every band, of any room, and by nothing else. (The 2017 revision of the prediction standard harmonised its constant to 0.16, so the gap is specific to the EN 12354-3:2000 edition the module implements.)

That is small enough to check numerically. Take the Annex F façade predicted above, put it in a receiving room of 50 m³ with , and reconstruct the receiving-room level a measurement would have found:

import numpy as np
from phonometry import building
# The Annex F façade predicted above, now "measured" in a receiving room of
# 50 m3 whose reverberation time is exactly T0 = 0.5 s.
elements = [
building.FacadeElement("wall", area=6.0, r=[41, 46, 52, 58, 64]),
building.FacadeElement("window", area=4.5, r=[23, 22, 30, 36, 37]),
building.FacadeElement("skylight", area=0.5, r=[24, 27, 30, 33, 30]),
building.FacadeElement("air inlet", dn_e=[28, 23, 25, 38, 44]),
]
volume, area = 50.0, 11.3
fac = building.facade_sound_reduction(elements, area=area, volume=volume,
frequencies=[125, 250, 500, 1000, 2000], bands="octave")
# What the field measurement would read: A = 0.16 V / T is the Sabine area of
# ISO 16283-3, and R' - 10 lg(S/A) is the level difference it implies.
t2 = np.full(5, 0.5)
l1_2m = np.full(5, 75.0)
l2 = l1_2m - (fac.r_prime - 10 * np.log10(area / (0.16 * volume / t2)))
meas = building.facade_insulation(l1_2m, l2, t2, volume=volume)
print(np.round(meas.d_2m_nt - fac.d_2m_nt, 2)) # [-0.18 -0.18 -0.18 -0.18 -0.18]
print(building.weighted_rating(meas.d_2m_nt).rating, fac.d_2m_nt_w) # 33 33

The two curves run parallel to the second decimal and both rate at dB. Everything that separates a real prediction from a real measurement therefore sits in the inputs, not in the formulas:

  • The element indices. The prediction consumes laboratory values measured with flanking suppressed and with the element mounted as the laboratory mounts it. The built façade adds its perimeter seals, its roller-shutter box, the joint between frame and reveal and whatever the site did to them.
  • The shape term. is 0 dB only for a flat reflecting façade. A balcony, a gallery or a terrace changes the field at the 2 m position, and a measurement takes that change as it is while a prediction has to look it up in Annex C.
  • The source. ISO 16283-3 labels the loudspeaker result precisely because a loudspeaker at 45° is not road traffic; its element index carries a −1.5 dB angle correction where the all-angle traffic method carries −3 dB. EN 12354-3 predicts the traffic-referenced directly and offers for the loudspeaker comparison.
  • The receiving room. The prediction assumes the design volume and a diffuse receiving field. The measurement takes the room furnished, and the diffuse assumption behind weakens exactly in the small rooms and low bands where façade requirements bite.

The practical reading: size the glazing and the air inlets with the prediction, accept the finished façade with the measurement, and do not treat a couple of decibels between the two as an error in either. A prediction built on laboratory indices and a field measurement of the finished envelope each carry an uncertainty of that order on their own; the ISO 12999-1 uncertainty section puts a number on the measurement half. And when the two disagree by much more than that, the per-element share of the transmitted energy in the prediction report is the place to look first: on this façade it is the air inlet, not the wall, that decides the result.

  • Covered

    ISO 16283-3:2016 (the field façade quantities , , , and of the loudspeaker and road-traffic element methods, with the position averaging of Clause 9.5.1 and the Clause 14 test report) via building.facade_insulation; EN 12354-3:2000 (the transmission-factor summation of Formula 10, the and indices, the of Formula 13 and the Annex C façade-shape term) via building.facade_sound_reduction and building.facade_shape_level_difference; and EN 12354-4:2000 (the radiated sound power of Formula 2 with the Annex B diffusivity term, and the Annex E attenuation of a finite radiating side) via building.radiated_sound_power, building.outdoor_attenuation and building.outdoor_level. The single-number ratings reuse the verified ISO 717-1 engine, and both the measurement and the prediction write their one-page fiche through .report().

  • Not covered

    The band levels handed to facade_insulation are assumed already corrected for background noise, and ISO 16283-3’s own procedural requirements — the ones set out under Choosing and running the method — are documented but not checked: nothing verifies the 45° ± 5° incidence, the 5 m / 7 m slant distances, the 3→10 microphone escalation and its recess special case, the 50 pass-bys and the simultaneity of a traffic measurement, or that the method chosen matches the question asked. The low-frequency corner procedure of Clause 7 (the façade counterpart of the ISO 16283-1 procedure, triggered by the same 25 m³ receiving-room threshold) is not implemented either, and neither are the railway and aircraft methods of Annex E. The EN 12354-3 and EN 12354-4 worked examples of the 2000 editions carry small internal rounding inconsistencies at the higher octave bands, noted where they appear: the implementation follows the formulas rather than the printed rows.