Skip to content

Sound Power by Pressure Methods

Standards: ISO 3744ISO 3745ISO 3746Key references: Beranek & Mellow 2012

Of the standardised routes to the sound power level , the pressure methods are the ones that need nothing more exotic than a sound level meter: sample the sound pressure on a surface that envelops the source, energy-average it, correct it, and add the surface term. This guide covers the three of them. The enveloping-surface methods of ISO 3744 (engineering grade) and ISO 3746 (survey grade) work in situ, over one or more reflecting planes, and clean the surface level with the background-noise correction and the environmental correction . The precision method of ISO 3745 moves the same idea into a qualified anechoic or hemi-anechoic room, where a fixed microphone array samples the free field directly and the grade-1 corrections are meteorological rather than environmental. The closing section renders the determination as the accredited-style test fiche. Which route fits which job, and the reverberation-room and intensity alternatives, are weighed in Sound Power.

1. Enveloping surface, sound pressure (ISO 3744 / ISO 3746)

Section titled “1. Enveloping surface, sound pressure (ISO 3744 / ISO 3746)”

Place the source on a reflecting plane and imagine a measurement surface of area wrapping it: a hemisphere for a compact source, a box (right parallelepiped) for a large or elongated one. Sample the sound pressure level at an array of microphone positions on that surface, energy-average them, and the sound power follows because a diffuse-enough surface captures all the radiated energy:

The prime marks what the average is taken over: here it is the uncorrected position levels, and and are subtracted from the mean afterwards, so is mean_pressure_level and is surface_pressure_level. Section 2’s ISO 3745 average is built the other way round and the primes are the only warning of it.

Two corrections clean up the surface level. The background-noise correction removes the energy that would have been there with the source switched off, from the margin between source-on and background levels,

and the environmental correction removes the reverberant build-up of the test room from its equivalent absorption area ,

The surface area is a closed form of the geometry: a hemisphere is over one reflecting plane (halved and quartered for two and three planes), and a one-plane box is with , , for measurement distance . ISO 3746 (survey) shares every formula but is coarser: fewer microphone positions, a 3 dB background criterion instead of 6 dB, and validity up to instead of 4 dB.

Neither nor is a free choice, and both are measured from the reference box: the smallest right parallelepiped that just encloses the source, of sides , standing on the reflecting plane (clause 7.1). Its origin is the centre of the box formed with its images in the adjoining planes, and the characteristic source dimension is the distance from to the farthest corner of the reference box:

over one reflecting plane, with un-halved over two planes and both and un-halved over three. That is the the figure below labels, and the standard then bounds the surface with it: the hemisphere radius shall be at least , not less than 1 m and not more than 16 m (clause 7.2.3; 0,5 m is allowed only for small products over a limited frequency range), and the box measurement distance shall be at least 0,25 m and preferably 1 m or more (clause 7.2.4, with a note that m limits the low-frequency range).

Worked on a 1,4 × 0,9 × 1,1 m floor-standing machine: m, so a hemisphere needs m and m². The same machine boxed at m gives m, m, m and m² — a quarter less surface, and a surface that stays inside a normal test hall. That is the usual reason a large or elongated source is boxed rather than domed, and clause 7.2.3 makes it explicit: where the required radius grows so large that the clause 4 environment requirements no longer hold, a hemisphere should not be used at all.

Read backwards, this also bounds the examples on this page. The radius=1.5 below is legitimate for a source of m — a benchtop appliance or a small pump — and not for the 1,4 m machine just worked; the radius=4.0 of the report example in section 3 covers up to 2 m.

Measurement surfaces of ISO 3744: a hemisphere of radius r enveloping a compact source on a reflecting plane, with the ten Annex B microphone positions marked, and a right parallelepiped (box) at measurement distance d around a large sourceMeasurement surfaces of ISO 3744: a hemisphere of radius r enveloping a compact source on a reflecting plane, with the ten Annex B microphone positions marked, and a right parallelepiped (box) at measurement distance d around a large source

The box surface carries its own array, and it is not the Annex B hemisphere array: measurement_positions deliberately raises for a box, because ISO 3744 defines those positions by area subdivision instead (Annex C, normative). Each of the five planes of the measurement surface is considered on its own and divided into equal partial areas whose side does not exceed ; the key positions are then the centre of every partial area plus its corners, excluding the corners that intrude into the reflecting plane, which gives a minimum of nine positions when one partial area covers each plane (clause C.1; ten for a triangular subdivision). The survey method keeps only the partial-area centres. The reference direction of each microphone is normal to its face, except at a corner of the surface, where it points at the origin of the reference box (clause 7.2.2).

