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.
Sizing the surface
Section titled “Sizing the surface”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.
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).
Setting up the measurement
Section titled “Setting up the measurement”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 npfrom 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 dBprint(round(res.sound_power_level_a, 1)) # LWA = 92.4 dBprint(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)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 pltimport numpy as npfrom 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.frequenciespositions = 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.
K1 and K2 pitfalls
Section titled “K1 and K2 pitfalls”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.
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 pltimport 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 criterionaxl.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 limitaxr.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.
sound_power_pressure() parameters
Section titled “sound_power_pressure() parameters”| Parameter | Type | Units | Range / default | Notes |
|---|---|---|---|---|
levels_positions | 2D array | dB | (NM, NB) | One row per position, one column per band (or a single A-weighted column) |
surface | str | — | 'hemisphere' / 'box' | Measurement-surface shape |
radius | float | m | > 0 (hemisphere) | Hemisphere radius |
dimensions | (float, float, float) | m | > 0 (box) | Reference-box |
distance | float | m | > 0 (box) | Measurement distance |
reflecting_planes | int | — | 1 / 2 / 3, default 1 | Halves/quarters the hemisphere area |
background_levels | 2D array or spectrum | dB | (NM, NB), or (NB,) / (1, NB) | Enables ; a single spectrum broadcasts to every position |
frequencies | 1D array | Hz | nominal band centres | Enables (Annex E) |
room | RoomEnvironment or None | — | default None (free field) | The room data behind ; its fields are the three routes to below |
room.absorption_area | float or 1D array | m² | > 0 | for (direct); per-band array → per-band |
room.reverberation_time, room.volume | float/array, float | s, m³ | > 0 | for ; per-band → per-band |
room.mean_absorption_coefficient, room.room_surface | float/array, float | —, m² | (0,1], > 0 | (Eq. A.7); per-band → per-band |
grade | str | — | 'engineering' (default) / 'survey' | ISO 3744 vs ISO 3746 |
omc_uncertainty | float | dB | default 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.
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 pltfrom 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()How many positions, and when to add more
Section titled “How many positions, and when to add more”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) clearprint(round(float(np.abs(res.directivity_index).max()), 2)) # 1.1 dB: b) clearis 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.
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.
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.
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 npfrom 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]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 npfrom 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.123The 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.
sound_power_anechoic() parameters
Section titled “sound_power_anechoic() parameters”| Parameter | Type | Units | Range / default | Notes |
|---|---|---|---|---|
levels_positions | 2D array | dB | (NM, NB) | One row per position, one column per band |
surface | str | — | 'sphere' / 'hemisphere' | Anechoic or hemi-anechoic room |
radius | float | m | > 0 | Measurement radius ; bounded by , and the 1 m floor above |
background_levels | 2D array or spectrum | dB | matches levels_positions | Enables the per-position of Eq. 11 |
frequencies | 1D array | Hz | one per band | Enables and the per-band |
areas | 1D array | m² | one per position | Unequal segment areas, for a localized investigation (clause 9.4.3.2); equal areas assumed when omitted |
temperature | float | °C | default 23.0 | Sets , |
static_pressure | float | kPa | default 101.325 | Sets , |
air_absorption_coefficient | float or 1D array | dB/m | default None | The air-absorption term; supplied, not computed |
sigma_omc | float | dB | default 0.0 | Operating and mounting standard deviation, clause 10.5 |
coverage_factor | float | — | default 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 npfrom 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.3print(round(float(result.uncertainty), 1)) # 4.1 dBresult.plot() # LW spectrum, LWA in the title (needs matplotlib)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 pltimport numpy as npfrom 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.frequenciespositions = 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()3. The measurement report (.report())
Section titled “3. The measurement report (.report())”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 npfrom 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): PASSThe example fiche is regenerated with make reports and kept rendered in the
repository; click the preview to open the 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.
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
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.
What this guide covers
Section titled “What this guide covers”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_pressuretakes 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.
See also
Section titled “See also”- Sound Power: choosing among the five determination routes, the accuracy grades and the ISO 4871 noise-emission declaration.
- Sound Power in the Reverberation Room (ISO 3741): the precision-grade diffuse-field alternative when the source can travel to a qualified room.
- Sound Power by Intensity Scanning (ISO 9614): the routes that tolerate the steady background noise a pressure method cannot subtract.
- Room Acoustics: the reverberation time and equivalent absorption area that feed .
- Levels: energy averaging and the A-weighting behind .
- Theory: the / and / derivations.
- API reference:
emission.sound_power. - Theory: Sound power determination: the enveloping-surface derivation of ISO 3744/3746 and the environmental correction it needs.
References
Section titled “References”- Beranek, L. L., & Mellow, T. J. (2012). Acoustics: Sound fields and transducers. Academic Press. https://doi.org/10.1016/C2011-0-05897-0ISBN 978-0-12-391421-7. Radiation and sound fields: the free-field relations between pressure and power that the enveloping-surface and anechoic methods rest on.
- International Organization for Standardization. (2010). Acoustics — Determination of sound power levels and sound energy levels of noise sources using sound pressure — Engineering methods for an essentially free field over a reflecting plane (ISO 3744:2010). The enveloping-surface method of section 1: hemisphere and box surface areas, the K1/K2 corrections, the Annex B microphone positions and the Annex E A-weighting.
- International Organization for Standardization. (2010). Acoustics — Determination of sound power levels and sound energy levels of noise sources using sound pressure — Survey method using an enveloping measurement surface over a reflecting plane (ISO 3746:2010). The survey grade of section 1, sharing the enveloping-surface formulae with coarser criteria.
- International Organization for Standardization. (2012). Acoustics — Determination of sound power levels and sound energy levels of noise sources using sound pressure — Precision methods for anechoic rooms and hemi-anechoic rooms (ISO 3745:2012). The precision anechoic-room method of section 2: the Clause 8 power level, the per-position background correction (Eq. 11), the meteorological corrections and the standardized microphone arrays.