Skip to content

noise_control.room_to_room

Room-to-room noise reduction: source room, partition, receiving room, criterion.

The other classic bookkeeping exercise of noise control, beside the duct-borne cascade of phonometry.noise_control.duct_path. A machine runs in one room, a partition separates that room from an occupied one, and the question is the octave-band spectrum in the occupied room and whether it meets a design criterion. The answer is a short chain, and every link of it already exists in the library: the reverberant level the machine builds up in the source room (phonometry.room.steady_state_spl over the room constant of phonometry.room.room_constant), the transmission loss of the partition (measured, or predicted by phonometry.building.prediction.panel_transmission), the absorption of the receiving room (phonometry.room.equivalent_absorption_area) and the rating of what arrives (phonometry.room.noise_criterion). What this module adds is the one step that lives nowhere else, and the result object that carries the whole path.

The step. Norton & Karczub, Fundamentals of Noise and Vibration Analysis for Engineers 2nd ed., 4.9, balance the steady-state power crossing the partition against the power the receiving room absorbs and the power that leaks back, and arrive at Equation (4.101):

with the noise reduction between the two reverberant fields, the transmission loss of the partition, S_w the area of the partition and S_2 alpha_2 the equivalent absorption area of the receiving room. The tau S_w term is the power the partition itself passes back and is normally negligible beside the room absorption; it is switched on with include_partition_transmission.

The single most useful thing the equation says is that the noise reduction is not the transmission loss. A large partition into a hard room delivers less than its TL; a small partition into a well-absorbing room delivers more. Norton also warns that the measured noise reduction runs a few decibels below the prediction because of flanking transmission through mechanical connections and air leaks, which flanking_penalty applies as an explicit debit.

The source-room level. In a plant room the receiver of interest is the partition, not a point near the machine, so the level that drives the transmission is the reverberant field alone, . That is phonometry.room.steady_state_spl at distance=None, and this module delegates to it rather than repeating it. Norton’s Table 4.5 adds the choice of sound power model: a machine standing in the intersection of a floor and a wall radiates more power than its free-space L_W if it behaves as a constant-volume source, and source_model="constant_volume" is the conservative upper bound a design estimate uses.

The verdict. RoomToRoomResult.required_transmission_loss inverts the chain: given the source-room level and the criterion curve, the partition transmission loss that would just meet it, band by band. That is the number a partition is specified from.

Auto-generated from the source docstrings by scripts/generate_api_docs.py (make api-docs). Do not edit by hand.

DesignCriterion(
family: str = 'NC',
target: float | None = None,
flanking_penalty: float = 0.0,
)

The design criterion the receiving room is held to.

The verdict half of the chain: which room-criterion family the received spectrum is rated against, the curve it has to stay under, and the allowance a design sheet keeps for the transmission the calculation does not model.

Parameters

NameDescription
familyRoom-criterion family, "NC" (default) or "RC".
targetThe design criterion value (e.g. 45 for NC 45), or None for no target, which leaves the verdicts undefined.
flanking_penaltyDecibels debited from the predicted noise reduction for flanking transmission through mechanical connections and air leaks (Norton’s “a few dB”). Default 0.
room_to_room_transmission(
frequencies: ArrayLike,
transmission_loss: ArrayLike,
partition_area: float,
receiving_absorption: ArrayLike,
*,
source: SourceRoom | None = None,
include_partition_transmission: bool = False,
criterion: DesignCriterion | None = None,
label: str = 'Room to room',
) -> RoomToRoomResult

Sound transmission from one room to another (Norton 2e Equation (4.101)).

Computes the noise reduction the partition and the receiving room deliver together, and the reverberant spectrum in the receiving room. The source-room level is either given directly as source.level or built from a sound power level and the source room’s room constant, in which case the reverberant field alone is used (phonometry.room.steady_state_spl at distance=None), which is the level that drives the transmission across the partition.

Parameters

NameDescription
frequenciesOctave-band centre frequencies, Hz (1-D array).
transmission_lossTransmission loss of the partition TL, dB; a scalar or one value per band. Measured, tabulated, or predicted by phonometry.building.prediction.panel_transmission.
partition_areaArea of the partition between the rooms S_w, m2.
receiving_absorptionEquivalent absorption area of the receiving room S_2 alpha_2 per band, m2; e.g. from phonometry.room.equivalent_absorption_area.
sourceThe source room (SourceRoom): its level, or its sound power level with the room constant, directivity and sound power model that turn it into one. Exactly one of the two descriptions is required, so the empty default is rejected.
include_partition_transmissionWhen True the tau S_w term of Equation (4.101) is added to the receiving-room absorption, with . Default False, the form hand calculations use.
criterionThe design criterion (DesignCriterion): the family, the target curve and the flanking allowance. None is the default criterion, an "NC" family with no target.
labelA short human label of the chain.