Top view and side view of the ISO 3744 parallelepiped measurement surface around a 1.4 by 0.9 by 1.1 metre reference box at a measurement distance of 1 m, giving 2a = 3.4 m, 2b = 2.9 m, c = 2.1 m and S = 36.3 square metres. Each visible face is divided by a dashed line into equal partial areas because the 3.4 m side exceeds the 3d limit, key microphone positions are marked at the partial-area centres and at their corners except those in the reflecting plane, one position carries an arrow normal to its face and one corner position an arrow aimed at the origin O of the reference boxTop view and side view of the ISO 3744 parallelepiped measurement surface around a 1.4 by 0.9 by 1.1 metre reference box at a measurement distance of 1 m, giving 2a = 3.4 m, 2b = 2.9 m, c = 2.1 m and S = 36.3 square metres. Each visible face is divided by a dashed line into equal partial areas because the 3.4 m side exceeds the 3d limit, key microphone positions are marked at the partial-area centres and at their corners except those in the reflecting plane, one position carries an arrow normal to its face and one corner position an arrow aimed at the origin O of the reference box

levels_positions is not any array of decibels: it is the per-position, per-band time-averaged level with the source running in its declared operating mode, taken through a chain the standard specifies. The whole instrumentation system — microphones, cables and the windscreen if one is fitted — shall meet IEC 61672-1 class 1, and the filters IEC 61260 class 1 (clause 5.1). A class 1 IEC 60942 sound calibrator is applied to each microphone before and after each series to check the whole measuring chain, and, with no adjustment in between, the two readings shall differ by no more than 0,5 dB; beyond that the series is discarded, not corrected (clause 5.2). The system’s own compliance is verified in a traceable laboratory at intervals not exceeding two years, the calibrator’s at intervals not exceeding one year. The mechanics of that check are on Calibration.

Each microphone is oriented with its reference direction normal to the measurement surface, and at a corner of a box surface pointing at the origin (clause 7.2.2) — which is why a free-field capsule and a diffuse-field capsule are aimed differently on the same stand.

Each level is time-averaged over a typical period of operation: the interval should be 20 s or longer and shall be at least 10 s, and it has to be stated in the test report (clause 8.2.1). A traversing microphone integrates over an integer number of full traverses, and at least two. The background reading is taken immediately before or immediately after the source reading, at the same positions and over the same interval — so background_levels is a same-day, same-array (NM, NB) measurement, not a spectrum copied from another session, and pairing mismatched readings is the most common way a ends up wrong.

import numpy as np
from phonometry import emission
# Octave-band SPL (dB) at the 10 hemisphere positions of ISO 3744 (Annex B),
# with the source running, plus the background spectrum with it switched off.
freqs = np.array([63, 125, 250, 500, 1000, 2000, 4000, 8000])
base = np.array([70.0, 74.0, 78.0, 80.0, 79.0, 76.0, 72.0, 66.0])
rng = np.random.default_rng(0)
levels = base + rng.normal(0.0, 0.5, size=(10, 8)) # (positions, bands)
background = np.full((10, 8), 55.0)
# ISO 3744 Annex B microphone coordinates on a radius-1.5 m hemisphere.
mic_xyz = emission.measurement_positions("hemisphere", radius=1.5, reflecting_planes=1)
print(mic_xyz.shape) # (10, 3)
res = emission.sound_power_pressure(
levels, "hemisphere", radius=1.5, reflecting_planes=1,
background_levels=background, frequencies=freqs,
room=emission.RoomEnvironment(reverberation_time=0.6, volume=300.0), # -> K2
)
print(round(res.surface_area, 2)) # 14.14 m^2 (= 2*pi*1.5^2)
print(round(float(res.environmental_correction[0]), 2)) # K2 = 2.32 dB
print(round(res.sound_power_level_a, 1)) # LWA = 92.4 dB
print(round(res.uncertainty, 1)) # U = 3.0 dB (2*sigma_R0)
print(np.round(res.sound_power_level, 1)) # per-band LW
res.plot() # sound power level bars per band, LWA in the title (needs matplotlib)
The enveloping-surface sound power level spectrum of the ISO 3744 hemisphere example, one bar per octave band from 63 Hz to 8 kHz peaking near 500 Hz, with the A-weighted total of 92.4 dB(A) in the titleThe enveloping-surface sound power level spectrum of the ISO 3744 hemisphere example, one bar per octave band from 63 Hz to 8 kHz peaking near 500 Hz, with the A-weighted total of 92.4 dB(A) in the title

One bar per band: the energy-averaged surface pressure minus the background () and environmental () corrections plus the surface term gives , and the A-weighted energy sum across bands gives the single-number in the title.

Show the code for this figure
import matplotlib.pyplot as plt
import numpy as np
from phonometry import emission
# Octave-band SPL (dB) at the 10 hemisphere positions of ISO 3744 (Annex B),
# with the source running, plus the background spectrum with it switched off.
freqs = np.array([63, 125, 250, 500, 1000, 2000, 4000, 8000])
base = np.array([70.0, 74.0, 78.0, 80.0, 79.0, 76.0, 72.0, 66.0])
rng = np.random.default_rng(0)
levels = base + rng.normal(0.0, 0.5, size=(10, 8)) # (positions, bands)
background = np.full((10, 8), 55.0)
res = emission.sound_power_pressure(
levels, "hemisphere", radius=1.5, reflecting_planes=1,
background_levels=background, frequencies=freqs,
room=emission.RoomEnvironment(reverberation_time=0.6, volume=300.0), # -> K2
)
# res is the SoundPowerResult computed above. One line:
res.plot()
plt.show()
# By hand: a bar spectrum of LW with the A-weighted total in the title.
freqs = res.frequencies
positions = np.arange(freqs.size)
fig, ax = plt.subplots()
ax.bar(positions, res.sound_power_level, width=0.7, color="#1f77b4")
ax.set_xticks(positions)
ax.set_xticklabels([f"{f:g}" for f in freqs], rotation=45, ha="right")
ax.set_xlabel("Frequency [Hz]")
ax.set_ylabel("Sound power level LW [dB]")
ax.set_title(
f"Enveloping-surface sound power (ISO 3744) "
f"LWA = {res.sound_power_level_a:.1f} dB(A)")
plt.show()

