Skip to content
This documentation describes version 4.0.0, which is not released yet. The current version on PyPI is 3.3.0 and does not carry everything described here.

Reading a material datasheet

Standards: ISO 11654ISO 717

A data sheet prints fewer numbers than a book and means more by each of them. The same “0,90 at 1 kHz” can be a laboratory’s one-third-octave measurement, a rounded practical coefficient or a level the manufacturer declares no product falls below, and the sheet does not always say which. This page is about reading those numbers before you type them: what each kind is, which row class of the library holds it, and how a catalogue of your own keeps what the sheet prints without turning it into something it is not.

Nothing here ships with data. The sheets are yours, you type them into a file of yours, and the library reads the file; a sheet pasted into an issue or a pull request is never merged.

Two absorption coefficients that are not the same number

Section titled “Two absorption coefficients that are not the same number”

A reverberation-room test (ISO 354) measures the sound absorption coefficient in one-third octave bands. It is referred to the area of the specimen, and ISO 354 notes that it can exceed 1.0, for example because of diffraction effects, so a value above 1 is common and is not an error. A test report prints it to two decimals, one value per band, and ThirdOctaveAbsorptionSpectrum holds it as printed, from 50 Hz to 10 kHz.

A European data sheet usually prints something else: the practical sound absorption coefficient of ISO 11654. Clause 4.1 forms it for each octave band from the three one-third octaves inside it: their mean to the second decimal, rounded in steps of 0.05, and set to 1.00 when it rounds above. Six values from 125 Hz to 4 kHz that all end in 0 or 5 look like practical coefficients, but only a sheet that names them says so; when it does not, the row’s note is the place to write what you concluded. PracticalAbsorptionSpectrum holds them. The Sabine coefficients of a book’s table are neither; AbsorptionSpectrum holds those.

A test report’s table goes straight into the first class, and practical() turns it into the second, marking every octave as derived:

from phonometry import io, materials
bands = (100, 125, 160, 200, 250, 315, 400, 500, 630, 800, 1000, 1250,
1600, 2000, 2500, 3150, 4000, 5000)
alpha_s = (0.12, 0.15, 0.17, 0.21, 0.31, 0.51, 0.54, 0.80, 0.93, 1.05, 1.10,
1.19, 1.20, 1.13, 1.02, 0.99, 0.94, 0.81)
row = {"key": "e200", "name": "Panel 40", "mounting": "E-200",
"construction_depth_mm": 200}
row |= {f"absorption_coefficient_{b}": a for b, a in zip(bands, alpha_s, strict=True)}
report = {
"schema": "phonometry-catalogue",
"schema_version": 1,
"catalogue": "panel-40-report",
"row_type": "ThirdOctaveAbsorptionSpectrum",
"about": "The one-third-octave table of the laboratory report on Panel 40.",
"provenance": {
"kind": "test_report",
"document": "Sound absorption test report 26-015",
"publisher": "Example Lab",
"version": None,
"consulted": "2026-09-25",
"laboratory": "Example Lab",
"report": "26-015",
"test_standard": "ISO 354:2003",
},
"basis": "measured",
"rows": [row],
}
panel = io.parse_catalogue(
report, row_type=materials.ThirdOctaveAbsorptionSpectrum
)["panel-40-report/e200"]
print(panel.absorption_coefficient(1250)) # 1.19, above 1 and kept
practical = panel.practical()
print(practical.spectrum())
# {125: 0.15, 250: 0.35, 500: 0.75, 1000: 1.0, 2000: 1.0, 4000: 0.9}
print(practical.derived["practical_absorption_coefficient_1000"])
# from the one-third-octave coefficients at 800, 1000 and 1250 Hz, averaged,
# rounded in steps of 0.05 and capped at 1.00 (ISO 11654 Clause 4.1)
rating = panel.rating()
print(rating.rating_label, rating.absorption_class) # 0.65(MH) C

The 1 kHz octave is 1.10 before the cap and 1.00 after it; the report’s 1.19 stays 1.19. An octave whose three one-third octaves the report does not all print is left empty, and why_missing says it does not follow from the cells the row has: nothing is borrowed from a neighbouring band. A negative coefficient, which a measurement can give in a band where the specimen adds almost nothing to the room’s absorption, is not read as 0 either: its octave is left empty with the band and the value in why_missing, and rating() refuses it, naming the band.