Returns: A RoomToRoomResult.

Raises

ExceptionWhen
ValueErrorIf the spectra do not share one value per band, if neither or both source descriptions are given, or if the criterion family or the sound power model is unknown.
RoomToRoomResult(
frequencies: np.ndarray,
source_level: np.ndarray,
transmission_loss: np.ndarray,
partition_area: float,
receiving_absorption: np.ndarray,
noise_reduction: np.ndarray,
received_level: np.ndarray,
flanking_penalty: float,
source_power_level: np.ndarray | None,
criterion: str,
target: float | None,
label: str,
)

The room-to-room chain of one partition (Norton 2e, 4.9).

Built by room_to_room_transmission. The four spectra are the four rows a hand calculation writes down: the level in the source room, the transmission loss of the partition, the noise reduction the partition and the receiving room deliver together, and what arrives.

Attributes

NameDescription
frequenciesOctave-band centre frequencies, Hz.
source_levelReverberant sound pressure level in the source room L_p1, dB.
transmission_lossTransmission loss of the partition TL, dB.
partition_areaArea of the partition S_w, m2.
receiving_absorptionEquivalent absorption area of the receiving room S_2 alpha_2 per band, m2.
noise_reductionThe delivered noise reduction NR per band, dB: Equation (4.101) less flanking_penalty.
received_levelReverberant sound pressure level in the receiving room , dB.
flanking_penaltyThe debit applied to the predicted noise reduction for flanking transmission and air leaks, dB.
source_power_levelThe source sound power level L_W the source level was built from, dB re 1 pW, or None when source.level was given directly.
criterion"NC" or "RC", the room-criterion family.
targetThe design criterion value (e.g. 45 for NC 45), or None.
labelA short human label of the chain.

property

The design curve of target at the analysis bands, dB.

None when the chain declared no target. Comparable band by band with received_level.

property

How far the receiving room is over the criterion, band by band, dB.

Positive where the curve is exceeded, None without a target. It is also the transmission-loss deficit of the partition, band for band.

property

True when the receiving room stays under the curve everywhere.

None without a target. The band-by-band test of a design sheet, not the two-step designation procedure behind rating.

RoomToRoomResult.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the source-room level, the noise reduction and what arrives.

The source-room and receiving-room spectra are drawn against the design criterion curve, with the band-by-band noise reduction on a twin axis. Requires matplotlib (pip install phonometry[plot]).

Parameters

NameDescription
axExisting axes, or None to create a figure.
languageLabel language, "en" (default) or "es".
kwargsForwarded to the received-level Axes.plot.

Returns: The axes.

property

The rating of the spectrum arriving in the receiving room.

An NCResult for the "NC" family, an RCResult for "RC".

RoomToRoomResult.required_transmission_loss

Section titled “RoomToRoomResult.required_transmission_loss”

property

Partition TL that would just meet the criterion, per band, dB.

The chain of Equation (4.101) solved for the transmission loss,

with the design criterion curve. The tau S_w term is left out of the inverse (it depends on the answer), which is how the equation is used to specify a partition. None when no target was declared.

RoomToRoomResult.table() -> list[dict[str, Any]]

The chain as a list of printed rows, source room to verdict.

Each entry has label, kind (one of "source_power", "source", "transmission_loss", "absorption", "noise_reduction", "flanking", "received", "criterion", "required") and values (a per-band array). The rows are the ones a hand calculation writes down, in that order.

Returns: The list of row dictionaries, in printing order.

SourceRoom(
level: ArrayLike | None = None,
power_level: ArrayLike | None = None,
room_constant: ArrayLike | None = None,
directivity: float = 1.0,
model: str = 'constant_power',
)

The source room of the chain: what drives the partition.

Two ways to say the same thing, and exactly one of them is given. Either the reverberant level in the source room is known (level), or the machine’s sound power level is (power_level), in which case the room constant of the source room is needed to build the reverberant field (Norton 2e, 4.7), and the sound power model of Table 4.5 decides whether the position of the source in the room raises or lowers the power it radiates.

Parameters

NameDescription
levelReverberant sound pressure level in the source room L_p1, dB (scalar or per band). Mutually exclusive with power_level.
power_levelSound power level of the source L_W, dB re 1 pW (scalar or per band). Requires room_constant.
room_constantRoom constant of the source room R_1, m2 (scalar or per band); from phonometry.room.room_constant.
directivityDirectivity factor Q of the source in the source room (1 in free space, 2 on one plane, 4 in an edge, 8 in a corner). Only affects the level through model, because the reverberant field itself is position-independent.
modelSound power model of Norton Table 4.5: "constant_power" (default, the radiated power does not depend on the source position), "constant_volume" (the conservative upper bound, the power rises by ) or "constant_pressure" (the lower bound, it falls by ).