The A-weighted total is combined from the band powers with the ISO 3744 Annex E A-weighting corrections, so it needs frequencies. Passing a RoomEnvironment as room (reverberation_time + volume, or absorption_area, or mean_absorption_coefficient + room_surface) enables ; omit it and the field is treated as free (). If the background margin drops below the grade criterion or exceeds the validity limit, a SoundPowerWarning flags that the levels are upper bounds; the determination still returns.

Both corrections subtract energy from the surface level, so overestimating either one understates the emission. That is why the standards cap them, and why most disputes over an enveloping-surface result trace back to one of these habits:

  • has a cliff, not a slope. At a 15 dB margin the correction is a negligible 0.14 dB; at the 6 dB engineering criterion it is already 1.26 dB, the largest value the grade accepts. Below the criterion the standard does not let the formula run on: is capped and the result is reported as an upper bound. Never extrapolate the subtraction into a smaller margin; raise the margin (quieter site, closer surface) or switch to the intensity method.
  • assumes a stationary background. The source-off reading must be taken at the same positions with the room in the same state, and the background energy must be the same during both readings. A ventilation system that cycles or a vehicle passing during either reading invalidates the pair; the energy subtraction also assumes source and background are incoherent, which holds for unrelated noise but not for the source’s own reflections.
  • removes the average room build-up, not discrete reflections. A nearby wall, a trolley or another machine just outside the surface adds a specular contribution concentrated at a few microphones. That imbalance shows up in the apparent directivity index , and no room-average correction can remove it: move the surface, remove the reflector or treat it with absorption.
  • is only as good as . With from Sabine (), errors in the reverberation time or the volume propagate directly. At the validity limit about 60 % of the measured energy is room, not source, and a 20 % error in still moves by about 0.5 dB. Prefer a measured over a guessed absorption coefficient, and keep the measurement distance small enough that stays well under the limit.
Two panels. Left: the background correction K1 against the source-to-background margin, falling steeply from 1.26 dB at the 6 dB engineering criterion through 0.46 dB at 10 dB to 0.14 dB at 15 dB, with the region below 6 dB shaded and labelled as capped and the ISO 3746 3 dB criterion marked. Right: the environmental correction K2 against 4S/A on a logarithmic axis, with the ISO 3744 4 dB and ISO 3746 7 dB validity limits drawn and annotated with the 60 % and 80 % of the measured energy that is room rather than source, and a band showing the shift when the absorption area A is known only to plus or minus 20 per centTwo panels. Left: the background correction K1 against the source-to-background margin, falling steeply from 1.26 dB at the 6 dB engineering criterion through 0.46 dB at 10 dB to 0.14 dB at 15 dB, with the region below 6 dB shaded and labelled as capped and the ISO 3746 3 dB criterion marked. Right: the environmental correction K2 against 4S/A on a logarithmic axis, with the ISO 3744 4 dB and ISO 3746 7 dB validity limits drawn and annotated with the 60 % and 80 % of the measured energy that is room rather than source, and a band showing the shift when the absorption area A is known only to plus or minus 20 per cent

The two corrections have opposite shapes. is flat until the margin closes and then rises steeply, which is why the standards cap it at the criterion rather than let the formula run on; grows without bound as the surface fills the room, and the ±20 % band shows what an estimated costs at the validity limit.

Show the code for this figure
import matplotlib.pyplot as plt
import numpy as np
# K1 is read out of sound_power_pressure itself, by sweeping the background
# under a fixed surface level; K2 is its own closed form.
margins = np.linspace(0.5, 20.0, 200)
k1 = [float(emission.sound_power_pressure(
np.full((10, 1), 80.0), "hemisphere", radius=2.0,
background_levels=np.full((10, 1), 80.0 - m),
frequencies=np.array([1000.0])).background_correction[0])
for m in margins]
ratio = np.geomspace(0.05, 10.0, 200)
fig, (axl, axr) = plt.subplots(1, 2, figsize=(12, 5))
axl.plot(margins, k1)
axl.axvline(6.0, linestyle="--") # ISO 3744 criterion
axl.set(xlabel="ΔLp [dB]", ylabel="K1 [dB]", ylim=(0, 4.2))
axr.semilogx(ratio, 10.0 * np.log10(1.0 + ratio))
axr.axhline(4.0, linestyle="--") # ISO 3744 validity limit
axr.set(xlabel="4S/A", ylabel="K2 [dB]")
plt.show()