ISO 11654 rating of a test report's one-third-octave absorption: the practical coefficients of the five rating octaves above the reference curve shifted to 0.65, with one unfavourable deviation of 0.10 at 250 HzISO 11654 rating of a test report's one-third-octave absorption: the practical coefficients of the five rating octaves above the reference curve shifted to 0.65, with one unfavourable deviation of 0.10 at 250 Hz

AbsorptionRatingResult.plot() of the report’s row: the practical coefficients of the five rating octaves, and the reference curve of ISO 11654 shifted down until the unfavourable deviations add up to no more than 0.10. Here they are 0.10, all of it at 250 Hz, so the curve stops at = 0.65. The coefficients stand 0.35 above it at 1, 2 and 4 kHz, past the 0.25 of Clause 4.3, which is what the indicators M and H say.

Show the code for this figure
import matplotlib.pyplot as plt
from phonometry import materials
bands = (100, 125, 160, 200, 250, 315, 400, 500, 630, 800, 1000, 1250,
1600, 2000, 2500, 3150, 4000, 5000)
alpha_s = (0.12, 0.15, 0.17, 0.21, 0.31, 0.51, 0.54, 0.80, 0.93, 1.05, 1.10,
1.19, 1.20, 1.13, 1.02, 0.99, 0.94, 0.81)
panel = materials.ThirdOctaveAbsorptionSpectrum(
name="Panel 40",
source="Sound absorption test report 26-015",
**{f"absorption_coefficient_{b}": a for b, a in zip(bands, alpha_s, strict=True)},
)
panel.rating().plot()
plt.show()

Because is rounded in steps of 0.05 and capped at 1.00, a practical coefficient printed as 0.83 or as 1.05 is not one ISO 11654 can give. Such a value is kept as the sheet prints it, and reading the file adds a note. The weighted coefficient is on the same grid, and Clause 5 asks for every coefficient to two decimals, with the shape indicators in parentheses after : “0,70(MH)”. Write the letters alone in shape_indicator.

The 125 Hz octave is defined like the others (Clause 4.1 forms for each octave band, and Clause 5.2 plots it from 125 Hz) and is not rated: the reference curve starts at 250 Hz, and Clause 1 says the rating is not appropriate below it. PracticalAbsorptionSpectrum holds it, and rating() never reads it.

A data sheet’s octave table is a spreadsheet’s job. Its header declares the dialect and the provenance, and the CSV beside it holds the rows as the sheet prints them: a mounting, a depth, a word where a number would be, and an x- column for the sheet’s own edge code.

import json
import pathlib
import warnings
from phonometry import io, materials
header = {
"schema": "phonometry-catalogue",
"schema_version": 1,
"catalogue": "panel-40-alpha",
"row_type": "PracticalAbsorptionSpectrum",
"about": "The practical coefficients Panel 40's data sheet prints on its page 2.",
"provenance": {
"kind": "datasheet",
"document": "Panel 40 technical data sheet",
"publisher": "Example Acoustics Ltd",
"version": "Rev. 4",
"consulted": "2026-09-25",
"laboratory": "Example Lab",
"report": "26-015",
},
"basis": "measured",
"csv": {"delimiter": ";", "decimal": ","},
}
pathlib.Path("panel-40-alpha.csv.phonometry.json").write_text(
json.dumps(header, indent=2), encoding="utf-8"
)
pathlib.Path("panel-40-alpha.csv").write_text(
"key;name;mounting;construction_depth_mm;"
"practical_absorption_coefficient_125;practical_absorption_coefficient_250;"
"practical_absorption_coefficient_500;practical_absorption_coefficient_1000;"
"practical_absorption_coefficient_2000;practical_absorption_coefficient_4000;"
"weighted_absorption_coefficient;shape_indicator;absorption_class;x-edge\n"
"e200;Panel 40;E-200;200;0,40;0,70;0,95;1,00;0,95;0,90;0,95;;A;A24\n"
"a;Panel 40;A;;[n.m.];0,25;0,70;1,05;1,00;0,95;0,60;MH;C;A24\n",
encoding="utf-8",
)
with warnings.catch_warnings():
warnings.simplefilter("ignore", io.CatalogueWarning)
sheet = io.read_catalogue(
"panel-40-alpha.csv", row_type=materials.PracticalAbsorptionSpectrum
)
for note in sheet.notes:
print(note)
# panel-40-alpha.csv, line 3, row 'a': the practical coefficient at 1000 Hz
# is printed as 1.05, above the 1.00 it is capped at (ISO 11654 Clause 4.1)
# panel-40-alpha.csv, line 3, row 'a': the weighted coefficient is printed as
# 0.60 and the bands give 0.55 (ISO 11654 Clause 4.2); the printed value is
# kept as printed
# panel-40-alpha.csv, line 3, row 'a': the absorption class is printed as 'C'
# and the bands give 'D' (ISO 11654 Annex B); the printed one is kept as
# printed
mounted = sheet["panel-40-alpha/a"]
print(mounted.practical_absorption_coefficient_1000) # 1.05
print(mounted.rating().rating_label) # 0.55(MH)
print(sheet["panel-40-alpha/e200"].rating().rating_label) # 0.95
print(mounted.why_missing("practical_absorption_coefficient_125"))
# the datasheet prints “n.m.” where the number would be