One correction the enveloping-surface formula does not carry is meteorological. Eq. 18 assumes the reference characteristic impedance of air, so the determination is a determination “for the meteorological conditions at the time and place of the test” (clause 8.2.5). At altitudes above 500 m or temperatures below 10 °C that becomes a bias, and clause 8.2.5 then requires the result to be carried to reference conditions per Annex G, which is normative — the same kind of term the ISO 3741 and ISO 3745 sections write out explicitly as and . The size of it: clause H.4.2.7 states that below 500 m no meteorological or radiation-impedance correction is required, that at 120 m and 23 °C the correction is zero, and that at 500 m it reaches 0,6 dB. sound_power_pressure implements no such term and takes no temperature or pressure argument at all, so a determination at a mountain plant or outdoors in winter needs the Annex G correction applied by hand.

ParameterTypeUnitsRange / defaultNotes
levels_positions2D arraydB(NM, NB)One row per position, one column per band (or a single A-weighted column)
surfacestr'hemisphere' / 'box'Measurement-surface shape
radiusfloatm> 0 (hemisphere)Hemisphere radius
dimensions(float, float, float)m> 0 (box)Reference-box
distancefloatm> 0 (box)Measurement distance
reflecting_planesint1 / 2 / 3, default 1Halves/quarters the hemisphere area
background_levels2D array or spectrumdB(NM, NB), or (NB,) / (1, NB)Enables ; a single spectrum broadcasts to every position
frequencies1D arrayHznominal band centresEnables (Annex E)
roomRoomEnvironment or Nonedefault None (free field)The room data behind ; its fields are the three routes to below
room.absorption_areafloat or 1D array> 0 for (direct); per-band array → per-band
room.reverberation_time, room.volumefloat/array, floats, m³> 0 for ; per-band → per-band
room.mean_absorption_coefficient, room.room_surfacefloat/array, float—, m²(0,1], > 0 (Eq. A.7); per-band → per-band
gradestr'engineering' (default) / 'survey'ISO 3744 vs ISO 3746
omc_uncertaintyfloatdBdefault 0.0, operating/mounting instability, folded into

Returns a SoundPowerResult: sound_power_level (per-band ), surface_pressure_level ( after /), mean_pressure_level, background_correction/environmental_correction (/), directivity_index (apparent per microphone position and frequency band, shape (NM, NB); ISO 3744 clause 8.4), surface_area, sound_power_level_a (), uncertainty (expanded, 95 %) and grade. measurement_positions('hemisphere', radius=…, reflecting_planes=…, tones=…, grade=…) returns the normative (N, 3) microphone coordinates (Table B.1 for tonal sources, B.2 for broadband). Those coordinates plot directly with plot_microphone_positions, which draws the array on its measurement surface in 3-D, numbered as in the standard.

Three-dimensional view of the ISO 3744 microphone array: ten numbered microphones on a 2 m wireframe hemisphere standing on a shaded circular reflecting plane, with positions 1 and 2 close to the plane, the others staggered in height up to positions 9 and 10 near the top, and the x, y and z axes graduated in metresThree-dimensional view of the ISO 3744 microphone array: ten numbered microphones on a 2 m wireframe hemisphere standing on a shaded circular reflecting plane, with positions 1 and 2 close to the plane, the others staggered in height up to positions 9 and 10 near the top, and the x, y and z axes graduated in metres

Where the ten Annex B microphones actually sit on the 2 m hemisphere: the heights are staggered so the array samples the whole surface evenly, which is what lets the plain energy average of the ten levels stand in for the surface integral.

Show the code for this figure
import matplotlib.pyplot as plt
from phonometry import measurement_positions, plot_microphone_positions
# The 10 ISO 3744 Annex B microphones on a 2 m hemisphere.
plot_microphone_positions(measurement_positions("hemisphere", radius=2.0),
radius=2.0)
plt.show()

Ten is the count for one reflecting plane. Against two planes the array is the five key positions 2, 3, 6, 7 and 9 of Table B.2; in a corner, against three planes, it is the three positions 1, 2 and 3 of Table B.3 (clause 8.1.1). The survey method uses coarser arrays again — four positions over one plane.

Those counts are a starting point, not a result. Clause 8.1.1 requires additional positions if any one of three conditions holds:

  • a) the range of the A-weighted levels across the key positions exceeds 10 dB over one reflecting plane, 5 dB over two, or 3 dB over three;
  • b) the apparent A-weighted directivity index exceeds 5 dB in any direction;
  • c) a large source radiates from only a small part of itself — the openings of an otherwise enclosed machine being the standard’s own example.

The two have different answers. Condition a) is met by adding positions 11 to 20 of the same table (or, equivalently, by repeating the key array with the source rotated −60° for Table B.1 or 180° for Table B.2): the surface is still sampled evenly, so the plain energy average still applies. Conditions b) and c) are met by a localized investigation — extra positions concentrated around the maximum, numerically equal to the level range found — and those positions carry unequal segment areas, so the mean must then be the area-weighted one of clause 8.2.2.2 and not the equal-area average sound_power_pressure computes. Note 3 adds a priority rule that saves a lot of wasted work: when the background at any position is within 6 dB of the highest source level, reduce the background before adding positions, because a background that close is what is moving in the first place.

Both gates are one line each on the result the page has already computed:

import numpy as np
# The band-summed level per position (A-weight the bands first for the
# standard's own A-weighted range; here the source is broadband enough that it
# makes no difference to the verdict).
lp_a = 10.0 * np.log10(np.sum(10.0 ** (0.1 * levels), axis=1))
print(round(float(lp_a.max() - lp_a.min()), 2)) # 0.76 dB: condition a) clear
print(round(float(np.abs(res.directivity_index).max()), 2)) # 1.1 dB: b) clear

is the apparent directivity index of clause 8.4, the excess of the background-corrected level at position over the surface average, per position and per band; it is what the pitfall above meant by “shows up in the apparent directivity index”. A machine that radiates 5 dB more towards one microphone than the surface average does not have a broken array — it has a directivity the ten positions cannot resolve.

2. Precision grade, anechoic room (ISO 3745)

Section titled “2. Precision grade, anechoic room (ISO 3745)”

When the highest accuracy is required, ISO 3745 measures sound power in a qualified anechoic or hemi-anechoic room, where the free field lets a fixed array of microphones sample the radiated sound pressure directly. It is the grade-1 counterpart to the enveloping-surface method of Section 1, with standardized microphone coordinates, a per-position background correction and an explicit meteorological correction.

ISO 3745 precision sound power in an anechoic room: wedge-lined walls, the device under test at the centre and a hemispherical array of microphones at a fixed radius, with the sound power level formed from the surface-averaged pressure plus the area, background and meteorological correctionsISO 3745 precision sound power in an anechoic room: wedge-lined walls, the device under test at the centre and a hemispherical array of microphones at a fixed radius, with the sound power level formed from the surface-averaged pressure plus the area, background and meteorological corrections

The left-hand panel of the clip below is what that room is for. With the boundaries absorbing, a microphone sees only what the source sends its way, so the level falls with distance and the array has to sample a whole surface — which is why the only geometry the method needs, once the room is qualified, is the surface term . The right-hand panel is the reverberation-room alternative of ISO 3741, and both end on the same .

The same source in an anechoic room and in a reverberation room produces different microphone pressures, and the free-field and diffuse-field formulas converge to the same sound power level L_W.

Download the animation (WebM)

The same source in an anechoic room and in a reverberation room produces different microphone pressures, and the free-field and diffuse-field formulas converge to the same sound power level L_W.

Download the animation (WebM)

Sound power level (Clause 8). The band sound power level is the surface-averaged pressure level plus the surface term and the corrections:

with over the sphere or over the hemisphere, . and are the meteorological corrections (reference and radiation-impedance terms); accounts for air absorption over the measurement radius. The microphone positions are the standardized unit-vector arrays of Tables D.1 (sphere), E.1 (hemisphere) and E.2 (hemisphere, broadband).

There is no separate term in that formula because — unprimed, unlike section 1’s — is the surface average of the levels after each one has been background-corrected on its own,

(clause 9.4.3.1). So the correction lives inside the average, one per position, rather than being subtracted from the mean the way ISO 3744 does it. mean_pressure_level is the raw energy average and surface_pressure_level the corrected one, which is the of the formula above.

The radius is not free (clauses 8.1/8.2). It must satisfy with the distance from the acoustic centre to the furthest point of the source (in a hemi-anechoic room, or , whichever is larger, being the height of the acoustic centre above the floor), at the lowest frequency of interest, and m — 0.5 m only for a small, low-noise source over a limited band — with the whole surface inside the region qualified per Annex A or B. Worked: a 0.6 × 0.5 × 0.7 m benchtop source has m, so m; at a lowest band of 100 Hz, m does not bind and neither does the 1 m floor. The radius=1.0 of the examples below therefore fits only a source under about 0.5 m of characteristic dimension.

The array is not free either. Positions 1 to 20 are used first, and 21 to 40 are added only when the difference between the highest and lowest level in any band of interest is not less than half the number of positions — a check on data the reader already has, levels.max(0) - levels.min(0) >= 0.5 * levels.shape[0]. If 40 positions still fail it, a localized investigation is required and the positions then carry unequal areas, which is what areas= is for.

import numpy as np
from phonometry import emission
# The 40 standardized hemisphere positions (unit vectors scaled by the radius).
pos = emission.precision_positions("hemisphere", radius=1.0, count=40)
print(pos.shape) # (40, 3)
# Octave/third-octave band SPL (dB) at each of the 40 positions; here a uniform
# 74 dB in one band. The result carries S = 2*pi*r^2 and LW with C1+C2+C3.
levels = np.full((40, 1), 74.0)
res = emission.sound_power_anechoic(levels, "hemisphere", radius=1.0)
print(round(res.surface_area, 3)) # 6.283 (2*pi*1^2)
print(np.round(res.sound_power_level, 2)) # [81.85]
Two three-dimensional panels of the ISO 3745 microphone arrays on a 1 m radius. Left, the 40-position hemisphere of Table E.1 over its reflecting plane, with positions 1 to 20 in one colour and 21 to 40 in another to mark the escalation. Right, the 20-position full sphere of Table D.1 for the anechoic case, with no reflecting planeTwo three-dimensional panels of the ISO 3745 microphone arrays on a 1 m radius. Left, the 40-position hemisphere of Table E.1 over its reflecting plane, with positions 1 to 20 in one colour and 21 to 40 in another to mark the escalation. Right, the 20-position full sphere of Table D.1 for the anechoic case, with no reflecting plane