The first row prints a rating its bands give, so it has no note. The second has three: a coefficient above the cap, and a weighted coefficient and a class its own bands do not give. The notes are made once, when the file is read, and change nothing: the row keeps 1.05, 0.60 and C as printed, and rating() answers with what the bands give, without warning again. Whether the sheet or its table is the one in error is for you to find out.

A product under CE marking declares its performance under a product standard, and a declaration is a level, not a result. EN 13162, for mineral wool, declares the practical and the weighted coefficients in levels of 0.05 that no test result falls below (clause 4.3.11), the airflow resistivity in levels of 1 kPa·s/m² that no result falls below (4.3.12), and the dynamic stiffness in levels of 1 MN/m³ that no result exceeds (4.3.9), and its clause 6 codes them as APi, AWi, AFri and SDi. So “AFr5” is a lower bound of 5 kPa·s/m², “SD9” an upper bound of 9 MN/m³, and a sheet that prints “s′ ≤ 9 MN/m³” is printing the second.

Write a bound as a bound: ranges with bounded_below or bounded_above in JSON, or >=5 and <=9 in a CSV cell, and the value stays empty. Give the row, or the cell, basis "declared". A model that needs the number is then refused, and the refusal says what the sheet printed; nothing turns a bound into a value. The catalogues guide walks through a declared airflow resistivity and a declared dynamic stiffness.

basis says what the document claims a value is: measured, declared, calculated (by the document, with a standard’s model or a program), estimated or extended (a laboratory’s extended application of a result). Some catalogues mark their values with a legend of this kind, by colour or by symbol; others say nothing, and then a row with no basis is the honest answer. A value the document marks as calculated is not a measurement even when it sits in the same column as one, and the library never promotes it.

An absorber over an air space absorbs differently from the same absorber against the wall, and the sheet’s mounting says which. ISO 354 Annex B names them: type A is the specimen laid against a room surface; type E is the specimen over an air space, and its number is the distance in millimetres from the specimen’s exposed face to the surface behind it, so E-200 is 200 mm. Write it in mounting as the sheet prints it; an empty mounting means the sheet prints none, which is not type A.

ISO 11654 Clause 5.4 asks for the depth of construction of a product mounted over an air space: from the room surface to the absorber’s exposed face, the absorber included. construction_depth_mm holds it, and some sheets call it the total construction height. It is not the cavity behind the absorber, which is shorter by the absorber’s thickness.

A data sheet is revised under the same title, and not always with a note of what changed: one elastomer’s static modulus is printed as 0.19 N/mm² on one revision and 0.13 N/mm² on the next, with the test standard changed beside it. A project needs the revision it was specified against. Write the revision the sheet prints in version, or None when it prints none, and the day you read it in consulted; the row’s source cites both.

A sheet printed in Spanish, German or French writes 0,85, and a JSON number never does: in JSON write 0.85, and a text “0,85” is refused rather than guessed. A CSV file declares its decimal mark in the header; with a comma, its delimiter is a semicolon or a tab.

Type the numbers from the page as you see it. A PDF’s text layer can carry substituted glyphs, so text copied out of it reads as nonsense or, worse, as a different figure. A cell that is not a number in a CSV file is refused at its line and column, and a text the page prints where the number would be (n.m., a class code) goes between brackets, [n.m.], never as a bare word.

A laboratory report of a wall or a door prints the sound reduction index of ISO 10140-2 in one-third octaves and rates it with ISO 717-1: , and with the enlarged ranges of Annex B when the report measured from 50 Hz. SoundReductionSpectrum holds the bands and the numbers as printed, and rating() works them out again. It is not the transmission loss a book compiles, which TransmissionLossSpectrum holds.