The precision arrays, drawn from the same precision_positions call the snippet above makes. The first twenty sample the surface on their own; the second twenty are added only when the band level range triggers the escalation, and a localized investigation after that carries unequal areas.

Show the code for this figure
import matplotlib.pyplot as plt
fig, (axl, axr) = plt.subplots(1, 2, subplot_kw={"projection": "3d"})
plot_microphone_positions(
emission.precision_positions("hemisphere", radius=1.0, count=40),
ax=axl, radius=1.0)
plot_microphone_positions(
emission.precision_positions("sphere", radius=1.0, count=20),
ax=axr, radius=1.0)
plt.show()

Background and meteorological corrections. The background correction is applied per position and floored where the signal-to-background difference is small (Eq. 11); the meteorological correction is evaluated from the measured temperature and static pressure.

import numpy as np
from phonometry import emission
# K1 for a 6 dB signal-to-background difference in a <=200 Hz edge band: the
# floor is 1.26 dB (Eq. 11). Source and background levels are [positions, bands].
k1 = emission.precision_background_correction(
np.array([[56.0]]), np.array([[50.0]]), np.array([200.0]))
print(round(float(k1[0, 0]), 4)) # 1.2563
# Meteorological corrections at the 23 C, 101.325 kPa reference (Eq. 16):
mc = emission.meteorological_corrections(23.0, 101.325)
print(round(mc.c1, 4), round(mc.c2, 4)) # -0.1282 0.0
# Expanded uncertainty (Clause 10.5 EXAMPLE): sigma_R0 = 0.5, sigma_omc = 2.0,
# k = 2 -> U = 4.1 dB.
print(round(emission.precision_uncertainty(0.5, 2.0, 2.0), 3)) # 4.123

The MeteorologicalCorrection is a pair of scalars (plus the per-band when the attenuation coefficient is supplied per band) rather than a plottable spectrum: the corrections fold into the PrecisionSoundPowerResult as its c1/c2/c3 fields, and the .report() fiche prints them on its measurement-basis strip.

The margins and the intervals behind those numbers are stricter than section 1’s. The background, averaged over all positions, shall be at least 6 dB below the source level in every band and at least 10 dB below from 250 Hz to 5 kHz (clause 5.2.1.1) — a band that cannot reach it may instead be excluded from the range of interest if its corrected A-weighted band power is at least 15 dB below the highest (clause 5.2.1.2). Where the margin falls short anyway, clause 9.4.2 freezes at the value the criterion produces — 1,26 dB for the bands at and below 200 Hz and at and above 6,3 kHz, 0,46 dB from 250 Hz to 5 kHz — and then requires the test report, and the tables and graphs in it, to state that those bands are upper bounds. precision_background_correction applies exactly that rule; declaring the omission is the reader’s job.

The averaging is longer than ISO 3744’s: at least 30 s in the bands centred at and below 160 Hz and at least 10 s from 200 Hz up (clause 9.4.1), with the interval stated in the report, and at least two full traverses when a traversing microphone is used. The background is measured immediately before or immediately after the source, at the same positions and over the same interval. Forty positions at 30 s in the low bands is why a grade-1 run takes so much longer than the grade-2 one of section 1 — the cost of the grade is mostly time.

ParameterTypeUnitsRange / defaultNotes
levels_positions2D arraydB(NM, NB)One row per position, one column per band
surfacestr'sphere' / 'hemisphere'Anechoic or hemi-anechoic room
radiusfloatm> 0Measurement radius ; bounded by , and the 1 m floor above
background_levels2D array or spectrumdBmatches levels_positionsEnables the per-position of Eq. 11
frequencies1D arrayHzone per bandEnables and the per-band
areas1D arrayone per positionUnequal segment areas, for a localized investigation (clause 9.4.3.2); equal areas assumed when omitted
temperaturefloat°Cdefault 23.0Sets ,
static_pressurefloatkPadefault 101.325Sets ,
air_absorption_coefficientfloat or 1D arraydB/mdefault NoneThe air-absorption term; supplied, not computed
sigma_omcfloatdBdefault 0.0Operating and mounting standard deviation, clause 10.5
coverage_factorfloatdefault 2.0 in

The last two are the whole uncertainty story, and the default hides it: left alone, sigma_omc = 0 claims a perfectly repeatable installation and the fiche prints dB. The 4.1 dB the example below reports is what the same determination costs once the clause 10.5 EXAMPLE value dB is admitted.

Over several bands sound_power_anechoic returns a plottable PrecisionSoundPowerResult carrying the per-band and the A-weighted total:

import numpy as np
from phonometry import emission
# A mid-frequency-peaked machine measured over the 40-position hemisphere array
# (Annex E). levels_positions is the (40, NB) surface pressure spectrum: a base
# spectrum peaked near 1 kHz plus a small per-position spatial spread.
freqs = np.array([125, 250, 500, 1000, 2000, 4000, 8000], float)
base = 70.0 + 8.0 * np.exp(-(np.log2(freqs / 1000.0) ** 2) / 2.0)
rng = np.random.default_rng(7)
levels = base[None, :] + rng.normal(0.0, 1.0, (40, freqs.size))
# sigma_omc is the operating-and-mounting standard deviation of Clause 10.5;
# with the EXAMPLE value 2.0 dB and the default coverage factor k = 2 the
# expanded uncertainty U = k*sqrt(sigma_R0^2 + sigma_omc^2) is the 4.1 dB the
# fiche below prints. Left at its default of 0 it reports 1.0 dB.
result = emission.sound_power_anechoic(levels, "hemisphere", radius=1.0,
frequencies=freqs, sigma_omc=2.0)
print(round(result.sound_power_level_a, 1)) # 89.3
print(round(float(result.uncertainty), 1)) # 4.1 dB
result.plot() # LW spectrum, LWA in the title (needs matplotlib)
The precision sound power level spectrum of a mid-frequency-peaked machine measured over the ISO 3745 hemisphere array, one bar per band peaking near 1 kHz, with the A-weighted total of 89.3 dB(A) in the titleThe precision sound power level spectrum of a mid-frequency-peaked machine measured over the ISO 3745 hemisphere array, one bar per band peaking near 1 kHz, with the A-weighted total of 89.3 dB(A) in the title

One bar per band: the surface-averaged pressure plus the area, background and meteorological corrections give , and the A-weighted energy sum across bands gives the single-number in the title.

Show the code for this figure
import matplotlib.pyplot as plt
import numpy as np
from phonometry import emission
# A mid-frequency-peaked machine measured over the 40-position hemisphere array
# (Annex E). levels_positions is the (40, NB) surface pressure spectrum: a base
# spectrum peaked near 1 kHz plus a small per-position spatial spread.
freqs = np.array([125, 250, 500, 1000, 2000, 4000, 8000], float)
base = 70.0 + 8.0 * np.exp(-(np.log2(freqs / 1000.0) ** 2) / 2.0)
rng = np.random.default_rng(7)
levels = base[None, :] + rng.normal(0.0, 1.0, (40, freqs.size))
result = emission.sound_power_anechoic(levels, "hemisphere", radius=1.0, frequencies=freqs)
# result is the PrecisionSoundPowerResult computed above. One line:
result.plot()
plt.show()
# By hand: a bar spectrum of LW with the A-weighted total in the title.
freqs = result.frequencies
positions = np.arange(freqs.size)
fig, ax = plt.subplots()
ax.bar(positions, result.sound_power_level, width=0.7, color="#1f77b4")
ax.set_xticks(positions)
ax.set_xticklabels([f"{f:g}" for f in freqs], rotation=45, ha="right")
ax.set_xlabel("Frequency [Hz]")
ax.set_ylabel("Sound power level LW [dB]")
ax.set_title(
f"Precision sound power (ISO 3745) LWA = {result.sound_power_level_a:.1f} dB(A)")
plt.show()

A sound power determination ends as a document. Every result of this page stays plottable while it is being worked on (res.plot() draws the same spectrum interactively that the fiche typesets), and the report step wraps it into the deliverable. Both the enveloping-surface result (SoundPowerResult, ISO 3744/3746) and the precision result (PrecisionSoundPowerResult, ISO 3745) expose a .report() method that writes a one-page PDF fiche laid out like a sound-power test sheet: the standard-basis line naming the applied method and accuracy grade, an optional metadata header (client, noise source, test environment, instrumentation, climate, date), a per-band table (nominal octave/one-third-octave frequency, the surface sound-pressure level and the band sound-power level ), the sound-power spectrum with a nominal band axis, and a boxed A-weighted sound power level (dB re 1 pW) with the total , the expanded uncertainty and the measurement surface area alongside.