from phonometry import building, io
bands = (50, 63, 80, 100, 125, 160, 200, 250, 315, 400, 500, 630, 800, 1000,
1250, 1600, 2000, 2500, 3150, 4000, 5000)
r_db = (18.7, 19.2, 20.0, 20.4, 16.3, 17.7, 22.6, 22.4, 22.7, 24.8, 26.6,
28.0, 30.5, 31.8, 32.5, 33.4, 33.0, 31.0, 25.5, 26.8, 29.2)
wall = {
"key": "partition",
"name": "Glazed partition",
"construction": "single 4 mm glass pane",
"weighted_sound_reduction_index_db": 30,
"spectrum_adaptation_term_db": -2,
"traffic_spectrum_adaptation_term_db": -3,
"spectrum_adaptation_term_50_5000_db": -2,
"traffic_spectrum_adaptation_term_50_5000_db": -4,
}
wall |= {f"sound_reduction_index_{b}_db": r for b, r in zip(bands, r_db, strict=True)}
provenance = {
"kind": "test_report",
"document": "Airborne sound insulation test report 26-021",
"version": None,
"consulted": "2026-09-25",
"laboratory": "Example Lab",
"report": "26-021",
"test_standard": "ISO 10140-2:2010",
}
tested = io.parse_catalogue(
{
"schema": "phonometry-catalogue",
"schema_version": 1,
"catalogue": "lab-walls",
"row_type": "SoundReductionSpectrum",
"about": "Walls rated in the laboratory, from their test reports.",
"provenance": provenance,
"basis": "measured",
"rows": [wall],
},
row_type=building.SoundReductionSpectrum,
)
rated = tested["lab-walls/partition"].rating()
print(rated.rating, rated.c, rated.ctr, rated.c_50_5000, rated.ctr_50_5000)
# 30 -2 -3 -2 -4
print(tested.notes) # () : the printed numbers are the ones the bands give

The partition’s printed numbers are the ones its bands give, so there is no note.

ISO 717-1 rating of a laboratory sound reduction index from 50 Hz to 5 kHz: the reference curve shifted to Rw = 30 dB over 100 Hz to 3.15 kHz, the unfavourable deviations shaded, and the enlarged range of Annex B greyed with its six adaptation terms in the titleISO 717-1 rating of a laboratory sound reduction index from 50 Hz to 5 kHz: the reference curve shifted to Rw = 30 dB over 100 Hz to 3.15 kHz, the unfavourable deviations shaded, and the enlarged range of Annex B greyed with its six adaptation terms in the title

ExtendedWeightedRatingResult.plot() of the partition’s row: the reference curve of ISO 717-1 shifted over the sixteen bands from 100 Hz to 3.15 kHz until it rates the partition at = 30 dB, the unfavourable deviations shaded, and the bands of the enlarged range of Annex B greyed, with their six terms in the title. The deepest deviation is the dip at 3.15 kHz, where the pane’s coincidence is.

Show the code for this figure
import matplotlib.pyplot as plt
from phonometry import building
bands = (50, 63, 80, 100, 125, 160, 200, 250, 315, 400, 500, 630, 800, 1000,
1250, 1600, 2000, 2500, 3150, 4000, 5000)
r_db = (18.7, 19.2, 20.0, 20.4, 16.3, 17.7, 22.6, 22.4, 22.7, 24.8, 26.6,
28.0, 30.5, 31.8, 32.5, 33.4, 33.0, 31.0, 25.5, 26.8, 29.2)
partition = building.SoundReductionSpectrum(
name="Glazed partition",
source="Airborne sound insulation test report 26-021",
**{f"sound_reduction_index_{b}_db": r for b, r in zip(bands, r_db, strict=True)},
)
partition.rating().plot()
plt.show()

A floating floor’s or a covering’s sheet prints the weighted reduction of impact sound pressure level of ISO 717-2, often with beside it. A laboratory report prints per band the reduction of impact sound pressure level of ISO 10140-1 Annex H: the normalized impact level of a reference floor without the covering less the one with it (Equation (H.1)), both measured by ISO 10140-3. ImpactImprovementSpectrum holds them, and rating() works out , and dB (Clause A.2.2).