The metadata is supplied through a ReportMetadata, whose applicable fields here are the source description (specimen), the test environment (test_room), the client, the instrumentation, the temperature, relative humidity and ambient pressure, the date of test (test_date) and the footer identity (laboratory, operator, report_id, notes); the measurement surface area comes from the result itself and is printed in the result box and the basis strip, together with the applied corrections (the background and environmental for the ISO 3744/3746 surface method, or the meteorological // for the ISO 3745 precision method). Supplying requirement adds a PASS/FAIL verdict against a declared A-weighted sound-power limit (a sound-power emission is a quantity where less is better, so the source passes at or below the limit). verbose=True adds the energy-averaged level to the table, and for the ISO 3744/3746 surface result it also adds the / correction columns (the precision result has no at all and folds its per-position into the surface average, so the fiche prints // on its basis strip in place of those columns). language="es" renders the Spanish fiche with comma decimals.

import numpy as np
from phonometry import ReportMetadata, emission
freqs = np.array([63, 125, 250, 500, 1000, 2000, 4000, 8000], float)
# Ten identical position spectra over a hemisphere of radius 4 m; background a
# uniform 10 dB below and an equivalent absorption area A = 1500 m^2 (so K1, K2
# are meaningful and within the engineering validity limit).
surface = np.array([72.0, 76, 80, 82, 81, 78, 73, 66])
res = emission.sound_power_pressure(
np.tile(surface, (10, 1)), "hemisphere", radius=4.0,
background_levels=np.tile(surface - 10.0, (10, 1)),
frequencies=freqs, grade="engineering",
room=emission.RoomEnvironment(absorption_area=1500.0),
)
res.report(
"sound_power.pdf",
metadata=ReportMetadata(
client="Example manufacturing plant",
specimen="Hydraulic power pack (floor-standing)",
test_room="Hemi-anechoic room over a reflecting floor",
instrumentation="Class 1 sound level meter (IEC 61672-1), s/n 0042",
laboratory="Phonometry reference example",
report_id="EXAMPLE-3744",
requirement=105.0,
),
) # LWA = 103.7 dB(A) re 1 pW -> declared limit 105 dB(A): PASS

The example fiche is regenerated with make reports and kept rendered in the repository; click the preview to open the PDF.

ISO 3744 sound power determination example report (PDF)

One-page ISO 3744 sound-power determination fiche: a header with the client, the noise source, the hemi-anechoic test environment and the instrumentation and climate, the octave-band table (63 Hz to 8 kHz) of surface sound-pressure levels Lp and band sound-power levels LW, the sound-power spectrum LW(f) with a nominal band axis, the boxed A-weighted sound power level LWA = 103.7 dB(A) re 1 pW with the total LW = 105.8 dB, the expanded uncertainty U = 3.0 dB and the measurement surface S = 100.53 m2, and a PASS verdict against the declared 105 dB(A) limit, closed by a basis strip stating the applied K1 = 0.5 dB and K2 = 1.0 dB corrections.

Download the report (PDF)

Sound power determination fiche (SoundPowerResult.report), an ISO 3744 engineering-grade hemisphere measurement with the K1/K2 corrections and the boxed LWA.

The precision result writes the same sheet from the ISO 3745 side, with the meteorological corrections on its basis strip in place of the / pair. This is the 40-position hemisphere measurement of section 2, the one whose spectrum is plotted above:

from phonometry import ReportMetadata
result.report(
"precision-sound-power.pdf",
metadata=ReportMetadata(
client="Example manufacturing plant",
specimen="Mid-frequency-peaked machine",
test_room="Qualified anechoic room, 40-position hemisphere array",
measurement_standard="ISO 3745",
),
) # LWA = 89.3 dB(A) re 1 pW, U = 4.1 dB
ISO 3745 precision sound power determination example report (PDF)

One-page ISO 3745 precision sound-power fiche: a header with the client, the noise source and the qualified anechoic room with its 40-position hemisphere array, the octave-band table from 125 Hz to 8 kHz of surface sound-pressure levels Lp and band sound-power levels LW (78.0, 79.0, 82.6, 85.8, 82.6, 78.7 and 78.0 dB), the LW spectrum peaking at 1 kHz, and the boxed A-weighted sound power level LWA = 89.3 dB(A) re 1 pW with the total LW = 90.1 dB, the expanded uncertainty U = 4.1 dB and the measurement surface S = 6.28 m2, over a basis strip stating the applied meteorological corrections C1 = -0.13 dB, C2 = 0.00 dB and C3 = 0.0 dB.

Download the report (PDF)

Precision sound power fiche (PrecisionSoundPowerResult.report), the ISO 3745 anechoic determination with its meteorological corrections.
  • Covered

    The ISO 3744/3746 enveloping-surface determination (sound_power_pressure): the hemisphere and box surface areas, the background and environmental corrections with their validity limits, the Annex B microphone positions (measurement_positions, plot_microphone_positions) and the Annex E A-weighted total. The ISO 3745 precision determination (sound_power_anechoic): the Annex D/E fixed arrays (precision_positions), the per-position background correction (precision_background_correction, Eq. 11), the meteorological corrections // and the Clause 10.5 expanded uncertainty (precision_uncertainty). Both results render the accredited-style sound-power fiche through .report().

  • Not covered

    Neither method implements the underlying facility qualification test: ISO 3745’s free-field qualification of the anechoic or hemi-anechoic environment is assumed, not performed, and ISO 3744’s validity only warns. ISO 3744’s Annex G correction to reference meteorological conditions, required above 500 m of altitude or below 10 °C (clause 8.2.5), is not applied either: sound_power_pressure takes no temperature or pressure argument. The meteorological correction of ISO 3745 needs an air-absorption coefficient the caller supplies (air_absorption_coefficient=); this module does not compute it from ISO 9613-1 itself. Choosing among the six routes, and the ISO 4871 declaration a result feeds, live in Sound Power.