from phonometry import building, io
bands = (100, 125, 160, 200, 250, 315, 400, 500, 630, 800, 1000, 1250, 1600,
2000, 2500, 3150)
delta_l_db = (3.0, 3.7, 1.9, 3.0, 3.2, 3.5, 4.0, 6.1, 6.7, 7.0, 7.7, 10.8,
15.2, 20.3, 25.4, 23.2)
covering = {
"key": "covering",
"name": "Floor covering",
"weighted_impact_improvement_db": 15,
"reference_floor_adaptation_term_db": -2,
}
covering |= {f"impact_improvement_{b}_db": d for b, d in zip(bands, delta_l_db, strict=True)}
coverings = io.parse_catalogue(
{
"schema": "phonometry-catalogue",
"schema_version": 1,
"catalogue": "lab-coverings",
"row_type": "ImpactImprovementSpectrum",
"about": "Floor coverings rated in the laboratory, from their test reports.",
"provenance": {
"kind": "test_report",
"document": "Impact sound insulation test report 26-022",
"version": None,
"consulted": "2026-09-25",
"laboratory": "Example Lab",
"report": "26-022",
"test_standard": "ISO 10140-1:2010 Annex H",
},
"basis": "measured",
"rows": [covering],
},
row_type=building.ImpactImprovementSpectrum,
)
rated = coverings["lab-coverings/covering"].rating()
print(rated.delta_lw, rated.ci_delta, rated.ci_r) # 15 -9 -2
print(coverings.notes) # ()
ISO 717-2 rating of a floor covering's reduction of impact sound pressure level per one-third octave from 100 Hz to 3.15 kHz, with ΔLw = 15 dB, CI,Δ = −9 dB and CI,r = −2 dB in the titleISO 717-2 rating of a floor covering's reduction of impact sound pressure level per one-third octave from 100 Hz to 3.15 kHz, with ΔLw = 15 dB, CI,Δ = −9 dB and CI,r = −2 dB in the title

ImpactImprovementRatingResult.plot() of the covering’s row: the the report prints per band, rated in the title. The covering takes 20 dB and more off the impact level from 2 kHz up and only 2 to 4 dB up to 400 Hz, and = −9 dB says so: the single number on the unweighted linear level, (ISO 717-2 Formula (A.5)), is 6 dB, not 15. A floating floor whose mass-spring resonance makes negative in its lowest bands keeps those bands in view.

Show the code for this figure
import matplotlib.pyplot as plt
from phonometry import building
bands = (100, 125, 160, 200, 250, 315, 400, 500, 630, 800, 1000, 1250, 1600,
2000, 2500, 3150)
delta_l_db = (3.0, 3.7, 1.9, 3.0, 3.2, 3.5, 4.0, 6.1, 6.7, 7.0, 7.7, 10.8,
15.2, 20.3, 25.4, 23.2)
covering = building.ImpactImprovementSpectrum(
name="Floor covering",
source="Impact sound insulation test report 26-022",
**{f"impact_improvement_{b}_db": d for b, d in zip(bands, delta_l_db, strict=True)},
)
covering.rating().plot()
plt.show()

A sheet that declares rather than printing the bands is written as the bound it is:

from phonometry import building, io
sheet = io.parse_catalogue(
{
"schema": "phonometry-catalogue",
"schema_version": 1,
"catalogue": "floor-mats",
"row_type": "ImpactImprovementSpectrum",
"about": "Floating-floor mats as their data sheets declare them.",
"provenance": {
"kind": "datasheet",
"document": "Floor mat 33 data sheet",
"publisher": "Example Acoustics Ltd",
"version": "04-2026",
"consulted": "2026-09-25",
},
"basis": "declared",
"rows": [
{
"key": "mat-33",
"name": "Floor mat 33 under a 50 mm screed",
"ranges": {"weighted_impact_improvement_db": [26, None]},
"bounded_below": ["weighted_impact_improvement_db"],
}
],
},
row_type=building.ImpactImprovementSpectrum,
)
mat = sheet["floor-mats/mat-33"]
try:
building.predicted_impact_insulation(
ln_w_eq=78.0,
delta_l_w=mat.printed(
"weighted_impact_improvement_db", wanted_by="EN 12354-2 Formula 21"
),
)
except ValueError as error:
print(error)
# 'Floor mat 33 under a 50 mm screed' has no weighted_impact_improvement_db,
# which 'EN 12354-2 Formula 21' needs: the datasheet prints a lower bound of
# 26 and no value (...)

The mat’s sheet declares its improvement as at least 26 dB, which is not a value the prediction can take, and the refusal says so. A rating a sheet prints and no function of this library works out (an STC, an IIC, a flanking level difference) has no field of its own; write it in the row’s note.

  • No printed coefficient is rounded, clipped or moved to the grid, and no rating printed on the sheet is replaced by the one its bands give; the practical coefficients practical() works out are rounded as Clause 4.1 says, and marked as derived.
  • No octave is formed from one-third octaves the row does not print or from a negative one, no negative coefficient is read as 0, and no band is filled from its neighbours.
  • No bound becomes a value, and no declared level is read as a measurement.
  • No note changes a cell: a note is read once, beside the catalogue.
  • Covered

    Reading a data sheet’s practical absorption coefficients (materials.PracticalAbsorptionSpectrum), a test report’s one-third-octave coefficients (materials.ThirdOctaveAbsorptionSpectrum) with the practical coefficients they give, a laboratory sound reduction index (building.SoundReductionSpectrum) and a reduction of impact sound pressure level (building.ImpactImprovementSpectrum), each rated again from its bands with rating(), whose result draws itself with plot(); the notes a reader keeps for a value off the ISO 11654 grid or above its cap and for a printed rating the bands do not give; and how to write a declared level, a mounting, a revision and a word printed where a number would be.

  • Not covered

    The noise reduction coefficient, the sound absorption average, the STC, the IIC and any other rating no function of this library works out are held as printed or in a note and never checked. No sheet is read from a PDF: the numbers are typed from the page. No manufacturer’s data ships with the library, and a sheet pasted into an issue or a pull request is never merged.

  • European Committee for Standardization. (2015). Thermal insulation products for buildings — Factory made mineral wool (MW) products — Specification (EN 13162:2012+A1:2015). A product standard under CE marking and what its declarations mean: clause 4.3.9 declares the dynamic stiffness in levels no test result exceeds, 4.3.11 the practical and weighted coefficients in levels no result falls below, 4.3.12 the airflow resistivity likewise, and clause 6 codes them as SDi, APi, AWi and AFri. Read from BS EN 13162:2012+A1:2015.
  • International Organization for Standardization. (1997). Acoustics — Sound absorbers for use in buildings — Rating of sound absorption (ISO 11654:1997). The practical coefficient of Clause 4.1, the mean of three one-third octaves rounded in steps of 0.05 and set to 1.00 above it; the weighted coefficient and its shape indicators of Clauses 4.2 and 4.3; Clause 1, which starts the rating at 250 Hz; Clause 5, which gives every coefficient to two decimals and asks for the depth of construction. Read from BS EN ISO 11654:1997.
  • International Organization for Standardization. (2003). Acoustics — Measurement of sound absorption in a reverberation room (ISO 354:2003). The one-third-octave sound absorption coefficient a test report prints, which 3.9 NOTE 2 says can exceed 1.0 because of diffraction effects, and the mountings of Annex B: type A against a room surface, type E over an air space whose number is the distance in millimetres from the specimen's face to the surface behind it.
  • International Organization for Standardization. (2010). Acoustics — Laboratory measurement of sound insulation of building elements — Part 1: Application rules for specific products (ISO 10140-1:2010). Annex H, Equation (H.1): the reduction of impact sound pressure level ΔL = Ln0 − Ln of a floor covering on a reference floor, the difference between the normalized impact levels without and with it, which ImpactImprovementSpectrum holds. Read from BS EN ISO 10140-1:2010+A2:2014.
  • International Organization for Standardization. (2010). Acoustics — Laboratory measurement of sound insulation of building elements — Part 2: Measurement of airborne sound insulation (ISO 10140-2:2010). The laboratory sound reduction index R of a wall or a door, one-third octave by one-third octave, which a test report prints and SoundReductionSpectrum holds.
  • International Organization for Standardization. (2010). Acoustics — Laboratory measurement of sound insulation of building elements — Part 3: Measurement of impact sound insulation (ISO 10140-3:2010). The measurement of the normalized impact sound pressure levels, with the covering and without it, from which Annex H of ISO 10140-1 forms ΔL.
  • International Organization for Standardization. (2020). Acoustics — Rating of sound insulation in buildings and of building elements — Part 1: Airborne sound insulation (ISO 717-1:2020). Rw with C and Ctr, and the adaptation terms of the enlarged frequency ranges of Annex B, which a report prints beside R.
  • International Organization for Standardization. (2020). Acoustics — Rating of sound insulation in buildings and of building elements — Part 2: Impact sound insulation (ISO 717-2:2020). The weighted reduction of impact sound pressure level against the reference floor of Table 4, and Clause A.2.2 with CI,Δ = CI,r,0 − CI,r, CI,r,0 = −11 dB (Formula (A.4)).