Skip to content

Split the metrology catch-all into filters, signals and metrology - #472

Merged
jmrplens merged 7 commits into
mainfrom
split-metrology
Aug 1, 2026
Merged

Split the metrology catch-all into filters, signals and metrology#472
jmrplens merged 7 commits into
mainfrom
split-metrology

Conversation

@jmrplens

@jmrplens jmrplens commented Aug 1, 2026

Copy link
Copy Markdown
Owner

What and why

phonometry.metrology had grown to 21 modules over four unrelated subjects, and every layer above it had already worked around that: the generated reference spread it over six sections, the sidebar over four groups, and the name predicted neither cepstrum nor signals. The code was the only layer that had not split it.

It becomes three packages:

  • phonometry.filters: the normalized frequency selectivity. Filter banks, frequency and time weightings, the RBJ equalizer, IEC 61260-1 and IEC 61672-1 class verification.
  • phonometry.signals: the signals themselves and what is done to them. Levels, Welch and multitaper spectra, coherence, time-frequency, correlation, envelope, cepstrum, phase, synchronous averaging, and the test-signal generators (tone bursts, white/pink/brown noise, resampling).
  • phonometry.metrology: what gives it its name. Calibration, GUM uncertainty, data qualification and the IEC 61043 intensity-instrument class check.

Four modules drop a prefix their package now carries: filter_design to filters.design, parametric_filters to filters.weighting, signals to signal.test_signals and random_data to metrology.data_qualification, the name its documentation page already had. The renderers follow the same cut, so _plot/metrology.py becomes three modules with their own string tables, and the tests move with the modules.

The generated reference is keyed by subpackage from here on. Its sections were a fourth naming of the same material, so a reader who knew where a function lived could not predict where its page lived; they are now filters, signals and metrology, and the pages move with them: five sections drew from metrology under four different names, three now draw from three packages under their own. The three sections that deliberately span two parents are untouched, and one of them is why the rule is not yet universal: metrology.intensity_compliance is still documented with the intensity chain it verifies, in the power section.

Compatibility. The flat API is untouched: from phonometry import leq, octave_filter is what it always was. Every pre-split module path still imports through a PEP 562 shim and delegates, and reading a moved name from the namespace it left (metrology.leq after from phonometry import metrology) keeps working with the same rename notice, which module-path shims alone would not have covered and which is the form the documentation leads with. The 3.x aliases still resolve in one hop, retargeted to the modules' new homes. The new aliases go in 5.0, so the notice now names the release that removes it instead of assuming the next major. The one form a PEP 562 hook cannot serve is from phonometry.metrology import *, which now brings the narrowed API; dir() still lists the moved names so they do not vanish from tab completion a release early.

Documentation snippets, the README, the PyPI long description and the landing page call through the package that now owns each function, and the guide cross-links follow the pages that moved.

Validation

No new computation: this moves code, it does not change any result. The full suite passes unchanged (7840 passed, 23 skipped) and the conformance report, the committed figures and the example fiches are all byte-for-byte identical to what is on main, which is the evidence that nothing was recomputed.

The compatibility surface is covered by new tests: a frozen snapshot of the 18 pre-split module paths, the release named in the notice, the namespace shim delegating and raising for unknown names, and the module-or-function ambiguity (metrology.correlation resolves to the function, as the pre-split package did).

Checklist

Ran locally, same as CI:

  • ruff check .
  • mypy src scripts
  • bandit -r src
  • pytest -q

Regenerated where this change touches them:

  • make conformance (no diff: 533/533 checks, 57 domains)
  • make api-docs, with the reference tree and api-sidebar.mjs committed
  • make llms, with llms.txt, llms-full.txt and the shards committed
  • make graphs plus check_figures.py and check_figure_contrast.py (no diff: all 1692 figures match)
  • make reports plus check_reports.py (no diff: all 67 fiches match)
  • make pypi-readme after editing README.md

Applies to new API:

  • Modules registered in scripts/api_taxonomy.py
  • docs/api-reference.md covers every __all__ name
  • .plot() renderers split alongside their packages under src/phonometry/_plot/
  • New package paths added to .github/labeler.yml

Always:

  • Documentation updated in English and Spanish, kept in step (i18n parity passes, 149 EN / 149 ES)
  • CHANGELOG entry under [Unreleased]

Also run: the site builds clean with the link validator green (it caught the guide cross-links to the moved API pages, which is what closed them), check:math, html-validate, and every fenced snippet that calls through one of the three packages was executed against this branch and against main, with an identical pass and failure set.

Summary by Sourcery

Split the monolithic metrology API into dedicated filters and signal subpackages while preserving the flat top-level interface and adding compatibility shims for pre-4.0 module and namespace access.

New Features:

  • Introduce phonometry.filters as the home for filter banks, frequency/time weighting, parametric EQ and IEC filter/weighting class verification.
  • Introduce phonometry.signal as the home for general signal analysis, including levels, spectral estimators, coherence, time-frequency, correlation, envelope, cepstrum, phase, synchronous averaging and test signals.

Enhancements:

  • Add PEP 562-based namespace shims and updated module-path aliases so pre-split metrology imports and attribute access continue working with deprecation notices through 5.0.
  • Split plotting helpers into filters- and signal-specific modules and update all result objects to use the new renderers without changing plotted output.
  • Retarget internal imports, architecture checks and conformance scripts to the new filters/signal packages to keep cross-package dependencies consistent with the new taxonomy.

CI:

  • Extend deprecated-alias tests to cover the new 4.0 metrology split, including frozen pre-split module-path coverage and namespace shim behaviour.

Documentation:

  • Regenerate API reference and guides to document the new filters and signal namespaces, update examples and links, and clarify that calibration/uncertainty now live in the narrowed metrology package.
  • Update README, PyPI long description and site content to route users through the new subpackages while keeping the documented flat top-level API intact.

Tests:

  • Relocate and update unit tests from metrology to filters and signal namespaces, including stateful filter-bank tests, weighting/class compliance, levels and signal toolbox coverage.
  • Add explicit tests for shim removal schedule and namespace resolution semantics so deprecated paths and names remain stable until their advertised removal releases.

Chores:

  • Update GitHub labeler configuration to track changes under the new filters and signal directories.
  • Record the taxonomy split and deprecation schedule in the CHANGELOG under the upcoming release section.

Review notes

Two rounds of adversarial review ran on this branch. What they changed is in the follow-up commits; two of their findings were rejected and are worth stating:

  • No redirects for the moved reference pages. The site breaks URLs in this reorganisation on purpose: it is published but unannounced, and the redirects map in astro.config.mjs does not grow with the taxonomy work. The safety net is starlight-links-validator, which is what caught the guide cross-links this branch had to fix.
  • verify_aircraft_noise_system sitting in filters.compliance. It verifies an IEC 61265 aircraft-noise measurement system, not a filter, so the narrower package name does expose an old inconsistency. Moving a public function between modules is a different decision from moving modules, and it is not what this change is about.

The package is plural because it holds both halves of the subject, the generators and the analysis, and because the singular collided with scipy.signal: 75 fenced blocks import it and 14 more bind signal as a variable, so from phonometry import signal rebinds a name that is already taken and fails several lines later. scripts/check_doc_snippets.py now runs every snippet the guides print and rejects that shadowing statically, in both languages, with its own tests.

Also known and deliberate: from phonometry.metrology import * now brings the narrowed API rather than the pre-split re-export surface, because a PEP 562 hook cannot serve a star import. Every explicit form keeps working and dir() still lists the moved names.

The package had grown to 21 modules over four unrelated subjects, and every
layer above it had already worked around that: the generated reference split
it into seven sections, the sidebar into four groups, and the name predicted
neither cepstrum nor signals. The code was the only layer that had not
split it.

phonometry.filters takes the normalized frequency selectivity: the filter
banks, the frequency and time weightings, the RBJ equalizer and the
IEC 61260-1 / IEC 61672-1 class verification. phonometry.signal takes the
general signal analysis: levels, spectra, coherence, time-frequency,
correlation, envelope, cepstrum, phase, synchronous averaging and the test
signals. phonometry.metrology keeps what gives it its name: calibration, GUM
uncertainty and data qualification, plus the IEC 61043 intensity class
checker that documents with the intensity chain.

Four modules drop a prefix their package now carries: filter_design to
filters.design, parametric_filters to filters.weighting, signals to
signal.test_signals and random_data to metrology.data_qualification, the name
its documentation page already had. The renderers follow the same cut, so
_plot/metrology.py becomes three modules with their own string tables.

Nothing breaks for a caller. The flat API is untouched, every 3.x module path
still resolves in one hop, every pre-split path imports through a PEP 562
shim, and reading a moved name from the namespace it left keeps working with
the same rename notice. That last one is not covered by module-path shims and
the namespace form is what the documentation leads with, so it gets its own
resolution through the public __all__ of the packages the names moved to: a
name that stops being public stops resolving through the old namespace too.
The aliases go in 5.0 rather than 4.0, so the notice now names the release
that removes it instead of assuming the next major.

The generated reference is keyed by subpackage from here on. Its sections
were a fourth naming of the same material, so a reader who knew where a
function lived could not predict where its page lived; they are now filters,
signal and metrology, and the pages move with them. The taxonomy contract
loses two of its cross-package exceptions in the process.

The tests move with the modules, the frontloaded list keeps naming a file
that exists, and the architecture whitelist treats the three packages as the
transverse toolbox every domain may import, which is the policy metrology
already had. Snippets across the documentation, the README and the landing
page call through the package that now owns each function, so nothing
published teaches a path that warns.
Follow-up to the split, from an adversarial review of it.

The guides link to the generated reference by URL, and three of those
directories no longer exist, so 43 links pointed at 404s: the pages under
levels/, spectra/ and correlation/ moved, parametric-filters became weighting
and random-data became data-qualification. The audit configuration had the
same three stale URLs, so pa11y, lighthouse and the language-suggestion check
were all requesting a page that is not built any more.

Seven snippets imported the new `signal` package into a block that already
does `from scipy import signal`, which rebinds the name and crashes on the
next line. The package was not used from phonometry in any of them, so it
comes back out; every fenced block that imports scipy's signal now runs.

The llms snippet lost a line in the rewrite and called `metrology.ln_levels`
without importing metrology, and the generated shards were a regeneration
behind. The taxonomy docstring said `_parent_subpackage` returns `metrology`
for a `signal` module, which a blind rewrite had made false.

`dir()` on the narrowed metrology namespace was hiding the names that left
it: a PEP 562 hook is invisible to it, so they disappeared from tab
completion a release before they stop working. `__all__` stays narrow, so
`from phonometry.metrology import *` gives the 4.0 API and not the deprecated
names, which the changelog now says instead of claiming nothing changes.
The area labels are per subpackage, so filters and signal need their own
globs; without them a change confined to either lands unlabelled.
Copilot AI review requested due to automatic review settings August 1, 2026 19:51

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @jmrplens, your pull request is larger than the review limit of 150000 diff characters

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 239 files, which is 139 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 37a220c9-6e85-46cd-919d-d17fce0a7448

📥 Commits

Reviewing files that changed from the base of the PR and between 1989cad and eca022d.

⛔ Files ignored due to path filters (1)
  • site/src/generated/api-sidebar.mjs is excluded by !**/generated/**
📒 Files selected for processing (239)
  • .github/labeler.yml
  • .github/workflows/python-app.yml
  • CHANGELOG.md
  • Makefile
  • README.md
  • README_PYPI.md
  • docs/aircraft-noise.md
  • docs/api-reference.md
  • docs/block-processing.md
  • docs/calibration.md
  • docs/cepstrum-echoes.md
  • docs/correlation-delay.md
  • docs/data-qualification.md
  • docs/filter-banks.md
  • docs/filter-compliance.md
  • docs/filter-gallery.md
  • docs/getting-started.md
  • docs/levels.md
  • docs/miso-coherence.md
  • docs/multichannel.md
  • docs/sound-level-meter.md
  • docs/special-weightings.md
  • docs/spectral-analysis.md
  • docs/swept-sine-distortion.md
  • docs/test-signals.md
  • docs/theory-signal-analysis.md
  • docs/time-frequency.md
  • docs/time-weighting.md
  • docs/weighting.md
  • docs/why-phonometry.md
  • llms-full.txt
  • llms.txt
  • scripts/api_taxonomy.py
  • scripts/check_doc_snippets.py
  • scripts/check_jit_kernel.py
  • scripts/conformance_report.py
  • scripts/generate_api_docs.py
  • scripts/generate_graphs.py
  • scripts/generate_llms.py
  • site/.pa11yci.json
  • site/public/llms/llms-aircraft-wind.txt
  • site/public/llms/llms-calibration-uncertainty.txt
  • site/public/llms/llms-core-signal-analysis.txt
  • site/public/llms/llms-electroacoustics.txt
  • site/public/llms/llms-levels-weighting.txt
  • site/public/llms/llms-octave-filtering.txt
  • site/public/llms/llms-signals-spectra.txt
  • site/public/llms/llms-sound-insulation.txt
  • site/public/llms/llms-sound-power.txt
  • site/public/llms/llms-start.txt
  • site/scripts/check-lang-suggest.mjs
  • site/scripts/lighthouse-audit.mjs
  • site/src/content/docs/es/getting-started.mdx
  • site/src/content/docs/es/guides/aircraft-noise.mdx
  • site/src/content/docs/es/guides/block-processing.mdx
  • site/src/content/docs/es/guides/calibration.mdx
  • site/src/content/docs/es/guides/cepstrum-echoes.mdx
  • site/src/content/docs/es/guides/correlation-delay.mdx
  • site/src/content/docs/es/guides/data-qualification.mdx
  • site/src/content/docs/es/guides/filter-banks.mdx
  • site/src/content/docs/es/guides/filter-compliance.mdx
  • site/src/content/docs/es/guides/filter-gallery.mdx
  • site/src/content/docs/es/guides/levels.mdx
  • site/src/content/docs/es/guides/miso-coherence.mdx
  • site/src/content/docs/es/guides/multichannel.mdx
  • site/src/content/docs/es/guides/sound-level-meter.mdx
  • site/src/content/docs/es/guides/special-weightings.mdx
  • site/src/content/docs/es/guides/spectral-analysis.mdx
  • site/src/content/docs/es/guides/swept-sine-distortion.mdx
  • site/src/content/docs/es/guides/synchronous-averaging.mdx
  • site/src/content/docs/es/guides/test-signals.mdx
  • site/src/content/docs/es/guides/time-frequency.mdx
  • site/src/content/docs/es/guides/time-weighting.mdx
  • site/src/content/docs/es/guides/weighting.mdx
  • site/src/content/docs/es/reference/theory/signal-analysis.mdx
  • site/src/content/docs/es/reference/why-phonometry.mdx
  • site/src/content/docs/getting-started.mdx
  • site/src/content/docs/guides/aircraft-noise.mdx
  • site/src/content/docs/guides/block-processing.mdx
  • site/src/content/docs/guides/calibration.mdx
  • site/src/content/docs/guides/cepstrum-echoes.mdx
  • site/src/content/docs/guides/correlation-delay.mdx
  • site/src/content/docs/guides/data-qualification.mdx
  • site/src/content/docs/guides/filter-banks.mdx
  • site/src/content/docs/guides/filter-compliance.mdx
  • site/src/content/docs/guides/filter-gallery.mdx
  • site/src/content/docs/guides/levels.mdx
  • site/src/content/docs/guides/miso-coherence.mdx
  • site/src/content/docs/guides/multichannel.mdx
  • site/src/content/docs/guides/sound-level-meter.mdx
  • site/src/content/docs/guides/special-weightings.mdx
  • site/src/content/docs/guides/spectral-analysis.mdx
  • site/src/content/docs/guides/swept-sine-distortion.mdx
  • site/src/content/docs/guides/synchronous-averaging.mdx
  • site/src/content/docs/guides/test-signals.mdx
  • site/src/content/docs/guides/time-frequency.mdx
  • site/src/content/docs/guides/time-weighting.mdx
  • site/src/content/docs/guides/weighting.mdx
  • site/src/content/docs/reference/api/aeroacoustics/wind-turbine-noise.md
  • site/src/content/docs/reference/api/broadcast/program-loudness.md
  • site/src/content/docs/reference/api/building/building-prediction.md
  • site/src/content/docs/reference/api/building/building-uncertainty.md
  • site/src/content/docs/reference/api/building/flanking-transmission.md
  • site/src/content/docs/reference/api/building/installed-structure-borne.md
  • site/src/content/docs/reference/api/building/intensity-insulation.md
  • site/src/content/docs/reference/api/building/lab-insulation.md
  • site/src/content/docs/reference/api/building/survey-insulation.md
  • site/src/content/docs/reference/api/environment/air-absorption.md
  • site/src/content/docs/reference/api/environment/outdoor-propagation.md
  • site/src/content/docs/reference/api/filters/compliance.md
  • site/src/content/docs/reference/api/filters/core.md
  • site/src/content/docs/reference/api/filters/equalizer.md
  • site/src/content/docs/reference/api/filters/frequencies.md
  • site/src/content/docs/reference/api/filters/weighting.md
  • site/src/content/docs/reference/api/hearing/occupational-exposure.md
  • site/src/content/docs/reference/api/index.md
  • site/src/content/docs/reference/api/materials/absorption-uncertainty.md
  • site/src/content/docs/reference/api/metrology/calibration.md
  • site/src/content/docs/reference/api/metrology/data-qualification.md
  • site/src/content/docs/reference/api/psychoacoustics/tone-audibility.md
  • site/src/content/docs/reference/api/rooms/room-acoustics.md
  • site/src/content/docs/reference/api/rooms/room-ir.md
  • site/src/content/docs/reference/api/signals/cepstrum.md
  • site/src/content/docs/reference/api/signals/correlation.md
  • site/src/content/docs/reference/api/signals/envelope.md
  • site/src/content/docs/reference/api/signals/inversion.md
  • site/src/content/docs/reference/api/signals/levels.md
  • site/src/content/docs/reference/api/signals/miso.md
  • site/src/content/docs/reference/api/signals/phase.md
  • site/src/content/docs/reference/api/signals/spectra.md
  • site/src/content/docs/reference/api/signals/synchronous-average.md
  • site/src/content/docs/reference/api/signals/test-signals.md
  • site/src/content/docs/reference/api/signals/time-frequency.md
  • site/src/content/docs/reference/api/vibration/machine-diagnostics.md
  • site/src/content/docs/reference/theory/signal-analysis.mdx
  • site/src/content/docs/reference/why-phonometry.mdx
  • site/src/data/home.ts
  • src/phonometry/__init__.py
  • src/phonometry/_compat.py
  • src/phonometry/_internal/peaks.py
  • src/phonometry/_internal/warnings.py
  • src/phonometry/_plot/common.py
  • src/phonometry/_plot/filters.py
  • src/phonometry/_plot/metrology.py
  • src/phonometry/_plot/room.py
  • src/phonometry/_plot/signals.py
  • src/phonometry/_plot/vibration.py
  • src/phonometry/_report/_sound_power_fiche.py
  • src/phonometry/_report/iec61260.py
  • src/phonometry/_report/iso3382.py
  • src/phonometry/broadcast/program_loudness.py
  • src/phonometry/building/building_prediction.py
  • src/phonometry/building/building_uncertainty.py
  • src/phonometry/building/flanking_transmission.py
  • src/phonometry/building/heavy_impact.py
  • src/phonometry/building/installed_structure_borne.py
  • src/phonometry/building/intensity_insulation.py
  • src/phonometry/building/lab_insulation.py
  • src/phonometry/building/survey_insulation.py
  • src/phonometry/electroacoustics/distortion.py
  • src/phonometry/electroacoustics/frequency_response.py
  • src/phonometry/emission/intensity.py
  • src/phonometry/environmental/air_absorption.py
  • src/phonometry/environmental/impulsive_sound.py
  • src/phonometry/environmental/outdoor_propagation.py
  • src/phonometry/environmental/wind_turbine_noise.py
  • src/phonometry/filters/__init__.py
  • src/phonometry/filters/compliance.py
  • src/phonometry/filters/core.py
  • src/phonometry/filters/design.py
  • src/phonometry/filters/equalizer.py
  • src/phonometry/filters/frequencies.py
  • src/phonometry/filters/weighting.py
  • src/phonometry/hearing/occupational_exposure.py
  • src/phonometry/hearing/sti.py
  • src/phonometry/materials/absorption_uncertainty.py
  • src/phonometry/metrology/__init__.py
  • src/phonometry/metrology/calibration.py
  • src/phonometry/metrology/data_qualification.py
  • src/phonometry/psychoacoustics/_zwicker_data.py
  • src/phonometry/psychoacoustics/tonality.py
  • src/phonometry/psychoacoustics/tone_audibility.py
  • src/phonometry/room/room_acoustics.py
  • src/phonometry/signals/__init__.py
  • src/phonometry/signals/cepstrum.py
  • src/phonometry/signals/correlation.py
  • src/phonometry/signals/envelope.py
  • src/phonometry/signals/inversion.py
  • src/phonometry/signals/levels.py
  • src/phonometry/signals/miso.py
  • src/phonometry/signals/phase.py
  • src/phonometry/signals/spectra.py
  • src/phonometry/signals/synchronous_average.py
  • src/phonometry/signals/test_signals.py
  • src/phonometry/signals/time_frequency.py
  • src/phonometry/underwater/pile_driving_noise.py
  • src/phonometry/vibration/machine_diagnostics.py
  • tests/aircraft/test_aircraft_noise_system.py
  • tests/conftest.py
  • tests/filters/test_b_au_d_weightings.py
  • tests/filters/test_compliance.py
  • tests/filters/test_design.py
  • tests/filters/test_filters_plot_i18n.py
  • tests/filters/test_g_weighting.py
  • tests/filters/test_iec61260_report.py
  • tests/filters/test_iec_compliance.py
  • tests/filters/test_iec_weighting_table3.py
  • tests/filters/test_nominal_frequencies.py
  • tests/filters/test_parametric_eq.py
  • tests/filters/test_stateful_octave_filter_bank.py
  • tests/filters/test_stateful_weighting_filter.py
  • tests/filters/test_weighting_class_verifier.py
  • tests/metrology/test_data_qualification.py
  • tests/metrology/test_metrology_plot_i18n.py
  • tests/signals/test_cepstrum.py
  • tests/signals/test_correlation.py
  • tests/signals/test_envelope.py
  • tests/signals/test_inversion.py
  • tests/signals/test_levels.py
  • tests/signals/test_miso.py
  • tests/signals/test_parametrized_signals.py
  • tests/signals/test_phase.py
  • tests/signals/test_signal_theory_limits.py
  • tests/signals/test_signal_toolbox.py
  • tests/signals/test_signals.py
  • tests/signals/test_signals_plot_i18n.py
  • tests/signals/test_spectra.py
  • tests/signals/test_synchronous_average.py
  • tests/signals/test_time_frequency.py
  • tests/signals/test_window_metrics.py
  • tests/test_basic.py
  • tests/test_check_doc_snippets.py
  • tests/test_conformance_report.py
  • tests/test_deprecated_aliases.py
  • tests/test_errors_and_edge_cases.py
  • tests/test_matplotlib_backend.py
  • tests/test_package_architecture.py
  • tests/test_performance.py
  • tests/vibration/test_machine_diagnostics.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Review on demand using usage pricing

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@bito-code-review

Copy link
Copy Markdown

You've reached the fair usage limit for the Bito Code Review Agent trial. Upgrade to a paid plan or contact support@bito.in for assistance. Learn more

@github-actions github-actions Bot added documentation Improvements or additions to documentation conformance Standard clause coverage, reference values or errata api Public API surface, naming and deprecations figures Generated plots, diagrams and animations reports Accredited-format .report() fiches and their rendering site Documentation website i18n English and Spanish translations performance Speed and memory of computations ci Workflows, linting and developer tooling area: aircraft Aircraft and rotorcraft noise area: broadcast Programme loudness and broadcast levels area: building Sound insulation and building acoustics area: electroacoustics Transducers, arrays and electroacoustic devices area: emission Sound power and source emission area: environment Outdoor propagation, environmental sources and noise assessment area: hearing Audiometric thresholds, hearing loss and noise exposure area: metrology Calibration, uncertainty and measurement quality area: psychoacoustics Loudness, sharpness, roughness and annoyance area: room Room acoustics and reverberation area: underwater Underwater acoustics and propagation area: vibration Human vibration and structure-borne sound area: core Shared internals and cross-cutting code every domain depends on labels Aug 1, 2026
@sourcery-ai

sourcery-ai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Reviewer's Guide

Splits the large phonometry.metrology subpackage into three domain packages (filters, signal, metrology), updates plotting, compatibility shims, tests, taxonomy, docs, and labeler accordingly, while preserving the flat API and pre-4.0 module paths via PEP 562 shims and namespace redirects.

Sequence diagram for namespace shim resolving moved signal names

sequenceDiagram
    actor User
    participant phonometry as phonometry
    participant metrology as phonometry.metrology
    participant shim as _namespace_shim
    participant signal_levels as phonometry.signal.levels

    User->>phonometry: import metrology
    phonometry-->>User: bind metrology

    User->>metrology: leq(...)
    metrology->>shim: __getattr("leq")
    shim->>signal_levels: import_module(signal.levels)
    signal_levels-->>shim: __all__ contains leq
    shim->>shim: _warn_renamed("'phonometry.metrology.leq'","'phonometry.signal.leq'")
    shim-->>User: return leq
    User->>signal_levels: leq(x, fs)
Loading

File-Level Changes

Change Details Files
Split the former metrology catch-all into dedicated filters and signal packages plus a narrowed metrology, and wire them into the flat top-level API.
  • Introduce new phonometry.filters and phonometry.signal packages with init modules that re-export the moved functionality and results types.
  • Move filter-bank, weighting, parametric EQ, IEC 61260/61672 compliance, frequency utilities from metrology.* modules into filters.* modules.
  • Move levels, spectra, correlation, envelope, cepstrum, phase, synchronous averaging, inversion, test signals, time-frequency modules from metrology.* into signal..
  • Update phonometry.init imports to re-export from filters. and signal.* instead of metrology.*, keeping public names and semantics unchanged.
src/phonometry/filters/__init__.py
src/phonometry/signal/__init__.py
src/phonometry/metrology/__init__.py
src/phonometry/__init__.py
src/phonometry/filters/compliance.py
src/phonometry/filters/core.py
src/phonometry/filters/equalizer.py
src/phonometry/filters/frequencies.py
src/phonometry/filters/weighting.py
src/phonometry/signal/levels.py
src/phonometry/signal/spectra.py
src/phonometry/signal/correlation.py
src/phonometry/signal/envelope.py
src/phonometry/signal/cepstrum.py
src/phonometry/signal/phase.py
src/phonometry/signal/synchronous_average.py
src/phonometry/signal/inversion.py
src/phonometry/signal/test_signals.py
src/phonometry/signal/time_frequency.py
Add and extend compatibility shims so all pre-3.2 and pre-4.0 module paths and metrology namespace attribute access continue to work with clear deprecation notices.
  • Split the _compat alias table into two generations (3.x moves and 4.0 taxonomy split) with explicit since/removed_in metadata.
  • Add MOVED_4X entries mapping phonometry.metrology.* modules to phonometry.filters.* and phonometry.signal.* equivalents.
  • Implement _namespace_shim and _namespace_dir helpers so phonometry.metrology.getattr and dir forward moved names to filters/signal while still listing them.
  • Update _install to register both generations of module-path aliases and only bind top-level ones onto the phonometry package.
  • Teach _warn_renamed to accept removed_in and use 5.0 for 4.0 aliases.
  • Extend tests to cover pre-split metrology module path imports, removal version messaging, namespace shim behaviour, and combined moved-module shim coverage.
src/phonometry/_compat.py
src/phonometry/_internal/warnings.py
src/phonometry/metrology/__init__.py
tests/test_deprecated_aliases.py
Split the metrology plotting backend into filters and signal-specific modules and update TYPE_CHECKING imports and result .plot() calls accordingly.
  • Remove filter-class plotting and signal-analysis plotting code from _plot/metrology.py and create new _plot/filters.py and _plot/signal.py with the same functionality and i18n tables.
  • Adjust TYPE_CHECKING imports in plotting modules to reference phonometry.filters.* and phonometry.signal.* result types rather than metrology.*.
  • Update result classes in filters.compliance, filters.equalizer, signal.spectra, signal.correlation, signal.envelope, signal.cepstrum, signal.synchronous_average, signal.inversion, signal.test_signals, signal.time_frequency etc. to import their plot functions from the new plotting modules.
  • Update tests that referenced old plotting paths or modules to point at the new ones.
src/phonometry/_plot/metrology.py
src/phonometry/_plot/filters.py
src/phonometry/_plot/signal.py
src/phonometry/filters/compliance.py
src/phonometry/filters/equalizer.py
src/phonometry/signal/spectra.py
src/phonometry/signal/correlation.py
src/phonometry/signal/envelope.py
src/phonometry/signal/cepstrum.py
src/phonometry/signal/synchronous_average.py
src/phonometry/signal/inversion.py
src/phonometry/signal/test_signals.py
src/phonometry/signal/time_frequency.py
src/phonometry/vibration/machine_diagnostics.py
tests/test_matplotlib_backend.py
Retarget internal references and domain modules that previously imported metrology.* functionality to the new filters and signal namespaces.
  • Update building, environmental, electroacoustics, emission, hearing, psychoacoustics, room, underwater, vibration and broadcast modules to import OctaveFilterBank, weighting/time_weighting, spectra helpers, etc. from filters.* or signal.* instead of metrology..
  • Adjust report generators (IEC 61260 fiche, ISO 3382, sound power fiches, conformance report) and scripts (generate_graphs, generate_api_docs, generate_llms, check_jit_kernel) to refer to new filters/signal modules.
  • Fix tests that depended on metrology. implementations (filter design/compliance, weighting class verifier, stateful octave bank, levels, signal toolbox, synchronous averaging, etc.) to import from filters.* and signal.*.
  • Ensure all references in docs to metrology.core, metrology.parametric_filters, metrology.spectra, etc. are updated to filters.core, filters.weighting, signal.spectra, etc.
src/phonometry/environmental/impulsive_sound.py
src/phonometry/emission/intensity.py
src/phonometry/electroacoustics/frequency_response.py
src/phonometry/electroacoustics/distortion.py
src/phonometry/building/heavy_impact.py
src/phonometry/underwater/pile_driving_noise.py
src/phonometry/room/room_acoustics.py
src/phonometry/_report/iec61260.py
src/phonometry/_report/iso3382.py
src/phonometry/_report/_sound_power_fiche.py
scripts/conformance_report.py
scripts/generate_graphs.py
scripts/api_taxonomy.py
scripts/generate_llms.py
scripts/check_jit_kernel.py
tests/filters/test_stateful_octave_filter_bank.py
tests/filters/test_filter_design.py
tests/filters/test_b_au_d_weightings.py
tests/filters/test_compliance.py
tests/filters/test_iec_compliance.py
tests/filters/test_weighting_class_verifier.py
tests/signal/test_levels.py
tests/signal/test_cepstrum.py
tests/signal/test_correlation.py
tests/signal/test_miso.py
tests/signal/test_signal_toolbox.py
tests/signal/test_synchronous_average.py
tests/test_basic.py
tests/test_performance.py
tests/test_package_architecture.py
tests/test_conformance_report.py
tests/test_errors_and_edge_cases.py
tests/aircraft/test_aircraft_noise_system.py
tests/vibration/test_machine_diagnostics.py
Retaxonomize the API reference and documentation to use filters/signal/metrology sections keyed by subpackage names, and update snippets to call through the new packages.
  • Change api_taxonomy sections so filters covers phonometry and filters., signal covers signal., and metrology covers calibration, uncertainty, data_qualification.
  • Update the API reference index tables to list filters.core, filters.weighting, signal.* and metrology.* instead of metrology.* groupings like levels/spectra/correlation.
  • Update guides and docs (getting started, calibration, weighting, levels, filter-gallery, filter-banks, filter-compliance, block-processing, sound-level-meter, special-weightings, time-weighting, spectral-analysis, time-frequency, cepstrum-echoes, correlation-delay, test-signals, data-qualification, miso-coherence, aircraft-noise, sound-level-meter, theory-signal-analysis, etc.) so code snippets import filters and signal where appropriate and link to the new API pages.
  • Adjust README, README_PYPI and llms shard summaries to describe the new split and use filters/signal in examples.
  • Ensure site-wide language suggestion, Lighthouse config and sidebar imports reference updated API paths.
scripts/api_taxonomy.py
site/src/content/docs/reference/api/index.md
docs/api-reference.md
README.md
README_PYPI.md
docs/filter-gallery.md
docs/filter-banks.md
docs/filter-compliance.md
docs/weighting.md
docs/levels.md
docs/sound-level-meter.md
docs/calibration.md
docs/special-weightings.md
docs/time-weighting.md
docs/getting-started.md
docs/multichannel.md
docs/spectral-analysis.md
docs/time-frequency.md
docs/test-signals.md
docs/cepstrum-echoes.md
docs/correlation-delay.md
docs/data-qualification.md
docs/miso-coherence.md
docs/aircraft-noise.md
docs/theory-signal-analysis.md
docs/block-processing.md
docs/why-phonometry.md
site/src/content/docs/**
site/scripts/check-lang-suggest.mjs
site/scripts/lighthouse-audit.mjs
site/src/generated/api-sidebar.mjs
site/src/data/home.ts
site/public/llms/*.txt
Update CI and tooling configs (labeler and pa11y, etc.) and changelog to acknowledge the new packages and deprecations.
  • Add new labeler entries for area: filters and area: signal and retarget existing metrology labels where appropriate.
  • Update pa11y and Lighthouse audit paths to reference the new signal levels API page.
  • Extend CHANGELOG to document the 4.0 split of metrology into filters/signal/metrology, the compatibility guarantees and deprecation schedule.
  • Regenerate llms shards to align with the new taxonomy and API paths.
.github/labeler.yml
CHANGELOG.md
site/.pa11yci.json
site/scripts/lighthouse-audit.mjs
site/public/llms/llms-*.txt

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request restructures the previously broad phonometry.metrology namespace into three clearer domain packages—phonometry.filters, phonometry.signal, and a narrowed phonometry.metrology—while updating internal imports, tests, and documentation to follow the new taxonomy (and preserving the flat top-level API per the PR description).

Changes:

  • Introduce phonometry.filters and phonometry.signal packages and retarget code/tests to import from their new homes.
  • Update plotting/report/rendering call sites and docs links/examples to reflect the new package layout.
  • Add/relocate tests to validate behavior under the new module organization (including new signal/filter-specific tests).

Reviewed changes

Copilot reviewed 189 out of 205 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
tests/vibration/test_machine_diagnostics.py Update envelope-spectrum import to phonometry.signal.
tests/test_performance.py Update filter-core imports and cache clearing to phonometry.filters.
tests/test_package_architecture.py Allow cross-package imports into {filters, signal, metrology} toolbox.
tests/test_matplotlib_backend.py Update filter-design module import path to phonometry.filters.design.
tests/test_errors_and_edge_cases.py Update nominal-frequencies import to phonometry.filters.
tests/test_conformance_report.py Update filter-class verifier import to phonometry.filters.
tests/test_basic.py Update OctaveFilterBank imports and cache clearing to phonometry.filters.
tests/signal/test_synchronous_average.py Update synchronous-average import to phonometry.signal.
tests/signal/test_signals.py New tests for deterministic colored-noise generator behavior.
tests/signal/test_signal_toolbox.py Update correlation helper import to phonometry.signal.
tests/signal/test_parametrized_signals.py Update weighting/parametric-filters import to phonometry.filters.weighting.
tests/signal/test_miso.py Update MISO helpers import to phonometry.signal.
tests/signal/test_levels.py Update weighting-filter import to phonometry.filters.weighting.
tests/signal/test_correlation.py Update correlation helper import to phonometry.signal.
tests/signal/test_cepstrum.py Update phase-module import to phonometry.signal.
tests/metrology/test_metrology_plot_i18n.py Update filter-class compliance import to phonometry.filters.
tests/metrology/test_data_qualification.py Update metrology data-qualification module rename (random_datadata_qualification).
tests/filters/test_weighting_class_verifier.py Update compliance table import to phonometry.filters.
tests/filters/test_stateful_octave_filter_bank.py Update filter-bank imports to phonometry.filters.
tests/filters/test_nominal_frequencies.py Update nominal-frequencies imports to phonometry.filters.
tests/filters/test_iec61260_report.py Update compliance result import to phonometry.filters.
tests/filters/test_iec_weighting_table3.py New IEC 61672-1 Table 3 weighting compliance tests.
tests/filters/test_iec_compliance.py Update weighting-filter import to phonometry.filters.weighting.
tests/filters/test_filter_design.py Update filter-design imports to phonometry.filters.design.
tests/filters/test_compliance.py Update compliance imports to phonometry.filters.
tests/filters/test_b_au_d_weightings.py Update compliance imports and doc references to phonometry.filters.
tests/conftest.py Update skipped-path reference for moved IEC61260 report test.
tests/aircraft/test_aircraft_noise_system.py Update directional-limit import to phonometry.filters.compliance.
src/phonometry/vibration/machine_diagnostics.py Update doc references for moved signal-analysis functions into phonometry.signal.
src/phonometry/underwater/pile_driving_noise.py Update nominal-frequencies import to phonometry.filters.
src/phonometry/signal/time_frequency.py Update doc and plotting import paths to phonometry.signal/_plot.signal.
src/phonometry/signal/test_signals.py Update internal plot imports and doc references to phonometry.signal paths.
src/phonometry/signal/synchronous_average.py Update fractional-delay import to signal.test_signals and plotting to _plot.signal.
src/phonometry/signal/spectra.py Update plotting imports to _plot.signal.
src/phonometry/signal/phase.py Update cepstrum reference and plotting import to _plot.signal.
src/phonometry/signal/miso.py Update spectra references and plotting import to _plot.signal.
src/phonometry/signal/levels.py Move weighting/time-weighting dependency to phonometry.filters.weighting.
src/phonometry/signal/inversion.py Update plotting import to _plot.signal.
src/phonometry/signal/envelope.py Update plotting imports to _plot.signal.
src/phonometry/signal/correlation.py Update spectra references, import _fractional_advance from signal.test_signals, and plotting imports to _plot.signal.
src/phonometry/signal/cepstrum.py Update plotting imports to _plot.signal.
src/phonometry/signal/init.py New phonometry.signal package re-export surface.
src/phonometry/room/room_acoustics.py Update OctaveFilterBank import to phonometry.filters.
src/phonometry/psychoacoustics/tonality.py Update Welch-core import to phonometry.signal.spectra.
src/phonometry/metrology/data_qualification.py Update spectra imports to phonometry.signal.spectra.
src/phonometry/metrology/calibration.py Update time-weighting import to phonometry.filters.weighting.
src/phonometry/hearing/sti.py Update filter-bank and nominal-frequencies imports to phonometry.filters.
src/phonometry/filters/equalizer.py Update plotting import to _plot.filters and doc reference to filters.weighting.
src/phonometry/filters/core.py Update internal design-module import (filter_designdesign).
src/phonometry/filters/compliance.py Update weighting-filter class import and plotting import to _plot.filters.
src/phonometry/filters/init.py New phonometry.filters package re-export surface.
src/phonometry/environmental/impulsive_sound.py Update weighting/time-weighting imports to phonometry.filters.weighting.
src/phonometry/emission/intensity.py Update _genfreqs/Welch-core imports to filters/signal.
src/phonometry/electroacoustics/frequency_response.py Update shared Welch-core imports to phonometry.signal.spectra.
src/phonometry/electroacoustics/distortion.py Update weighting-filter import to phonometry.filters.weighting.
src/phonometry/building/heavy_impact.py Update doc reference to phonometry.filters.core.OctaveFilterBank.
src/phonometry/broadcast/program_loudness.py Update doc reference to phonometry.signal.levels.lc_peak.
src/phonometry/_report/iso3382.py Update band-fraction helpers import to phonometry.filters.frequencies.
src/phonometry/_report/iec61260.py Update references/imports to phonometry.filters frequency helpers and result type.
src/phonometry/_report/_sound_power_fiche.py Update band-label helper imports to phonometry.filters.frequencies.
src/phonometry/_plot/vibration.py Update doc reference to phonometry.signal.envelope.EnvelopeSpectrumResult.
src/phonometry/_plot/room.py Update nominal-frequency helpers import to phonometry.filters.frequencies.
src/phonometry/_plot/common.py Update doc reference to phonometry.filters.design._showfilter.
src/phonometry/_internal/warnings.py Extend _warn_renamed to parameterize removal major version in warning text.
src/phonometry/_internal/peaks.py Update doc reference to phonometry.signal.levels.lc_peak.
site/src/generated/api-sidebar.mjs Update API sidebar structure for filters, signal, and narrowed metrology.
site/src/data/home.ts Update homepage example to use phonometry.filters.
site/src/content/docs/reference/theory/signal-analysis.mdx Update examples to import from phonometry.filters.
site/src/content/docs/reference/api/vibration/machine-diagnostics.md Update cross-links to moved signal-analysis pages.
site/src/content/docs/reference/api/signal/test-signals.md Rename API page metadata and update cross-links for signal.test_signals.
site/src/content/docs/reference/api/signal/synchronous-average.md Update page title and links to signal equivalents.
site/src/content/docs/reference/api/signal/phase.md Update page title/links to signal equivalents.
site/src/content/docs/reference/api/signal/miso.md Update page title/links to signal equivalents.
site/src/content/docs/reference/api/signal/levels.md Update page title to signal.levels.
site/src/content/docs/reference/api/signal/inversion.md Update links to signal inversion page.
site/src/content/docs/reference/api/signal/envelope.md Update page title/links to signal equivalents.
site/src/content/docs/reference/api/signal/cepstrum.md Update page title/links to signal equivalents.
site/src/content/docs/reference/api/rooms/room-ir.md Update inversion link to new signal path.
site/src/content/docs/reference/api/metrology/data-qualification.md Rename metadata/links for metrology.data_qualification.
site/src/content/docs/reference/api/metrology/calibration.md Update links to the new metrology calibration page location.
site/src/content/docs/reference/api/hearing/occupational-exposure.md Update links to point at signal/levels page (text still references phonometry.levels).
site/src/content/docs/reference/api/filters/weighting.md Rename metadata/links for filters.weighting.
site/src/content/docs/reference/api/filters/frequencies.md Update title to filters.frequencies.
site/src/content/docs/reference/api/filters/equalizer.md Update title and weighting-filter link to filters.weighting.
site/src/content/docs/reference/api/filters/core.md Update title to filters.core.
site/src/content/docs/reference/api/filters/compliance.md Update title and plotting-reference string to filters.
site/src/content/docs/reference/api/broadcast/program-loudness.md Update lc_peak doc link to signal/levels.
site/src/content/docs/guides/time-weighting.mdx Update guide examples to use phonometry.filters.
site/src/content/docs/guides/time-frequency.mdx Update guide narrative/API reference to phonometry.signal.
site/src/content/docs/guides/test-signals.mdx Update guide narrative/API reference to phonometry.signal.
site/src/content/docs/guides/synchronous-averaging.mdx Update API reference link to signal.synchronous_average.
site/src/content/docs/guides/swept-sine-distortion.mdx Update narrative references from metrology to signal for phase utilities.
site/src/content/docs/guides/spectral-analysis.mdx Update narrative references from metrology to signal.
site/src/content/docs/guides/sound-level-meter.mdx Update examples to split usage across filters, signal, and metrology.
site/src/content/docs/guides/multichannel.mdx Update examples to use phonometry.filters.
site/src/content/docs/guides/miso-coherence.mdx Update narrative/API reference to phonometry.signal.
site/src/content/docs/guides/filter-compliance.mdx Update examples/API references to phonometry.filters.
site/src/content/docs/guides/data-qualification.mdx Update imports/links to metrology.data_qualification.
site/src/content/docs/guides/correlation-delay.mdx Update narrative references from metrology to signal.
site/src/content/docs/guides/cepstrum-echoes.mdx Update narrative references from metrology to signal.
site/src/content/docs/guides/calibration.mdx Update examples to use phonometry.filters for octave filtering/time weighting.
site/src/content/docs/guides/block-processing.mdx Update examples/API references to phonometry.filters.
site/src/content/docs/guides/aircraft-noise.mdx Update example to use phonometry.filters.verify_aircraft_noise_system.
site/src/content/docs/getting-started.mdx Update getting-started examples and narrative to phonometry.filters.
site/src/content/docs/es/reference/theory/signal-analysis.mdx Spanish: update examples to import from phonometry.filters.
site/src/content/docs/es/guides/time-weighting.mdx Spanish: update examples to phonometry.filters.
site/src/content/docs/es/guides/time-frequency.mdx Spanish: update narrative/API reference to phonometry.signal.
site/src/content/docs/es/guides/test-signals.mdx Spanish: update narrative/API reference to phonometry.signal.
site/src/content/docs/es/guides/synchronous-averaging.mdx Spanish: update API reference to signal.synchronous_average.
site/src/content/docs/es/guides/swept-sine-distortion.mdx Spanish: update narrative references to phonometry.signal.
site/src/content/docs/es/guides/spectral-analysis.mdx Spanish: update narrative references to phonometry.signal.
site/src/content/docs/es/guides/sound-level-meter.mdx Spanish: update examples to split across filters, signal, metrology.
site/src/content/docs/es/guides/multichannel.mdx Spanish: update examples to phonometry.filters.
site/src/content/docs/es/guides/miso-coherence.mdx Spanish: update narrative/API reference to phonometry.signal.
site/src/content/docs/es/guides/filter-compliance.mdx Spanish: update examples/API references to phonometry.filters.
site/src/content/docs/es/guides/data-qualification.mdx Spanish: update imports/links to metrology.data_qualification.
site/src/content/docs/es/guides/correlation-delay.mdx Spanish: update narrative references to phonometry.signal.
site/src/content/docs/es/guides/cepstrum-echoes.mdx Spanish: update narrative references to phonometry.signal.
site/src/content/docs/es/guides/calibration.mdx Spanish: update examples to phonometry.filters.
site/src/content/docs/es/guides/block-processing.mdx Spanish: update examples to phonometry.filters.
site/src/content/docs/es/guides/aircraft-noise.mdx Spanish: update example to phonometry.filters.verify_aircraft_noise_system.
site/src/content/docs/es/getting-started.mdx Spanish: update getting-started examples and narrative to phonometry.filters.
site/scripts/lighthouse-audit.mjs Update audited API path for moved levels page.
site/scripts/check-lang-suggest.mjs Update visited URL for moved levels page.
site/public/llms/llms-sound-power.txt Regenerate LLM shard to reflect taxonomy changes/content updates.
site/public/llms/llms-sound-insulation.txt Regenerate LLM shard; update example labels.
site/public/llms/llms-signals-spectra.txt Regenerate LLM shard; update metrologysignal narrative.
site/public/llms/llms-electroacoustics.txt Regenerate LLM shard; update metrologysignal narrative.
site/public/llms/llms-core-signal-analysis.txt Regenerate LLM shard; update examples to filters/signal.
site/public/llms/llms-calibration-uncertainty.txt Regenerate LLM shard; update examples to filters.
site/public/llms/llms-aircraft-wind.txt Regenerate LLM shard; update example to filters.
site/.pa11yci.json Update accessibility-check URLs for moved levels page.
scripts/generate_llms.py Update summary snippet to use filters and signal.
scripts/generate_graphs.py Update references/imports to moved filter-design and compliance modules.
scripts/generate_api_docs.py Update index snippet to import from phonometry.filters.
scripts/conformance_report.py Update imports to phonometry.filters/phonometry.signal.
scripts/check_jit_kernel.py Update weighting-module imports to phonometry.filters.weighting.
README.md Update README examples and namespace coverage table for split.
README_PYPI.md Update PyPI README examples and namespace coverage table for split.
docs/why-phonometry.md Update time-weighting example imports to phonometry.filters.
docs/time-weighting.md Update guide examples to use phonometry.filters.
docs/time-frequency.md Update narrative from metrology to signal.
docs/theory-signal-analysis.md Update examples to import from phonometry.filters.
docs/test-signals.md Update narrative from metrology to signal.
docs/swept-sine-distortion.md Update narrative from metrology to signal.
docs/spectral-analysis.md Update narrative from metrology to signal.
docs/sound-level-meter.md Update examples to split across filters, signal, and metrology.
docs/multichannel.md Update examples to use phonometry.filters.
docs/miso-coherence.md Update narrative from metrology to signal.
docs/getting-started.md Update examples and narrative to phonometry.filters.
docs/filter-compliance.md Update examples/API reference to phonometry.filters.
docs/filter-banks.md Update examples to use phonometry.filters.
docs/data-qualification.md Update imports to metrology.data_qualification.
docs/correlation-delay.md Update narrative from metrology to signal.
docs/cepstrum-echoes.md Update narrative from metrology to signal.
docs/calibration.md Update examples to use phonometry.filters.
docs/block-processing.md Update examples to use phonometry.filters.
docs/api-reference.md Update namespace count and table to reflect filters/signal split.
docs/aircraft-noise.md Update example to use phonometry.filters.verify_aircraft_noise_system.
CHANGELOG.md Document the taxonomy split and updated deprecation/removal schedule.
.github/labeler.yml Add label rules for new filters and signal areas.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +13 to +14
levels themselves come from the dosimetry primitives in
[`phonometry.levels`](/phonometry/reference/api/levels/levels/) ([`leq`](/phonometry/reference/api/levels/levels/#leq)/[`lex_8h`](/phonometry/reference/api/levels/levels/#lex_8h)); this module adds the three
[`phonometry.levels`](/phonometry/reference/api/signal/levels/) ([`leq`](/phonometry/reference/api/signal/levels/#leq)/[`lex_8h`](/phonometry/reference/api/signal/levels/#lex_8h)); this module adds the three

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch, and it was wider than this page. The docstring said phonometry.levels, a 3.1 flat alias that warns on use, while the generator resolved the link to the module's real home. Fourteen other docstrings across the package cited pre-3.2 flat paths the same way, so all of them now name the module they point at, resolved from the alias table itself rather than by hand. Fixed in 9924aae.

@bito-code-review

Copy link
Copy Markdown

The module path phonometry.levels has been relocated to phonometry.signal.levels as part of the package restructuring described in the changelog. You should update the text to phonometry.signal.levels to match the new API structure and ensure consistency with the updated import paths.

@codecov

codecov Bot commented Aug 1, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 96.98%. Comparing base (1989cad) to head (eca022d).

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #472   +/-   ##
=======================================
  Coverage   96.97%   96.98%           
=======================================
  Files         249      253    +4     
  Lines       38433    38487   +54     
=======================================
+ Hits        37271    37327   +56     
+ Misses       1162     1160    -2     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Numerical conformance report

533/533 conformance checks pass across 57 domains and 362 standards - filters class 1 - weightings within IEC 61672-1 class 1.

Each row pins a standard clause to its expected normative value and the value the library computes. Every section below is collapsible and stays collapsed while all of its rows pass; a section with any failing row opens automatically.

Numerical validation - filters & weightings: class showcase (IEC 61260-1 · IEC 61672-1 · ISO 7196)

IEC 61260-1:2014 class per filter architecture (order 6, one-third-octave, 100 Hz-10 kHz, fs = 48 kHz). For each architecture the table shows, at its binding band, the measured relative attenuation and the class-1 limit it must clear, so the number and the range it must sit in are both visible. A positive margin means the acceptance limits are met with that much room.

Architecture Class verdict Binding band Measured rel. atten. Class-1 limit Margin cl.1 Margin cl.2
butter Class 1 (default) 100 Hz +0.00 dB ≥ -0.40 dB +0.400 dB +0.600 dB
cheby1 By design (passband ripple) 6310 Hz +0.19 dB ≥ +1.44 dB -1.246 dB -0.837 dB
cheby2 Class 1 100 Hz +0.00 dB ≥ -0.40 dB +0.400 dB +0.600 dB
ellip By design (passband ripple) 10000 Hz +0.10 dB ≥ +1.32 dB -1.218 dB -0.813 dB
bessel By design (soft rolloff) 100 Hz +12.46 dB ≥ +16.60 dB -4.133 dB -3.133 dB

Only Butterworth (the library default) and Chebyshev-II are class-compliant architectures. Chebyshev-I and elliptic trade the mask for passband ripple, and Bessel for a maximally-flat group delay (soft rolloff); they cannot satisfy the IEC 61260-1 Class 1/2 attenuation mask by construction, so they are labelled By design - this is expected, not a failure or regression.

Frequency-weighting conformance (A/C: IEC 61672-1 Table 3; G: ISO 7196 A.3). The max deviation from nominal is informational (it falls at a frequency extreme where the tolerance is widest and asymmetric); compliance is judged at the binding frequency - the one with the least headroom - where the deviation, the applicable tolerance band and the headroom are shown together.

Curve fs Max dev. from nominal (info) Binding freq Deviation there Tolerance band Headroom
A 48 kHz -0.867 dB @ 19953 Hz 1000 Hz +0.000 dB [-0.70, +0.70] dB +0.700 dB
A 96 kHz -0.482 dB @ 19953 Hz 1000 Hz +0.000 dB [-0.70, +0.70] dB +0.700 dB
C 48 kHz -0.900 dB @ 19953 Hz 1000 Hz +0.000 dB [-0.70, +0.70] dB +0.700 dB
G 48 kHz +0.047 dB @ 1 Hz 1 Hz +0.047 dB [-1.00, +1.00] dB +0.953 dB
Filters & weightings: 100% (10/10)
Standard Quantity Expected (norm) Computed Δ Status
IEC 61260-1:2014 Table 1 Octave-band filter class (butterworth, fs=48 kHz) class 1 class 1 (margin +0.400 dB) +0.400 dB
IEC 61260-1:2014 Table 1 One-third-octave filter class (butterworth, fs=48 kHz) class 1 class 1 (margin +0.400 dB) +0.400 dB
IEC 61260:1995 / ANSI S1.11-2004 Table 1 Class 0 (strictest) octave-band filter (butterworth, fs=48 kHz) class 0 class 0 (margin +0.150 dB) +0.150 dB
IEC 61260-1:2014 Table F.1 Formula (9) breakpoint mapping, b=3, Omega at G**(1/2) 1.12202 (+/-0.00001) 1.12202 0
IEC 61672-1:2013 Table 3 A-weighting deviation vs class-1 limits (fs=48 kHz) deviation within limits @ 1000 Hz +0.000 dB in [-0.70, +0.70] dB headroom +0.700 dB
IEC 61672-1:2013 Table 3 C-weighting deviation vs class-1 limits (fs=48 kHz) deviation within limits @ 1000 Hz +0.000 dB in [-0.70, +0.70] dB headroom +0.700 dB
ISO 7196:1995 Table 2 / A.3 G-weighting deviation vs +/-1 dB tolerance (fs=48 kHz) deviation within limits @ 1 Hz +0.047 dB in [-1.00, +1.00] dB headroom +0.953 dB
ANSI S1.4-1983 Tables IV/V B-weighting (historical) deviation vs Type 0 limits (fs=48 kHz) deviation within limits @ 200 Hz -0.049 dB in [-0.70, +0.70] dB headroom +0.651 dB
IEC 61012:1990 Table 1 / 2.2 AU-weighting deviation vs separate-unit tolerances (fs=96 kHz) deviation within limits @ 10000 Hz -0.072 dB in [-1.00, +1.00] dB headroom +0.928 dB
IEC 537:1976 (withdrawn) via NASA CR-3406 Table SLD-I D-weighting response vs the published tabulated curve (fs=48 kHz) abs(response - table) <= 0.2 dB (0.45 dB at 1600/2500 Hz) -0.131 dB @ 8000 Hz (bound 0.20 dB) headroom +0.069 dB
Levels & dosimetry: 100% (9/9)
Standard Quantity Expected (norm) Computed Δ Status
IEC 61672-1:2013 (Leq) Leq of a 1 Pa 1 kHz sine 90.97 dB (+/-0.05 dB) 90.969 dB -0.001 dB
IEC 61252:1995 (LEX,8h) 8 h exposure to 90 dB(A) noise 90 dB (+/-0.05 dB) 90.008 dB 0.008 dB
ISO 1996-1:2016 3.6.4 Lden, constant 60 dB in day/evening/night 66.3952 dB (+/-0 dB) 66.3952 dB 0 dB
ISO 1996-2:2007 Annex C.5 Example 1 Tonal audibility ΔLta (Formula C.3), 4 kHz tone 13.7 dB (+/-0.05 dB) 13.66 dB -0.044 dB
ISO 1996-2:2007 Annex C.5 Example 1 Tonal adjustment Kt (Formulae C.4-C.6) 6 dB (+/-0 dB) 6 dB 0 dB
ISO 1996-2:2017 Annex G.2 Combined measurement uncertainty u = √(Σ(cj·uj)²) 2.18 dB (+/-0.01 dB) 2.18 dB -0.002 dB
RD 1367/2007 Annex IV A.3.4.2 b Corrected period level LKeq,d (Manual Ejemplo 3.1: 3 noise phases, 12 h) 57 dB (+/-0 dB) 57 dB 0 dB
RD 1367/2007 Annex I A.2 d Long-term level LK,d (Manual Ejemplo 3.2: 303 operating days of 365) 56 dB (+/-0 dB) 56 dB 0 dB
RD 1367/2007 Annex III Table B1, Article 25 Activity verdict (Manual Ejemplo 3.3: area type a, LK,d 56 dB over 55 dB) phase and daily pass, annual fails, activity not compliant phase and daily pass, annual fails, activity not compliant -
Room & building acoustics: 100% (72/72)
Standard Quantity Expected (norm) Computed Δ Status
CTE DB-HR Annex A, Formula (A.5) Global index R'A for pink noise (Manual Ejemplo 7.2) 51.4 dBA (+/-0.05 dBA) 51.4 dBA 0 dBA
CTE DB-HR Annex A, Formula (A.6) Global index D2m,nT,Atr for road traffic (Manual Ejercicio 7.1) 32.8 dBA (+/-0.05 dBA) 32.8 dBA 0 dBA
Manual de acustica ambiental y arquitectonica, Ejemplo 7.1 Reported R'A of the field-test wall (printed 51 dBA = R'w 52 + C -1) 51 dBA (+/-0 dBA) 51 dBA 0 dBA
Manual de acustica ambiental y arquitectonica, Ejemplo 7.1 Reported R'A,tr of the same wall (printed 47 dBA = R'w 52 + Ctr -5) 47 dBA (+/-0 dBA) 47 dBA 0 dBA
CTE Catalogo de Elementos Constructivos Window size correction of RA (Manual Ejemplo 7.4: 4 m2 window, -2 dB) 24 dBA (+/-0 dBA) 24 dBA 0 dBA
ISO 3382-2:2008 5.3.3 T30 from a synthetic exponential decay (T=1.0 s) 1 s (+/-1%) 1 s 0 s
ISO 18233:2006 (swept-sine method) Sweep deconvolution recovers a known IIR response 0 dB in-band error (+/-0.1 dB) 0.0006 dB 0.001 dB
ISO 717-1 Annex C, Table C.1 Weighted sound reduction index Rw (C;Ctr) Rw 30 (C -2; Ctr -3) Rw 30 (C -2; Ctr -3) sum 31.8 dB
ISO 717-1:2020 Annex C, Table C.2 Enlarged range 50-5000 Hz: Rw (C; Ctr; C50-5000; Ctr,50-5000) Rw 30 (C -2; Ctr -3; C50-5000 -2; Ctr,50-5000 -4) Rw 30 (C -2; Ctr -3; C50-5000 -2; Ctr,50-5000 -4) exact
ISO 717-2 Annex C, Table C.1 Weighted impact sound pressure level Ln,w (CI) Ln,w 79 (CI -11; sum 28.0 dB) Ln,w 79 (CI -11; sum 28.0 dB) +0 dB
ISO 717-2 Annex C, Table C.1 (covered) Weighted impact level of the floor WITH covering Ln,w (CI) Ln,w 64 (CI -3; sum 30.0 dB) Ln,w 64 (CI -3; sum 30.0 dB) +0 dB
ISO 717-2 Annex C, Table C.2 Floor-covering improvement ΔLw and CI,Δ (Formulae (2)/(A.4); CI,Δ from the normative Table 4 floor, not the 2020 print's misprinted C.2 chain) ΔLw 15 dB; CI,Δ -9 dB (Table 4 reference floor) ΔLw 15 dB; CI,Δ -9 dB +0 dB
ISO 354:2003 Eq. 5/8 Sabine inversion recovers absorption area 9.212828 m^2 (+/-0 m^2) 9.212828 m^2 0 m^2
ISO 3382-3:2012 Clause 6.2 Open-plan spatial decay rate D2,S (-6 dB/doubling) 6 dB (+/-0 dB) 6 dB 0 dB
ISO 16283-3:2016 Clause 3.12 Facade R'45 isolates the -1.5 dB incidence correction (S=A) 38.5 dB (+/-0 dB) 38.5 dB 0 dB
ISO 10140-2:2010 Formula (2) Lab airborne R on the ISO 717-1 reference shape -> Rw = 54 Rw 54 dB Rw 54 dB +0 dB
ISO 10140-5:2010+A1 Annex B, Table B.1 Reference elements end-to-end: printed Rw (C; Ctr) of all three Rw(C;Ctr) = 53(-1;-5) / 52(-1;-5) / 33(-1;-2) 53(-1;-5) / 52(-1;-5) / 33(-1;-2) exact
ISO 10140-5:2010+A1 Annex C, Table C.1 Reference floors end-to-end: printed Ln,t,r,0,w (CI) of both Ln,t,r,0,w(CI) = 72(0) / 75(-3) 72(0) / 75(-3) exact
ISO 15186-1:2000 Formula (7) Intensity RI on the ISO 717-1 reference shape -> RI,w = 30 RI,w 30 dB (scalar anchor RI = 34 dB) RI,w 30 dB (RI = 34 dB) +0 dB
ISO 15186-1:2000 Annex B, Table B.1 Adaptation term Kc: all 21 printed rows; (B.1) reduces to (B.2) max abs(Kc - Table B.1) <= 0,05 dB (1 dp print) 0.047 dB (B.1 vs B.2: 4.33e-04 dB) 0.047 dB
ISO 10052:2021 Clause 3.6 Survey R' applies the V/7,5 minimum-area rule 26.197888 dB (+/-0 dB) 26.197888 dB 0 dB
ISO 10052:2021 Clause 3.16 Service-equipment LXY is the 3-position energy average 32.823329 dB (+/-0 dB) 32.823329 dB 0 dB
ISO 10052:2021 Table 4 Reverberation-index estimate (35 <= V < 60, type g) k = [4.5, 5.0, 5.5, 5.5, 5.5] dB k = [4.5, 5.0, 5.5, 5.5, 5.5] dB exact
ISO 717-2:2020 Table 4 / Clause 5.2 Reference-floor weighted level Ln,r,0,w and CI (ISO 16251-1 ΔLw anchor) Ln,r,0,w = 78 dB, CI = -11 dB Ln,r,0,w = 78 dB, CI = -11 dB exact
ISO 16251-1:2014 / ISO 717-2 Formula (2) Floor-covering ΔLw: zero improvement gives ΔLw = 0 ΔLw = 0 dB (ΔL = 0 -> Ln,r = Ln,r,0) ΔLw = 0 dB exact
ISO 16251-1 / ISO 717-2 (Foret et al. 2011, carpet) Measured textile-carpet improvement rates to ΔLw = 29 dB ΔLw = 29 dB (paper, ISO 16251-1) ΔLw = 29 dB +0 dB
ISO 10848-1:2006 Formula (14) Flanking Kij (simplified) matches closed form Kij = 1.9897 dB Kij = 1.9897 dB exact
ISO 10848-1:2006 Formula (12) Flanking equivalent absorption length aj at f_ref aj = 1.2661 m aj = 1.2661 m exact
ISO 10848-1:2006 Clause 7.3.1 Flanking total loss factor η = 2,2/(f·Ts) η = 0.0044 η = 0.0044 exact
ISO 12354-1:2017 Formula (20) vs Hopkins Eq. 2.201 (6 mm glass) Flanking critical frequency (c0²/1,8·cL·h) vs plate coincidence (c0²/2π · sqrt(m''/B')) 2107.4 Hz (+/-1%) 2123.5 Hz 16.156 Hz
EN 29052-1:1992 Formula 4 Apparent dynamic stiffness s't = 4π²·m't·fr² (m't=200 kg/m², fr=25 Hz) 4.934802 MN/m³ (+/-0.000001 MN/m³) 4.934802 MN/m³ 0 MN/m³
EN 29052-1:1992 clause 8.2 NOTE Enclosed-gas stiffness s'a·d = 111 MN·mm/m³ (p₀=0,1 MPa, ε=0,9) 5.55556 MN/m³ (+/-0.0001 MN/m³) 5.55556 MN/m³ 0 MN/m³
EN 29052-1:1992 Formula 2 Floating-floor natural frequency f0 = (1/2π)√(s'/m') (s'=10 MN/m³, m'=100 kg/m²) 50.32921 Hz (+/-0 Hz) 50.32921 Hz 0 Hz
ISO 7626-1:2011 Table 1 / 3.1.2 Closed-form SDOF driving-point mobility peak mag(Y(f0)) = 1/c (c=5 N·s/m) 0.2 m/(N·s) (+/-0.000001 m/(N·s)) 0.2 m/(N·s) 0 m/(N·s)
ISO 7626-1:2011 Table 1 / 3.1.2 Closed-form SDOF static receptance H(0) = 1/k (k=8000 N/m) 0.000125 m/N (+/-0.0001%) 0.000125 m/N 0 m/N
ISO 7626-1:2011 Table 1 FRF reciprocity: impedance × mobility = 1 (at 37 Hz) 1 (= Z·Y) 1 0
ISO 717-2:2020 Table D.4 A-weighted maximum impact level LiA,Fmax of the Annex D worked example 55,350 66... dB (rated 55 dB) 55.350668 dB 0 dB
ISO 16283-2:2020 Table A.1 / JIS A 1418-2:2019 Table A.2 Rubber-ball impact force exposure level LFE, five octave bands 39,0 / 31,0 / 23,0 / 17,0 / 12,5 dB re 1 N at 31,5 to 500 Hz 39 / 31 / 23 / 17 / 12,5 dB re 1 N max |dev| 0.000 dB
ISO 16283-2:2020 Formulae (4), (5), (6) Standardized maximum impact level reduces to 10 lg(V/V0) at T = T0 73,0103 dB (= 70 + 10 lg(100/50)) 73.0103 dB 0 dB
ASTM E413-22 clause 5 (ASTM E1414 CAC) Ceiling attenuation class of two accredited E1414 test reports CAC 34 (ALA 16-091-4); CAC 25, sum 24 dB (Intertek J7488.04) CAC 34; CAC 25, sum 24.0 dB exact
ISO 140-9:1985 clause 3.3 Normalized ceiling attenuation Dn,c = D - 10 lg(A/A0), A0 = 10 m2 43.0103 dB (+/-0 dB) 43.0103 dB 0 dB
Vigran (2008) Eqs. (9.18)-(9.20) Plenum model: Eq. (9.18) converges to Eq. (9.20) as the damping vanishes Eq. (9.20) value, reproduced by Eq. (9.18) 139.5682 dB 0 dB
Hopkins (2007) Eq. 4.89 / Fig. 4.35 Mass-spring-mass resonance of a masonry cavity wall without and with ties 26 Hz (no ties) / 50 Hz (2,5 ties/m2, k = 2 MN/m) 26.15 Hz / 49.93 Hz +0.15 / -0.07 Hz
Hopkins (2007) Table A4 Dynamic stiffness of four wall ties (butterfly, double-triangle, twist) 1,7 / 16,1 / 94,0 MN/m at 50 mm; 43,4 MN/m at 100 mm 1.7 / 16.1 / 94 / 43.4 MN/m exact
ISO 10846-2:2008 3.17 Transfer-stiffness level Lk = 20 lg(|k|/k0), k0 = 1 N/m (|k| = 1 MN/m) 120 dB (+/-0 dB) 120 dB 0 dB
ISO 10846-3:2002 Formula (1) Indirect method k2,1 = -(2πf)²·m2·T (f=500 Hz, m2=10 kg, T=0,01) -986960.4 N/m (+/-0.1%) -986960.4 N/m 0 N/m
ISO 10846-1:2008 Table A.2 FRF relation k = jω·Z at 250 Hz (|k| recovered from impedance) 1001249.2 N/m (+/-0.0001%) 1001249.2 N/m 0 N/m
ISO 7626-2:2015 7.5.2 Rigid-mass calibration: accelerance mag(A) = 1/m (m=10 kg) 0.1 1/kg (+/-0 1/kg) 0.1 1/kg 0 1/kg
ISO 7626-2:2015 7.5.2 Rigid-mass calibration: mobility mag(Y) = 1/(2πf·m) at 100 Hz (m=10 kg) 0.0001592 m/(N·s) (+/-0.001%) 0.0001592 m/(N·s) 0 m/(N·s)
ISO 7626-2:2015 Annex A Normalized random error ε = √((1−γ²)/(2nγ²)): γ²=0,8, n=75 → 4,08 % (< 5 %) 4.08 % (+/-0.01 %) 4.08 % 0.002 %
ISO 7626-1:2011 Table 1 Rigid 1 kg mass at ω = 1000 rad/s: mobility 1e-3, compliance 1e-6 (decades) 0.001 m/(N·s) (+/-1e-07%) 0.001 m/(N·s) 0 m/(N·s)
ISO 10846-3:2002 6.1 Inequality (2) Indirect-method validity limit mag(T) = 0,1 ↔ ΔL1,2 = 20 dB 20 dB (+/-0 dB) 20 dB 0 dB
ISO 10846-3:2002 6.1 Model bias at the validity limit: k_ind/k = 1,1 (0,83 dB ≤ 1 dB, 10 % ≤ 12 %) 1.1 (+/-1e-07%) 1.1 0
ISO 10846-1:2008 Equation (6) Delivered/blocking force F2/F2,b = 1/1,1 at mag(k2,2/kt) = 0,1 (within 10 %) 0.9091 (+/-0) 0.9091 0
ISO 10846-2:2008 / -3:2002 7.6 Linearity: ΔLk ≤ 1,5 dB for input spectra 10 dB apart (linear element: 0) ΔLk ≤ 1,5 dB (7.6 c) 0 dB 0 dB
ISO/TS 7849-1:2009 Formula (8) Calibration L_v from â = 9,81 m/s² at 100 Hz (standard's EXAMPLE) 106.9 dB (+/-0.1 dB) 106.9 dB -0.02 dB
ISO/TS 7849-2:2009 Formula (15) L_W from L_v via measured radiation factor = 10 lg(P/P0) (round-trip) 84.771 dB (+/-0 dB) 84.771 dB 0 dB
ISO/TS 7849-1:2009 Formula (12) Impedance term: L_W − L_v = 10 lg(411/400) at ε = 1, S = S0 0.1178 dB (+/-0 dB) 0.1178 dB 0 dB
EN 15657:2018 Formula (14) Reception-plate L_Ws = resonant-plate power P = ωη(mS)⟨v²⟩ (round-trip) 55.545 dB (+/-0 dB) 55.545 dB 0 dB
EN 15657:2018 Formula (13) Plate loss factor η = 2,2/(f·Ts) at 1 kHz, Ts = 0,3 s 0.0073 (+/-0) 0.0073 0
EN 15657:2018 Formulae (15)/(17) + EN 12354-5 Annex I.3 Source conversion chain reproduces Table I.8 (wall, installed) max abs(L_Ws,inst - Table I.8) <= 0,15 dB 0.055 dB 0.055 dB
ISO 9611:1996 eq. (9) Mean free velocity level (energy mean, v0 = 5e-8 m/s) 72.3017 dB (+/-0 dB) 72.3017 dB 0 dB
ISO 12354-1:2017 Annex L, Tables L.2 to L.4 In-situ element chain: 10 lg sigma, 10 lg sigma_f, eta_tot, Rsitu, a_situ (21 bands x 5 elements) 0 dB (+/-0.1 dB) 0.057 dB 0.057 dB
ISO 12354-1:2017 Annex L, Table L.1 Detailed airborne model: 13 paths + R' per band, R'w = 57 dB max path/total dev <= 0,1 dB; R'w = 57 dB 0.055 dB; 57 dB 0.055 dB
ISO 12354-2:2017 Annex G, Tables G.3, G.4 and G.1 Detailed impact model: Ln,situ, Ln,Dd, Ln,Df, L'n per band, L'n,w = 41 dB max path/total dev <= 0,1 dB; L'n,w (CI) = 41 (2) dB 0.077 dB; 41 (2) dB 0.077 dB
Hopkins (2007) 3.6.3.1 / 4.4.3.1, printed pp. 276-282 and 513-514 Tapping machine: vo, cut-off frequencies fco of a bare slab and two soft coverings (7 000 / 2 300 / 100 Hz) 0 (+/-0.02) 0.0077 0.008
Hopkins (2007) Figs. 3.30/3.31 and 4.73, printed pp. 281 and 524 Over/under-critical case of four walking surfaces; double floating-floor resonances 74 Hz and 195 Hz 4/4 critical cases; fmsms = 74 / 195 Hz (+/-2%) 4/4; 74.1 / 194.0 Hz 0.53%
ISO 12354-2:2017 Annex C / Annex G Table G.4 Floating floor: fo = 160 sqrt(s'/m') = 52,8 Hz, DeltaL = 30 lg(f/fo) over 21 bands, DeltaLw = 32,2 dB 0 dB (+/-0.05 dB) 0.048 dB 0.048 dB
ISO 12354-1:2017 Annex D / Hopkins (2007) Fig. 4.48, printed p. 486 Lining resonance (Formula D.1) 542 Hz and the Table D.1 improvement branches fo = 542 Hz (+/-1%); 8/8 Table D.1 rows 541.9 Hz; 8/8 0.02%
EN 12354-5:2009 Formula (19b/19c) Coupling term → force-source limit 10 lg(mag(Ys)/Re{Yi}) as mag(Ys) ≫ mag(Yi) 40 dB (+/-0.01 dB) 40.001 dB 0.001 dB
EN 12354-5:2009 Annex I.3, Table I.9 Flushing cistern: four paths + Formula (17) total -> 29 dB(A) max path/total dev <= 0.15 dB; total 29 dB(A) 0.055 dB; 29.3 dB(A) 0.055 dB
EN 12354-5:2009 Annex I.2, Table I.6a Whirlpool floor component: mobility correction + path 11 max abs(dev vs Table I.6a) <= 0,15 dB 0.1 dB 0.1 dB
Room acoustics: 100% (16/16)
Standard Quantity Expected (norm) Computed Δ Status
Sabine (W. C. Sabine, 1922) Reverberation time T = k·V/A (V=120 m³, S=158 m², α=0.2) 0.611825 s (+/-0.000001 s) 0.611825 s 0 s
Long, Architectural Acoustics 2e, Table 8.1 Room modes of a 7 x 5 x 3 m room: the six printed frequencies, Hz 42.4 Hz (+/-0.13 Hz) 42.27 Hz -0.126 Hz
Long, Architectural Acoustics 2e, Eq. (8.46) Modal density of a 7 x 5 x 3 m room at 1 kHz = 34 modes/Hz 34 modes/Hz (+/-0.5 modes/Hz) 34.32 modes/Hz 0.32 modes/Hz
Long, Architectural Acoustics 2e, Eq. (17.51) Restaurant self-noise, 20 talkers over 20 metric sabins = 76 dB 76 dB (+/-0.05 dB) 76.021 dB 0.021 dB
Long, Architectural Acoustics 2e, Eq. (17.54) Privacy bound A_tab < 3.16 rt^2 (Q = 2, L_SN = -9 dB) 3.16 m^2 (+/-0.005 m^2) 3.164 m^2 0.004 m^2
Everest, Master Handbook of Acoustics 4th ed, Fig. 7-22 Sabine RT, worked Example 1 @ 1 kHz (untreated 23.3×16×10 ft room, SI) 3.39 s (+/-0.02 s) 3.402 s 0.012 s
Eyring (Norris-Eyring, 1930) Reverberation time T = k·V/(-S·ln(1-ᾱ)) (α=0.2) 0.548369 s (+/-0.000001 s) 0.548369 s 0 s
Arau-Puchades (Acustica 65, 1988, Formula 18) T (α=0.5/0.1/0.1 per wall pair, dims 8×5×3 m) 0.812147 s (+/-0.000001 s) 0.812147 s 0 s
Model identity (uniform absorption) Arau-Puchades ≡ Eyring when ᾱ is uniform 0.548369 s (= Eyring) 0.548369 s 0 s
Vorlander Auralization 2e, Eq. (11.38)-(11.39) Image-source direct-sound amplitude 1/(4πr) and delay r/c (r = 4 m) 0.0198944 (+/-0) 0.0198944 0
Kuttruff Room Acoustics 6e, Eq. (9.23) Audible shoebox image count up to order 10 (= 1560) 156 (+/-0) 156 0
Kuttruff Room Acoustics 6e, Eq. (4.6) Temporal reflection density dN/dt = 4πc³t²/V (t = 0.1 s, V = 120 m³) 42258.2 1/s (+/-0 1/s) 42258.2 1/s 0 1/s
Bies Engineering Noise Control 5e, Eq. (6.44) Room constant R = Sᾱ/(1-ᾱ) (S = 100 m², ᾱ = 0.2 → 25 m²) 25 m² (+/-0 m²) 25 m² 0 m²
Bies Engineering Noise Control 5e, Eq. (6.43) Critical distance rc: direct field = reverberant field (R = 25, Q = 1) 0.160000 (= reverberant term) 0.16 0
Kuttruff Room Acoustics 6e, Eq. (3.44) Schroeder frequency f_s = 2000√(T/V) (V = 200 m³, T = 1 s) 141.421 Hz (+/-0 Hz) 141.421 Hz 0 Hz
Bies Engineering Noise Control 5e, Eq. (6.43) Steady-state SPL Lp = Lw + 10lg(Q/4πr² + 4/R) (Lw=90, r=1, R=25, Q=1) 83.7945 dB (+/-0 dB) 83.7945 dB 0 dB
Psychoacoustics: 100% (14/14)
Standard Quantity Expected (norm) Computed Δ Status
Moore, Psychology of Hearing 6e, p. 77 (Glasberg & Moore 1990) ERB_N number of 1000 Hz = 15.59 Cam 15.59 Cam (+/-0.005 Cam) 15.5932 Cam 0.003 Cam
Moore, Psychology of Hearing 6e, p. 76 (Glasberg & Moore 1990) ERB_N at 1 kHz vs the printed 24.7(4.37F + 1), Hz 132.639 Hz (+/-0.3%) 132.445 Hz -0.194 Hz
ISO 532-1:2017 Annex B.2 Zwicker loudness N, stationary test signal 1 83.2957 sone (+/-0.1%) 83.2957 sone 0 sone
ISO 532-1:2017 Annex B.5 Time-varying loudness Nmax, technical signal 14 (aircraft, free field) 22.6399 sone (+/-0.1%) 22.6399 sone 0 sone
ISO 532-1:2017 Annex B.5 Time-varying loudness Nmax, technical signal 15 (vehicle interior, diffuse field) 9.6059 sone (+/-0.1%) 9.6059 sone 0 sone
DIN 45692:2009 Clause 6 Sharpness of the standard 1 kHz reference signal 1 acum (+/-0 acum) 1 acum 0 acum
DIN 45692:2009 Table A.2 Sharpness of critical-band noise at 2.5 kHz (2320-2700 Hz, 4 sone) 1.78 acum (+/-0.089 acum) 1.747 acum -0.033 acum
ISO 226:2023 Table B.1 Equal-loudness contour, 60 phon @ 100 Hz 78.5 dB SPL (+/-0.05 dB SPL) 78.504 dB SPL 0.004 dB SPL
ECMA-418-2:2025 Clause 5.1.8 HMS loudness of a 1 kHz / 40 dB tone (c_N=0.0211964) 1 sone_HMS (+/-0.03 sone_HMS) 0.9843 sone_HMS -0.016 sone_HMS
ECMA-418-2:2025 Clause 6.2.8 HMS tonality of a 1 kHz / 40 dB tone (c_T=2.8758615) 1 tu_HMS (+/-0.03 tu_HMS) 0.9998 tu_HMS 0 tu_HMS
ECMA-418-2:2025 Clause 7 HMS roughness of a 1 kHz / 70 Hz / m=1 / overall 60 dB tone (c_R=0.0180685) 1 asper (+/-0.01 asper) 0.9999 asper 0 asper
ISO 532-2:2017 Clause 3.17 / Annex B.1 Moore-Glasberg loudness of a 1 kHz / 40 dB tone (C=0.0617) 1 sone (+/-0.01 sone) 1.0001 sone 0 sone
ISO 532-3:2023 Annex C.1 Moore-Glasberg-Schlittenlacher peak LTL, steady 1 kHz / 40 dB 1 sone (+/-0.02 sone) 0.9996 sone 0 sone
ECMA-418-2:2025 Clause 9 HMS fluctuation strength of a 1 kHz / 4 Hz / m=1 / overall 60 dB tone (c_F=0.003840572) 1 vacil_HMS (+/-0.01 vacil_HMS) 0.9931 vacil_HMS -0.007 vacil_HMS
Speech transmission (IEC 60268-16): 100% (10/10)
Standard Quantity Expected (norm) Computed Δ Status
IEC 60268-16:2020 A.2.2 STI weighting-factor pair (500 Hz + 1 kHz bands) 0.398 (+/-0.001) 0.398 0
IEC 60268-16:2020 A.3.1.2 Uniform MTF m=0.5 maps to STI=0.5 0.5 (+/-0.01) 0.5 0
IEC 60268-16 Annex M Full-STI worked example: printed MTF + speech/noise spectra -> STI STI 0.76 (MTI row of step 4c) STI 0.758 (max MTI dev 0.00) -0.002
IEC 60268-16:2020 C.3.2 STIPA direct method, Formula (C.1) signal at m=0.2 0.3 (+/-0.01) 0.2992 -0.001
IEC 60268-16:2020 C.3.2 STIPA direct method, Formula (C.1) signal at m=0.5 0.5 (+/-0.01) 0.4998 0
IEC 60268-16:2020 C.3.2 STIPA direct method, Formula (C.1) signal at m=0.8 0.7 (+/-0.01) 0.7002 0
IEC 60268-16:2020 C.3.3 Indirect method: exponential decay RT60=1 s vs Schroeder MTF 0.5885 (+/-0.005) 0.5885 0
IEC 60268-16:2020 C.4.2 Filter-bank slope: +41 dB unmodulated tone one octave below 125 Hz m >= 0.5 (C.4.2 pass criterion) 0.9812 0.481
IEC 60268-16:2020 A.2.2 (audio path) Weighting factors: modulated 500 Hz + 1 kHz pair through stipa() 0.398 (+/-0.005) 0.398 0
IEC 60268-16:2020 A.3.1.2 (audio path) Filter-bank phase: half-octave edge carriers at TI=0.9 0.9 (+/-0.01) 0.8975 -0.003
System measurement (Golay / Kirkeby / Mueller-Massarani): 100% (5/5)
Standard Quantity Expected (norm) Computed Δ Status
Havelock 2008 Part I Ch. 6 (Xiang), Eq. (2) Golay pair: sum of periodic autocorrelations = 2L*delta (L = 4096) 0 (algebraic identity, +/-1e-10) 0 0
Havelock 2008 Part I Ch. 6 (Xiang), Eq. (4) Golay chain recovers a delay+gain system IR (noiseless, exact) 0 (machine precision, +/-1e-13) 0 0
Kirkeby & Nelson 1999 Eq. (17) / Mueller-Massarani 2001 Sec. 3.1 In-band equalization residue equals eps/(|H|^2 + eps) bin by bin 0 (closed form, +/-1e-12) 0 0
Kirkeby & Nelson 1999 (max of x/(x^2+eps) = 1/(2*sqrt(eps))) Out-of-band inverse-filter gain within the regularization cap <= -6.021 dB (analytic cap) -6.034 dB headroom +0.013 dB
Mueller-Massarani 2001 Secs. 4.2-4.3 (group-delay synthesis) Shaped sweep's Welch spectrum follows the pink target, in-band 0 dB in-band deviation (+/-0.5 dB) 0.0652 dB 0.065 dB
Intensity & sound power: 100% (10/10)
Standard Quantity Expected (norm) Computed Δ Status
IEC 61043:1993 Clause 5 Plane-wave intensity I = p^2 / (rho c) 0.00238 W/m^2 (+/-1.5%) 0.00239 W/m^2 0 W/m^2
ISO 3744:2010 Eq. 18 Monopole hemisphere recovers LW (r=4 m) 95 dB (+/-0 dB) 95 dB 0 dB
ISO 9614-2:1996 Eq. 12 Intensity scan recovers LW of an enclosed source 90 dB (+/-0.000001 dB) 90 dB 0 dB
IEC 61043:1993 Table 2 Minimum delta_pI0 per band, probe/processor/instrument, class 1/2 132 tabulated minima reproduced max absolute deviation 0.000 dB 0 dB
IEC 61043:1993 Table 2 Note 1 Separation rule +10 lg(x/25) on all six columns of 25 mm minima (x = 50 mm) 3.0103 dB (+/-0 dB) 3.0103 dB 0 dB
Fahy, Sound Intensity 2e, 6.8 delta_pI0 = 20 dB is a phase mismatch of 0.26 deg (1 kHz, 25 mm) 0.26 deg (+/-0.005 deg) 0.2624 deg 0.002 deg
ISO 9614-1:1993 Eqs (A.1)/(A.2) Temporal variability F1 is the coefficient of variation of M samples 0.185164 (+/-0) 0.185164 0
ISO 4871:1996 clause 3.15 / Annex B Declared L_WAd = L_WA + K_WA (Annex B, L_WA=88, K_WA=2) 90 dB (+/-0 dB) 90 dB 0 dB
ISO 4871:1996 clause 6.2 Single-machine verification boundary L_1 <= L_WAd L_1=90 verified, L_1=91 rejected (L_WAd=90) 90->True, 91->False boundary L_1 = L_WAd
ISO 3741:2010 Eq. 20 Reverberation-room method inverts to a known LW 0 dB error 0 dB 0 dB
Building prediction & uncertainty: 100% (15/15)
Standard Quantity Expected (norm) Computed Δ Status
EN 12354-1:2000 Annex H.3 Airborne prediction R'w (direct + 12 flanking paths) R'w 52 dB (13 paths) R'w 52 dB (13 paths, 52.17) +0.17 dB
EN 12354-1:2000 Annex H.3 (paths) All 12 printed flanking-path values Rij,w max abs(Rij,w - printed) <= 0,05 dB 0.042 dB 0.042 dB
EN 12354-1:2000 Formula (5b) / Annex H.3 DnT,w closure from R'w (both H.3 examples -> 54 dB) DnT,w 54 dB (printed 53,8/54,3) DnT,w 53.63 / 54.13 dB -0.17 dB vs printed
EN 12354-2:2000 Annex E.3 Impact prediction L'n,w = Ln,w,eq - dLw + K 45 dB (+/-0 dB) 45 dB 0 dB
EN 12354-2:2000 Formula (3) / Annex E.3 Standardized impact level L'nT,w (exact 0,032 V form -> 43 dB) L'nT,w 43 dB (exact 42,96; E.3 prints 42,8) L'nT,w 42.96 dB -0.001 dB
EN 12354-3:2000 Annex F Facade airborne prediction (R'tr,s,w / D2m,nT,w single numbers) R'tr,s,w 31 (Ctr -3); D2m,nT,w 33 dB R'tr,s,w 31 (Ctr -3); D2m,nT,w 33 dB 0
EN 12354-4:2000 Annex G / Formula (2) Radiated LW of a wall+door segment (side 1, low bands) LW 63/125 Hz [59.8, 61.2] dB (+/-0.1) LW [59.8, 61.2] dB 0.038 dB
EN 12354-4:2000 Annex E / Table G.9 Exterior level of all four Table G.9 reception cells Lp 36,6 / 28,5 / 44,6 / 37,3 dB (+/-0,05) Lp 36.6 / 28.5 / 44.6 / 37.3 dB 0.046 dB
ISO 12999-1:2020 Table 2 Airborne band uncertainty, situation A @ 1 kHz 1.8 dB (+/-0 dB) 1.8 dB 0 dB
ISO 12999-1:2020 Annex B, Table B.2 One-decimal single numbers Rw / Rw+C50-5000 / Rw+Ctr,50-5000 57.4 / 56.4 / 51.1 dB 57.4 / 56.4 / 51.1 dB +0.00 dB
ISO 12999-1:2020 Annex B, Formulae (B.2)/(B.6) Single-number uncertainties (uncorrelated 0,6/0,8; correlated u(Rw) 1,9) u_uncorr 0.6 / 0.8 dB; u_corr(Rw) 1.9 dB 0.60 / 0.79 dB; 1.90 dB -0.00 dB
ISO 12999-1:2020 Clause 8 / Table 8 Expanded uncertainty U = 1.96 u (95 % two-sided, Rw sit. A) 2.352 dB (+/-0 dB) 2.352 dB 0 dB
ISO 12999-2:2020 Table 4 / Formula (1) Absorption coefficient +/-U (k=2), reproducibility, 20 x 1/3-oct bands U(k=2) = [0.33, 0.26, 0.22, 0.17, 0.13, 0.11, 0.09, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.09, 0.09, 0.09, 0.1, 0.11, 0.13, 0.16] U(k=2) = [0.33, 0.26, 0.22, 0.17, 0.13, 0.11, 0.09, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.09, 0.09, 0.09, 0.1, 0.11, 0.13, 0.16] exact
ISO 12999-2:2020 Table 5 / Formula (4) Practical coefficient +/-U (k=2), reproducibility, 5 octave bands U(k=2) = [0.09, 0.08, 0.08, 0.08, 0.1] U(k=2) = [0.09, 0.08, 0.08, 0.08, 0.1] exact
ISO 12999-2:2020 Clause 7, Examples 1/2 Single-number U (k=2): alpha_w and DLalpha,NRD alpha_w +/-0.07, DLalpha +/-1.6 dB alpha_w +/-0.07, DLalpha +/-1.6 dB exact
Outdoor propagation & occupational exposure: 100% (10/10)
Standard Quantity Expected (norm) Computed Δ Status
ISO 9613-1:1993 Table 1 Air attenuation @ 10 degC, 70 %, 1 kHz 3.66 dB/km (+/-0.01 dB/km) 3.658 dB/km -0.002 dB/km
ISO 9613-1:1993 Table 1 Air attenuation @ 0 degC, 20 %, 2 kHz 34.6 dB/km (+/-0.1 dB/km) 34.64 dB/km 0.04 dB/km
ISO 9613-2:1996 Table 2 Atmospheric attenuation grid, 6 conditions x 8 octave bands, dB/km all 48 cells within half a printed digit worst residual 0.939 x tolerance 0.939 x
ISO 9613-2:1996 Eq. (7) Geometrical divergence Adiv = 20 lg(d/d0) + 11 at 100 m 51 dB (+/-0 dB) 51 dB 0 dB
ISO 9613-2:1996 Table 3 Ground b'(0) porous limit -> Agr(250 Hz) = 2(-1.5 + 10.1) 17.2 dB (+/-0 dB) 17.2 dB 0 dB
ISO 9613-2:1996 clause 7.4 Single-edge diffraction saturates at the 20 dB cap 20 dB (+/-0 dB) 20 dB 0 dB
ISO 9613-2:1996 clause 7.4 Double-edge diffraction saturates at the 25 dB cap 25 dB (+/-0 dB) 25 dB 0 dB
ISO 9612:2009 Annex D Task-based LEX,8h + U (welder day, case a) LEX,8h 84.3; U 2.7 dB LEX,8h 84.3; U 2.7 dB -0.01; +0.02 dB
ISO 9612:2009 Annex E Job-based LEX,8h + U (production line, 18 workers) LEX,8h 88.1; U 3.8 dB LEX,8h 88.2; U 3.8 dB +0.06; -0.03 dB
ISO 9612:2009 Annex F Full-day LEX,8h + U (forklift drivers) LEX,8h 90.1; U 3.4 dB LEX,8h 90.1; U 3.4 dB +0.02; +0.03 dB
Materials: absorption, airflow & impedance: 100% (6/6)
Standard Quantity Expected (norm) Computed Δ Status
ISO 11654:1997 Annex A.1 Weighted absorption alpha_w (no indicator) 0.60 (class C, no indic.) 0.60 (class C, '') 0
ISO 11654:1997 Annex A.2 Weighted absorption alpha_w with M indicator 0.60(M) 0.60(M) 0
ISO 9053-2:2020 Annex A.3 Thermal boundary-layer thickness b 0.00183 m (+/-0.00001 m) 0.00183 m 0 m
ISO 9053-2:2020 Annex A.3 Effective ratio of specific heats kappa' 1.37 (+/-0.001) 1.37 0
ISO 10534-1:1996 Eqs (9)/(13)/(14) Absorption from standing-wave ratio s=3 alpha 0.75 (+/-0), |r| 0.5 alpha 0.75, |r| 0.5000 0
ISO 10534-2 Eq. (17) / Annex D Two-microphone round trip recovers a known reflection factor abs(r - (0.3-0.4j)) = 0 (identity, +/-1e-9) 0 0
Scattering & diffusion (ISO 17497): 100% (14/14)
Standard Quantity Expected (norm) Computed Δ Status
ISO 17497-1:2004 Eq (2) Reference speed of sound at 20 C 343.2 m/s (+/-0 m/s) 343.2 m/s 0 m/s
ISO 17497-1:2004 Eqs (1)/(4)/(5) Scattering coefficient (synthetic chain) 0.0931 (+/-0) 0.0931 0
ISO 17497-1:2004 Annex A.5 Expanded uncertainty of scattering coefficient 0.02971 (+/-0) 0.02971 0
ISO 17497-2:2012 Formula (5) Directional diffusion coefficient (QRD, model arc) 0.1099 (+/-0) 0.1099 0
ISO 17497-2:2012 Formula (5) Directional diffusion coefficient (flat reference) 0.0049 (+/-0) 0.0049 0
ISO 17497-2:2012 Formula (7) Normalised diffusion coefficient (QRD, model arc) 0.1055 (+/-0) 0.1055 0
Cox & D'Antonio 3e App. B (2D BEM) Normalised diffusion d_n, N=7 QRD x 6 periods, 200 Hz band (low-band anchor) 0 (+/-0.015) 0 0
Cox & D'Antonio 3e App. B (2D BEM) Normalised diffusion d_n, N=7 QRD x 6 periods, 250 Hz band (low-band anchor) 0.01 (+/-0.015) 0.001 -0.009
Cox & D'Antonio 3e App. B (2D BEM) Normalised diffusion d_n, N=7 QRD x 6 periods, 315 Hz band (low-band anchor) 0.01 (+/-0.015) 0.002 -0.008
Cox & D'Antonio 3e App. B (2D BEM) Normalised diffusion d_n, N=7 QRD x 6 periods, 400 Hz band (low-band anchor) 0.01 (+/-0.015) 0.008 -0.002
ISO 17497-2:2012 Formula (8) Zenith area factor (radians convention) 1.57105 (+/-0) 1.57105 0
Cox & D'Antonio Eq (10.3) QRD deepest well depth (N=7, f0=500 Hz) 0.196 m (+/-0 m) 0.196 m 0 m
Cox & D'Antonio Eq (5.8) + ISO 17497-2 Formula (7) Flat-panel predicted normalised diffusion (self-reference zero) 0 (+/-0) 0 0
Cox & D'Antonio Eq (5.8) + ISO 17497-2 Formula (7) QRD predicted normalised diffusion at 2 kHz (above flat panel) 0.208 (+/-0) 0.208 0
In-situ road absorption (ISO 13472): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
ISO 13472-1:2002 Clause 4.2 Geometrical-spreading factor Kr 0.6667 (+/-0) 0.6667 0
ISO 13472-1:2002 Annex A Maximum-sampled-area radius 1.3425 m (+/-0 m) 1.3425 m 0 m
ISO 13472-2:2010 Clause 5.4.1 Spot-tube upper usable frequency f_u 1989.4 Hz (+/-0.1 Hz) 1989.4 Hz 0 Hz
Precision sound power (ISO 3745 / 9614-3): 100% (4/4)
Standard Quantity Expected (norm) Computed Δ Status
ISO 3745:2012 Clause 10.5 EXAMPLE Expanded uncertainty U (k=2) 4.123 dB (+/-0.001 dB) 4.123 dB 0 dB
ISO 3745:2012 Eq (11) K1 background floor (6 dB edge band) 1.2563 dB (+/-0.0001 dB) 1.2563 dB 0 dB
ISO 3745:2012 Eq (16) Meteorological C1 at 23 C reference -0.1282 dB (+/-0.0001 dB) -0.1282 dB 0 dB
ISO 9614-3:2002 Eqs (5)/(8)/(9) Uniform-intensity LW recovery 80 dB (+/-0 dB) 80 dB 0 dB
Human vibration (ISO 8041 / 2631 / 5349): 100% (15/15)
Standard Quantity Expected (norm) Computed Δ Status
ISO 8041-1:2017 Table B.8 Wk design-goal factor at 6,31 Hz 1.054 (+/-0.1%) 1.0544 0
ISO 8041-1:2017 Table B.9 Wm design-goal factor at 1,585 Hz 0.9342 (+/-0.1%) 0.9342 0
ISO 8041-1:2017 Table 1 Wh factor at the 500 rad/s reference 0.202 (+/-0.15%) 0.202 0
ISO 8041-1:2017 Table B.1 Wb design-goal factor at 6,31 Hz 1.054 (+/-0.1%) 1.0545 0
ISO 8041-1:2017 Table B.1 Wb design-goal factors at 1 / 100 Hz max rel dev ≤ 0,1 % 0.000267 0
ISO 8041-1:2017 Table 1 Wc factor at the 100 rad/s reference 0.5145 (+/-0.1%) 0.5145 0
ISO 8041-1:2017 Table 1 + Table B.3 Wd factors at the 100 rad/s reference and 1 Hz max rel dev ≤ 0,1 % 0.000162 0
ISO 8041-1:2017 Table B.4 We design-goal factor at 8 Hz 0.1263 (+/-0.1%) 0.1263 0
ISO 8041-1:2017 Table B.5 Wf design-goal factors at 0,1585 / 0,1 Hz max rel dev ≤ 0,1 % 0.000098 0
ISO 8041-1:2017 Table B.7 Wj design-goal factors at 6,31 / 8 Hz max rel dev ≤ 0,1 % 0.00001 0
ISO 8041-1:2017 Table 5 + Annex B All nine weightings inside the tolerance envelope (318 printed bands) 0 bands outside the Table 5 tolerances 0 0
ISO 5349-2:2001 Example E.2.1 Single-tool daily exposure A(8) 4.1 m/s^2 (+/-0.05 m/s^2) 4.14 m/s^2 0.037 m/s^2
ISO 5349-2:2001 Example E.3 Forestry three-task A(8) 3.6 m/s^2 (+/-0.05 m/s^2) 3.61 m/s^2 0.01 m/s^2
ISO 5349-1:2001 Eq. (C.1) VWF 10 % lifetime Dy at A(8)=7 4 yr (+/-0.1 yr) 4.04 yr 0.042 yr
Directive 2002/44/EC Art. 3 HAV/WBV action & limit values HAV 2.5/5.0, WBV 0.5/1.15 m/s^2 HAV 2.5/5.0, WBV 0.5/1.15 m/s^2 0
Speech intelligibility (ANSI S3.5-1997): 100% (24/24)
Standard Quantity Expected (norm) Computed Δ Status
ANSI S3.5-1997 Table 3 Band-importance function normalisation 1 (+/-0) 1 0
ASA WG S3-79 SII.C (clause 5.4) Equivalent masking spectrum level at 200 Hz -1.665 (+/-0.001) -1.665 0
ANSI S3.5-1997 clause 5.6 Equivalent disturbance in quiet at 5000 Hz -23.6 dB (+/-0.01 dB) -23.6 dB 0 dB
ASA WG S3-79 SII.C (clause 6) SII, noise 30 dB plus hearing loss 40 dB 0.218454 (+/-0.000001) 0.218454 0
ANSI S3.5-1997 Annex C.2 Worked example (SII.C / R CRAN, errata applied) 0.851375 (+/-0.000001) 0.851375 0
ANSI S3.5-1997 Table C.2 (errata) Masking Zi at 200 Hz, corrected worksheet 34.66 dB (+/-0.01 dB) 34.66 dB -0.002 dB
ASA WG S3-79 SII.C (clause 6) SII, standard speech in quiet, normal hearing 0.99582517 (+/-0.000001) 0.99582517 0
ASA WG S3-79 TO.TST Official one-third-octave test case 0.445 (+/-0.001) 0.445 0
ASA WG S3-79 TO_1.TST Official test case, alternative importance 0.438 (+/-0.001) 0.438 0
ASA WG S3-79 CB.TST Official critical-band test case 0.273 (+/-0.001) 0.273 0
ASA WG S3-79 CB_1.TST Critical band, alternative importance 0.41 (+/-0.001) 0.41 0
ASA WG S3-79 ECB.TST Official equally-contributing test case 0.278 (+/-0.001) 0.278 0
ASA WG S3-79 ECB_1.TST Equally contributing, alternative importance 0.41 (+/-0.001) 0.41 0
ASA WG S3-79 OCTAVE.TST Official octave-band test case 0.491 (+/-0.001) 0.491 0
ASA WG S3-79 OCTAVE_1.TST Octave band, alternative importance 0.323 (+/-0.001) 0.323 0
ANSI S3.5-1997 Annex C.1 Octave-band worked example (SII.C) 0.504 (+/-0.001) 0.504 0
ANSI S3.5-1997 Table C.1 (errata) Level distortion Li, row i = 5 1 (+/-0.01) 1 -0.004
ANSI S3.5-1997 Table 1 Critical-band importance normalisation 1 (+/-0) 1 0
ANSI S3.5-1997 Table 2 Equally-contributing importance, 17 x 0.0588 0.9996 (+/-0) 0.9996 0
ANSI S3.5-1997 Table 4 Octave-band importance normalisation 1 (+/-0) 1 0
ANSI S3.5-1997 Table 4 Octave-band Ui and Xi equal Table 3's 0 dB (+/-0 dB) 0 dB 0 dB
ANSI S3.5-1997 Table 1 Critical-band table, all 21 rows 0 (+/-0) 0 0
ASA WG S3-79 SII.C (clause 6) Flat-input cases, all four procedures 0 (+/-0.000000001) 0.0000000001 0
ANSI S3.5-1997 Table 3 Loud-effort speech spectrum level at 1 kHz 42.16 dB (+/-0 dB) 42.16 dB 0 dB
Objective intelligibility (STOI / ESTOI): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Taal et al. 2011 (Eq. 6, degenerate) STOI of a signal against itself = 1 (perfect correlation) 1 (+/-0.000001) 1 0
Jensen & Taal 2016 (Eq. 8, degenerate) ESTOI of a signal against itself = 1 (perfect spectral correlation) 1 (+/-0.000001) 1 0
Taal et al. 2011 (monotonicity with SNR) STOI rises from -15 dB to +25 dB SNR speech-shaped noise STOI(+25 dB) - STOI(-15 dB) > 0.2 0.462 (0.389 -> 0.851) 0
Impulsive-sound prominence (NT ACOU 112): 100% (2/2)
Standard Quantity Expected (norm) Computed Δ Status
NT ACOU 112:2002 Formula 1 Predicted prominence, OR=1000 dB/s, LD=30 dB 11.9542 (+/-0.0001) 11.9542 0
NT ACOU 112:2002 Formula 2 Adjustment KI to LAeq at prominence P=10 9 dB (+/-0 dB) 9 dB 0 dB
Impulsive-sound prominence (ISO/PAS 1996-3): 100% (2/2)
Standard Quantity Expected (norm) Computed Δ Status
ISO/PAS 1996-3:2022 3.5 Onset rate of a 30 dB ramp over 0.30 s 100 dB/s (+/-0 dB/s) 100 dB/s 0 dB/s
ISO/PAS 1996-3:2022 Formula 3 Adjustment KI of the ramp onset 7.1176 dB (+/-0 dB) 7.1176 dB 0 dB
Room noise (ANSI S12.2-2019): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
ANSI S12.2-2019 Table 1 NC-40 curve, tangency self-consistency 40 (+/-0) 40 0
ANSI S12.2-2019 Table D.1 RC-31 Mark II curve, 63 Hz level 51 (+/-0) 51 0
ANSI S12.2-2019 clause D.4 RC-35 curve, mid-frequency average LMF 35 (+/-0) 35 0
Hearing threshold (ISO 7029 / ISO 389-7): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
ISO 7029:2017 Table 1 Median threshold, male age 60 at 4 kHz 20.209 dB (+/-0.001 dB) 20.208 dB 0 dB
ISO 7029:2017 Table 2 Upper spread su, male age 60 at 1 kHz 10.153 dB (+/-0.001 dB) 10.153 dB 0 dB
ISO 389-7:2005 Table 1 Free-field reference threshold at 1 kHz 2.4 dB (+/-0 dB) 2.4 dB 0 dB
Measurement uncertainty (GUM / Supplement 1): 100% (7/7)
Standard Quantity Expected (norm) Computed Δ Status
ISO/IEC Guide 98-3-1 clause 9.2 Combined uncertainty, additive model 2 (+/-0) 2 0
ISO/IEC Guide 98-3 Table G.2 Coverage factor, p=0.99, v=16 2.92 (+/-0.005) 2.921 0.001
ISO/IEC Guide 98-3 Annex G.4 Welch-Satterthwaite effective dof 40 (+/-0) 40 0
ISO/IEC Guide 98-3 Annex H.1 End-gauge combined uncertainty uc, nm 31.71 nm (+/-0.01 nm) 31.71 nm 0.001 nm
ISO/IEC Guide 98-3 Annex H.1 End-gauge expanded uncertainty U99, nm 92.1 nm (+/-0.1 nm) 92.1 nm 0.04 nm
ISO/IEC Guide 98-3 Annex H.2 (Table H.3) Correlated V/I/phi budget: uc(R), ohm 0.071 ohm (+/-0.001 ohm) 0.071 ohm 0 ohm
ISO/IEC Guide 98-3-1 Table 3 (clause 9.2.3) Seeded Monte Carlo, rectangular sum: 95 % interval endpoint +/-3.88 (u = 2.0) +/-3.886 (u = 2.002) 0.006
Noise-induced hearing loss (ISO 1999): 100% (6/6)
Standard Quantity Expected (norm) Computed Δ Status
ISO 1999:2013 Table D.2 Median NIPTS, 4 kHz, 90 dB, 20 yr 13 dB (+/-0.5 dB) 12.9 dB -0.057 dB
ISO 1999:2013 Table D.2 Worst-10 % NIPTS, 4 kHz, 90 dB, 20 yr 18 dB (+/-0.5 dB) 17.8 dB -0.239 dB
ISO 1999:2013 Table D.4 Worst-10 % NIPTS, 3 kHz, 100 dB, 40 yr 60 dB (+/-0.5 dB) 59.8 dB -0.172 dB
ISO 1999:2013 Annex C, Formulae (C.6) to (C.8) NIPTS at 1/2/4 kHz, 90 dB, 30 yr, Q = 10 % (annex inputs) 0, 9, 19 dB 0, 9, 19 dB 0 dB
ISO 1999:2013 Annex C, Formula (C.5) Compressed 4 kHz shift, Formula (1) with the annex's H = 36 dB 13.3 dB (+/-0.1 dB) 13.3 dB 0 dB
ISO 1999:2013 Annex C, Formula (C.11) Hearing threshold level with age and noise, 1/2/4 kHz mean, Q = 10 % 31.1 dB (+/-0.1 dB) 31.1 dB 0 dB
Multiple-shock whole-body vibration (ISO 2631-5): 100% (6/6)
Standard Quantity Expected (norm) Computed Δ Status
ISO 2631-5:2018 Formula 3 Daily acceleration dose, 5 x 40 m/s2 peaks 55.97 m/s2 (+/-0.01 m/s2) 55.97 m/s2 -0.002 m/s2
ISO 2631-5:2018 Formula C.3 Stress variable R, Annex C male example 1.22 (+/-0.01) 1.22 0
ISO 2631-5:2018 Formula C.5 Injury probability, Annex C male example 0.37 (+/-0.01) 0.37 -0.003
ISO 2631-5:2018 Annex C NOTE 5 Compressive stress Sd, female example 1.4 MPa (+/-0.01 MPa) 1.4 MPa -0.001 MPa
ISO 2631-5:2018 Annex C NOTE 5 Stress variable R, female example 0.97 (+/-0.01) 0.96 -0.008
ISO 2631-5:2018 Formula 1 vs Annex D Table D.1 Seat-to-spine transfer vs the 256 Hz digital filter (0,5-80 Hz) max abs(Formula 1 - filter) ≤ 0,04 0.001 0.001
Sound absorption in enclosed spaces (EN 12354-6): 100% (2/2)
Standard Quantity Expected (norm) Computed Δ Status
EN 12354-6:2003 Formula 1 Equivalent absorption area, Annex E bare room 2.26 m2 (+/-0.01 m2) 2.26 m2 0.003 m2
EN 12354-6:2003 Formula 5 Reverberation time, Annex E bare room 2.1 s (+/-0.1 s) 2.1 s 0.003 s
Prominent discrete tones (ECMA-418-1): 100% (2/2)
Standard Quantity Expected (norm) Computed Δ Status
ECMA-418-1:2024 Clause 10 Formula (2) Critical band at 1 kHz (f1,c / f2,c / dfc) dfc 162.2 Hz (+/-0.05 Hz); edges 922.2-1084.4 Hz dfc 162.22 Hz; edges 922.2-1084.4 Hz 0.017 Hz
ECMA-418-1:2024 Clause 11.6 Formula (14) Proximity spacing dfprox at 150 / 850 Hz 23 Hz @ 150 Hz; 63.8 Hz @ 850 Hz (+/-0.5 Hz) 23.0 Hz; 63.8 Hz +0.004; +0.044 Hz
Tonal audibility (ISO/PAS 20065): 100% (11/11)
Standard Quantity Expected (norm) Computed Δ Status
ISO/PAS 20065:2016 Formulae (12)-(14) Audibility at 137.3 Hz, Annex E spectrum 1 4.99 dB (+/-0.05 dB) 5.01 dB 0.022 dB
ISO/PAS 20065:2016 Formula (13) Masking index av at 137.3 / 592.2 Hz -2.02 dB @ 137.3 Hz; -2.4 dB @ 592.2 Hz (+/-0.005 dB) -2.017 dB; -2.400 dB +0.003; +0.000 dB
ISO/PAS 20065:2016 Formula (20) Mean audibility of the five spectra, Annex E 6.96 dB (+/-0.05 dB) 6.98 dB 0.018 dB
ISO/PAS 20065:2016 Formula (6) Mean narrow-band level LS from spectrum, Table E.1 49.22 dB (+/-0.02 dB) 49.22 dB -0.001 dB
ISO/PAS 20065:2016 Clause 6 Extended uncertainty U of the 137.3 Hz tone, Table E.2 2.79 dB (+/-0.02 dB) 2.8 dB 0.006 dB
ISO/PAS 20065:2016 Formulae (28)-(29) Extended uncertainty of the mean audibility, Annex E Step 4 1.38 dB (+/-0.01 dB) 1.38 dB -0.003 dB
ISO/PAS 20065:2016 Formula (8) Tone level LT from spectrum, Table E.1 67.96 dB (+/-0.02 dB) 67.96 dB -0.005 dB
ISO/PAS 20065:2016 Clause 5.3.8 Tone detection over the spectrum, Table E.1 tones at [118.4, 137.3, 158.8] Hz tones at [118.4, 137.3, 158.8] Hz exact
ISO/PAS 20065:2016 Clause 5.3.8 Step 3 Same-band FG combination inside analyze_spectrum, Table E.2 row 2 FG 72.15 dB (+/-0.02 dB) 72.15 dB -0.002 dB
ISO/PAS 20065:2016 Formula (17) Multi-tone FG combination, Table E.1 72.15 dB (+/-0.02 dB) 72.15 dB -0.002 dB
ISO/PAS 20065:2016 Formulae (18)/(19) Two-tone separation fD (DIN 45681 Annex J), 137.3 / 212 Hz fD(137.3)=24.09, fD(212)=21.0 Hz; Annex E pair combined fD(137.3)=24.09, fD(212)=21.00 Hz; Annex E pair combined exact
Psychoacoustic annoyance & fluctuation strength (Fastl & Zwicker): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Fastl & Zwicker Eqs (16.2)-(16.4) Psychoacoustic annoyance, worked (N5,S,F,R) tuple 37.0478 (+/-0.001) 37.0477 0
Fastl & Zwicker Eq (10.2) Fluctuation strength of AM broadband noise (60 dB, m=1, 4 Hz) 3.6943 vacil (+/-0.001 vacil) 3.6943 vacil 0 vacil
Fastl & Zwicker Ch. 10 / Osses et al. 2016 Fluctuation-strength calibration: 1 kHz / 60 dB / m=1 / 4 Hz AM tone 1 vacil (+/-0.05 vacil) 1 vacil 0 vacil
Electroacoustics: distortion & frequency response: 100% (20/20)
Standard Quantity Expected (norm) Computed Δ Status
IEC 60268-3:2013 (14.12.3.2) THD (rel. total RMS, the R convention the clause defines) 0.112853 (+/-0.0001) 0.112853 0
Closed-form harmonic synthesis (THD_F convention) THD (rel. fundamental, the widespread datasheet convention) 0.113578 (+/-0.0001) 0.113578 0
IEC 60268-5:2003 (20.3/20.4) Characteristic sensitivity level, 1 W into 8 ohm at 1 m (flat 90 dB) 90 dB (+/-0.000001 dB) 90 dB 0 dB
IEC 60268-5:2003 (21.2) Effective frequency range = -10 dB crossings (50 Hz / 18 kHz) 50 Hz / 18000 Hz (ref -10 dB crossings) 50.000 Hz / 18000.0 Hz -0.000 / -0.000 Hz
IEC 60268-3:2013 (14.12.5) 2nd-order harmonic distortion d2 (rel. total) 0.099361 (+/-0.0001) 0.099361 0
IEC 60268-4:2014 (11.1/11.3) Microphone sensitivity level, 12.5 mV/Pa -> 20 lg 0.0125 dB re 1 V/Pa -38.0618 dB (+/-0.00001 dB) -38.0618 dB 0 dB
IEC 60268-4:2014 (12.2) Effective frequency range = +/-3 dB tolerance crossings (40 Hz / 18 kHz) 40 Hz / 18000 Hz (+/-3 dB tolerance crossings) 40.000 Hz / 18000.0 Hz 0.000 / -0.000 Hz
IEC 60268-4:2014 (13.2.2) Directivity index of the ideal cardioid, 10 lg 3 dB (11.2.2 a integral) 4.771213 dB (+/-0.005 dB) 4.771214 dB 0 dB
IEC 60268-4:2014 (17.2) Equivalent noise level, 2.5 uV over 12.5 mV/Pa -> 200 uPa = 20 dB SPL 20 dB SPL (+/-0 dB SPL) 20 dB SPL 0 dB SPL
IEC 60268-3:2013 (14.12.7.2 g) Modulation distortion d_m,2 (arithmetic sideband sum over U_2,f2) 0.16 (+/-0.0001) 0.16 0
IEC 60268-3:2013 (14.12.7.2 h) Modulation distortion d_m,3 (arithmetic sideband sum over U_2,f2) 0.08 (+/-0.0001) 0.08 0
IEC 60268-3:2013 (14.12.8.1 a) Difference-frequency distortion d_d,2 (over U_2,ref = 2 U_2,f2) 0.03 (+/-0.0001) 0.03 0
IEC 60268-3:2013 (14.12.8.1 b) Difference-frequency distortion d_d,3 (arithmetic product sum) 0.04 (+/-0.0001) 0.04 0
IEC 60268-3:2013 (14.12.10) Total difference-frequency distortion (8 kHz / 11.95 kHz tones) 0.03605551 (+/-0.0001) 0.03605551 0
ITU-R BS.468-4 Table 1 Weighting network response at the 6.3 kHz peak (14.12.11 network) 12.2 dB (+/-0 dB) 12.2 dB 0 dB
IEC 60268-3:2013 (14.12.9) DIM of the 15 kHz / 3.15 kHz signal (Table 2, 9 products) 0.168819 (+/-0.0001) 0.168819 0
Bendat & Piersol, Random Data 4e H1 recovers a known first-order IIR gain at 1 kHz 0.8954 (+/-2%) 0.8954 0
Bendat & Piersol, Random Data 4e Ordinary coherence = 1 for a noiseless LTI path 1 (+/-0.001) 1 0
AES17-2015 (6.4.2 / 5.2.7) Idle channel noise, 1 kHz -20 dBFS tone (CCIR-RMS -5.63 dB offset) -25.63 dB (+/-0.01 dB) -25.63 dB 0 dB
AES17-2015 (6.4.1) Dynamic range, full-scale reference over a -40 dBFS residual at 2 kHz 40 dB (+/-0.6 dB) 40.41 dB 0.414 dB
Calibrated spectral analysis (Bendat & Piersol): 100% (12/12)
Standard Quantity Expected (norm) Computed Δ Status
Bendat & Piersol, Random Data 4e Eq. (5.67) White-noise autospectral density = sigma^2/(fs/2) 0.000977 (+/-3%) 0.000982 0
Bendat & Piersol, Random Data 4e Eq. (8.158) PSD random error = 1/sqrt(nd) (Monte Carlo, 100 seeded records) 0.1768 (+/-6%) 0.1764 0
Bendat & Piersol, Random Data 4e Eq. (8.163) 95% chi-square confidence interval coverage (Monte Carlo) 0.95 (+/-0.025) 0.94 -0.01
Bendat & Piersol, Random Data 4e Eqs. (9.55)/(6.39) Coherent output spectrum of a known-SNR path: gamma^2 = SNR/(1+SNR) 0.7191 (+/-0.03) 0.7255 0.006
Closed-form power-law slope (10*lg(2) dB/octave per unit exponent) Pink-noise PSD slope over 20 Hz - 20 kHz, dB/octave -3.0103 dB/oct (+/-0.05 dB/oct) -3.0116 dB/oct -0.001 dB/oct
IEC 60268-1:1985 Clause A2.1 / Table AII 5 ms burst of 5 kHz tone at 48 kHz: gate RMS = A/sqrt(2) (integral periods) 0.707107 (+/-0) 0.707107 0
Harris 1978 closed form (DFT-even Hann) Hann window ENBW = n*sum(w^2)/sum(w)^2 = 3/2 exactly 1.5 (+/-0) 1.5 0
Constant-power 1/n-octave kernel (closed form) 1/3-octave smoothed line level = Pdf/(f0(2^(1/6)-2^(-1/6))) 0.021592 (+/-1e-07%) 0.021592 0
Percival & Walden 1993, Table 382 Slepian taper concentration lambda_14(31, 8/31), quadruple-precision table 0.92943822082 (+/-0.000000000001) 0.92943822082 0
Percival & Walden 1993, Section 7.2 / Eq. (333) Multitaper white-noise density = sigma^2/(fs/2), NW=4, K=7 tapers 0.000977 (+/-3%) 0.000963 0
Percival & Walden 1993, Eq. (369a) tone calibration Multitaper 'spectrum' scaling reads a sinusoid peak at A^2/2 4.5 (+/-0.01%) 4.500003 0
Percival & Walden 1993, Eq. (370b) Adaptive multitaper dof -> 2K on white noise (weights -> uniform) 14 (+/-2%) 13.9847 -0.015
Multiple-input coherence (Bendat & Piersol): 100% (5/5)
Standard Quantity Expected (norm) Computed Δ Status
Bendat & Piersol, Random Data 4e Problem 7.2 / Eqs. (7.86)/(7.94) Conditioned coherent output of the 2nd input abs(G2y.1)^2/G22.1 = 4/3 exactly 1.333333333 (+/-0) 1.333333333 0
Bendat & Piersol, Random Data 4e Problem 7.2 / Eqs. (7.87)/(7.116) Partial coherence gamma^2_2y.1 = 2/15 and multiple coherence = 0.7 0.7 (+/-0) 0.7 0
Bendat & Piersol, Random Data 4e Eq. (7.35) with Eqs. (6.40)/(6.41) Multiple coherence of a known-SNR system: gamma^2_{y:x} = SNR/(1+SNR) 0.8889 (+/-0.03) 0.8913 0.002
Bendat & Piersol, Random Data 4e Eq. (7.117) Uncorrelated inputs: multiple coherence = sum of ordinary coherences 0 (+/-0.02) -0.0098 -0.01
Bendat & Piersol, Random Data 4e Eqs. (7.88)/(7.121) Output-power decomposition Gyy = sum of Gvi + Gnn (exact) 0 (+/-0.000000000001) 0 0
Time-frequency analysis (Bendat & Piersol): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Bendat & Piersol, Random Data 4e Eq. (12.173) Spectrogram of an on-bin tone reads its mean square A^2/2 in every column 2 (+/-1e-07%) 2 0
Parseval + COLA identity (Hann taper, 75% overlap) Time-integrated STFT power = time-domain energy of an interior burst 0.236151 (+/-1e-10%) 0.236151 0
Bendat & Piersol, Random Data 4e Eqs. (11.128)-(11.130) Zoom FFT tone amplitude = demodulate-decimate-DFT chain, machine precision 0.7 (+/-1e-10%) 0.7 0
Correlation, time delay and envelope (B&P / Knapp & Carter): 100% (7/7)
Standard Quantity Expected (norm) Computed Δ Status
Bendat & Piersol, Random Data 4e Eq. (5.21) Cross-correlation peak of a 16-sample pure delay, samples 16 (+/-0.001) 16 0
Knapp & Carter 1976, Table I (PHAT) + sub-sample interpolation GCC-PHAT estimate of an exact 12.25-sample fractional delay, samples 12.25 (+/-0.005) 12.2483 -0.002
Bendat & Piersol, Random Data 4e Eq. (5.101) Cross-spectrum phase-slope estimate of the same fractional delay 12.25 (+/-0.001) 12.2498 0
Bendat & Piersol, Random Data 4e Eq. (8.120) BLWN autocorrelation coefficient at 3 samples vs sin(2piBt)/(2piBt) -0.1559 (+/-0.02) -0.1666 -0.011
Bendat & Piersol, Random Data 4e Example 8.5 Random error of the correlation peak: B=100 Hz, T=5 s, M/S=N/S=10 0.35 (+/-0.001) 0.3493 -0.001
Bendat & Piersol, Random Data 4e Table 13.1 Hilbert transform of cos recovers sin: max interior error 0 (+/-0) 0 0
Bendat & Piersol, Random Data 4e Eq. (13.27) Envelope of an AM waveform recovers 1 + mcos(2pifm*t) exactly 0 (+/-0) 0 0
Cepstrum, liftering and envelope spectrum (Havelock / B&P): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Havelock 2008 Ch. 27 Fig. 21 + Mercator series of ln(1+ae^{-jtheta}) Power-cepstrum height at the echo delay = reflection coefficient a 0.4 (+/-0) 0.4 0
Havelock 2008 Ch. 87 Eq. (14): complex cepstrum, series term n = 2 Second rahmonic of a reflection a = 0.4 equals -a^2/2 -0.08 (+/-0) -0.08 0
Bendat & Piersol, Random Data 4e Sec. 13.3 (Fig. 13.11) Envelope-spectrum line of an AM tone (A0 = 2, m = 0.35) at fm 0.7 (+/-0.002) 0.7 0
Time synchronous averaging (McFadden 1987): 100% (5/5)
Standard Quantity Expected (norm) Computed Δ Status
McFadden 1987 Eq. 8 / Eq. 9: comb filter |C(f)| at a harmonic k/T Comb-filter tooth height at a harmonic equals unity (any N) 1 (+/-0) 1 0
McFadden 1987 Eq. 8: comb filter one quarter-order from a tooth, N = 2 Comb-filter magnitude = 1/sqrt(2) at order 0.25 0.70710678 (+/-0) 0.70710678 0
McFadden 1987 Sec. 4 (Fig. 5): node selection, tone at 32.05 orders N = 20 places a comb node on 32.05 orders (|C| = 0), not the power-of-2 N = 32 0 (+/-0.0000000001) 0 0
McFadden 1987 Eq. 5: exact recovery, integer samples per period Noiseless periodic waveform (M = 256) recovered to machine precision 0 (+/-0.0000000001) 0 0
McFadden 1987 Sec. 1: asynchronous-noise variance reduced by 1/N Residual noise std of the average falls as sigma/sqrt(N), N = 64 0.125 (+/-15%) 0.12414 -0.001
Data qualification and Rice statistics (Bendat & Piersol): 100% (8/8)
Standard Quantity Expected (norm) Computed Δ Status
Bendat & Piersol, Random Data 4e Example 4.4 Reverse arrangements of the 20-observation sequence 86 (+/-0) 86 0
Bendat & Piersol, Random Data 4e Table A.6 Lower percentage point A(20; 0.975) at alpha = 0.05 64 (+/-0) 64 0
Bendat & Piersol, Random Data 4e Table A.6 Upper percentage point A(20; 0.025) at alpha = 0.05 125 (+/-0) 125 0
Wald & Wolfowitz 1940 exact run distribution Runs acceptance region for n1 = n2 = 10, alpha = 0.05: lower point 6 (+/-0) 6 0
Wald & Wolfowitz 1940 exact run distribution Runs acceptance region for n1 = n2 = 10, alpha = 0.05: upper point 15 (+/-0) 15 0
Bendat & Piersol, Random Data 4e Example 5.13 / Eq. (5.195) Zero-crossing rate of bandlimited noise (fc = 1 kHz, B = 400 Hz) 2013 (+/-1%) 2013 -0.551
Bendat & Piersol, Random Data 4e Example 5.12 Apparent frequency of low-pass noise (B = 2 kHz) = 0.577 B 1155 (+/-1%) 1159 3.911
Bendat & Piersol, Random Data 4e Example 5.14 / Eq. (5.206) Prob[positive peak > 4 sigma] of a narrow bandwidth record 0.000335 (+/-0.00001) 0.000334 0
Underwater acoustics (ISO 18405/17208/18406): 100% (6/6)
Standard Quantity Expected (norm) Computed Δ Status
ISO 18405:2017 / ISO 18406 Formula 7 Sound pressure level of a synthetic tone, dB re 1 µPa 123.0103 (+/-0.0001) 123.0103 0
ISO 18405:2017 / ISO 18406 Formulae 3-4 Sound exposure level of a 2 s tone, dB re 1 µPa²·s 120 (+/-0.001) 120 0
ISO 18406:2017 (6.4.2.1.3) Peak sound pressure level of a known waveform, dB re 1 µPa 129.5424 (+/-0.0001) 129.5424 0
ISO 17208-1:2016 Radiated noise level from RMS pressure and distance, dB re 1 µPa·m 46.0206 (+/-0.0001) 46.0206 0
ISO 17208-2:2019 (Formula 3) Lloyd's-mirror surface correction ΔL at a known k·d_s -3.5211 (+/-0.0001) -3.5211 0
ISO 18406:2017 (Formulae 8-9) Cumulative SEL of N identical strikes = SEL_ss + 10·lg(N) 196.9897 (+/-0) 196.9897 0
Underwater sound propagation (transmission loss): 100% (16/16)
Standard Quantity Expected (norm) Computed Δ Status
Mackenzie (1981) nine-term equation Speed of sound at 25 °C, 35 ‰, 1000 m (canonical check value), m/s 1550.744 m/s (+/-0.01 m/s) 1550.744 m/s 0 m/s
UNESCO/Chen-Millero vs Mackenzie Sound-speed agreement at 10 °C, 35 ‰, 1000 m (cross-model), m/s 1506.264 m/s (+/-1 m/s) 1506.524 m/s 0.261 m/s
Del Grosso (1974) vs Mackenzie Sound-speed agreement at 10 °C, 35 ‰, 1000 m (cross-model), m/s 1506.264 m/s (+/-1 m/s) 1506.313 m/s 0.049 m/s
Spherical spreading 20·lg(R) Geometrical spreading loss at R = 1000 m, dB 60 dB (+/-0 dB) 60 dB 0 dB
Thorp (1967) absorption Volume absorption α at 10 kHz (cold deep water), dB/km 1.1498 dB/km (+/-0 dB/km) 1.1498 dB/km 0 dB/km
Ainslie-McColm (1998) vs Francois-Garrison (1982) Absorption agreement at 10 kHz, 10 °C, 35 ‰, 0 m, pH 8, dB/km 0.9626 dB/km (+/-0.0963 dB/km) 0.9866 dB/km 0.024 dB/km
Francois-Garrison (1982) Part II Table IV Absorption α at 100 kHz, 10 °C, 35 ‰, 0 m, pH 8 (printed value), dB/km 33.6 dB/km (+/-0.05 dB/km) 33.63 dB/km 0.03 dB/km
Del Grosso refit (Wong-Zhu 1995 Table IV) c(t90 = 20 °C, S = 35, P = 500 bar) vs the printed check table, m/s 1603.679 m/s (+/-0.001 m/s) 1603.679 m/s 0 m/s
Wales-Heitmeyer (2002) ensemble spectrum Merchant-ship source PSD at 100 Hz (printed equation), dB re 1 µPa²/Hz 158.45 dB (+/-0.001 dB) 158.45 dB 0 dB
Passive sonar equation (Urick/Etter) Figure of merit SL − (NL − DI) − DT, dB 85 dB (+/-0 dB) 85 dB 0 dB
Seabed reflection (Rayleigh, normal incidence) Bottom loss at 90° grazing, sand ρ=1900 c=1650 over water, dB 9.0506 dB (+/-0 dB) 9.0506 dB 0 dB
Wenz wind noise (rule of fives) Wind spectrum level at 1 kHz, 5 kn (canonical anchor), dB re 1 µPa²/Hz 51.0206 dB (+/-0.0001 dB) 51.0206 dB 0 dB
Mellen thermal noise Thermal spectrum level at 50 kHz, 16.85 °C (physical), dB re 1 µPa²/Hz 19.3426 dB (+/-0 dB) 19.3426 dB 0 dB
JOMOPANS-ECHO ship source level Bulker V=13.5 kn L=211 m band level at 1 kHz (File S1 oracle), dB re 1 µPa m 161.394 dB (+/-0.01 dB) 161.394 dB 0 dB
UNESCO sound speed (EOS-80 canonical value) SVEL(S = 40, T68 = 40 °C, P = 1000 bar) vs Fofonoff & Millard 1983, m/s 1731.995 m/s (+/-0.02 m/s) 1732.004 m/s 0.009 m/s
Medwin (1975) sound speed (Ainslie Eqs. 1.2-1.4) ∂c/∂T at 10 °C, neglecting the bracketed terms, m/s per °C 3.5 m/s per °C (+/-0.001 m/s per °C) 3.5 m/s per °C 0 m/s per °C
Underwater propagation regimes (Weston flux theory): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Ainslie (2010) Table 9.1, medium sand Reflection loss gradient η from Equation (9.51), Np/rad 0.28 Np/rad (+/-0.005 Np/rad) 0.278 Np/rad -0.002 Np/rad
Ainslie (2010) Table 9.1, mud Reflection loss gradient η from Equation (9.53) at 1 Hz, Np/rad 0.021 Np/rad (+/-0.0005 Np/rad) 0.02073 Np/rad 0 Np/rad
Weston cylindrical spreading vs normal modes Range-averaged TL in an ideal 100 m waveguide at 100 Hz, 20-30 km, dB 58.949 dB (+/-1 dB) 58.399 dB -0.55 dB
Marine-mammal auditory weighting (NMFS / Southall): 100% (4/4)
Standard Quantity Expected (norm) Computed Δ Status
NMFS (2018) Appendix D worked example Weighting factor adjustment W(1 kHz) for high-frequency cetaceans, dB -37.55 dB (+/-0.01 dB) -37.545 dB 0.005 dB
NMFS (2024) v3.0 Table 5, otariid C C recomputed as the peak of W(f) for the OW row (printed 1.37, corrected 1.36), dB 1.3643 dB (+/-0.0005 dB) 1.3643 dB 0 dB
Ainslie (2010) Equation (11.159), orca audiogram Hearing threshold at 50 kHz (third branch), dB re 1 µPa 51.2 dB (+/-0.05 dB) 51.199 dB -0.001 dB
Ainslie (2010) §11.4.6, orca versus salmon Noise-limited figure of merit (SL + TS − NL + AG − DT)/2, dB re m² 51 dB (+/-0 dB) 51 dB 0 dB
Underwater numerical propagation (modes / rays / PE): 100% (4/4)
Standard Quantity Expected (norm) Computed Δ Status
Normal modes vs ideal waveguide Fundamental horizontal wavenumber kr1 at 20 Hz, 100 m (analytic), rad/m 0.077662 rad/m (+/-0.0001 rad/m) 0.077662 rad/m 0 rad/m
Normal modes vs image-source oracle Absolute TL at 1 km in the ideal waveguide (converged image sum), dB 48.238 dB (+/-0.02 dB) 48.239 dB 0.001 dB
Ray tracing vs linear gradient Turning depth of a 10° ray, c = 1500 + 0.05z (circular arc), m 462.8 m (+/-1 m) 462.8 m 0 m
Parabolic equation vs free field PE transmission loss at 2 km, homogeneous medium (spherical spreading), dB 66.021 dB (+/-0.1 dB) 66.021 dB 0 dB
Aircraft noise (ICAO Annex 16 / IEC 61265): 100% (15/15)
Standard Quantity Expected (norm) Computed Δ Status
ECAC Doc 29 noise fraction (half path) Finite-segment correction ΔF for a perpendicular foot at the segment start, dB -3.0103 dB (+/-0.001 dB) -3.0103 dB 0 dB
ECAC Doc 29 single-event chain SEL of a long level flyover vs the infinite-path limit LE∞ + ΔI − Λ, dB 83.444 dB (+/-0.01 dB) 83.444 dB 0 dB
ECAC Doc 29 impedance adjustment (standard atmosphere) Acoustic-impedance adjustment of NPD data at 15 °C / 101.325 kPa (Eq. 4-6/4-7), dB 0.074 dB (+/-0.0005 dB) 0.0741 dB 0 dB
ECAC Doc 29 reference workbook (segment Λ) Lateral attenuation of a climbing segment vs the ECAC Vol 3 Part 1 workbook, dB 6.3769 dB (+/-0.01 dB) 6.3769 dB 0 dB
ECAC Doc 29 start-of-roll directivity (jet) ΔSOR behind a takeoff ground-roll segment vs the Vol 3 Part 1 workbook, dB 0.3196 dB (+/-0.01 dB) 0.3196 dB 0 dB
ECAC Doc 29 start-of-roll directivity (turboprop) ΔSOR behind a takeoff ground-roll segment (turboprop, Eq. 4-24b), dB 1.0943 dB (+/-0.01 dB) 1.0944 dB 0 dB
ECAC Doc 29 workbook event assembly (JETFDS/R03, behind SOR) Energy sum of the reference per-segment SELs vs the B-1 event total, dB 74.73 dB (+/-0.01 dB) 74.733 dB 0.003 dB
SAE ARP 5534 band-attenuation continuity SAE-Method δ_B at the 150 dB branch split (Eq. 7 vs Eq. 8), dB 123.95 dB (+/-0.01 dB) 123.953 dB 0.003 dB
EASA ANP database round-trip Interpolated NPD level at a tabulated node vs the published ANP value, dB 98.8 dB (+/-0 dB) 98.8 dB 0 dB
ECAC Doc 29 NPD interpolation Log-linear NPD level at the log-midpoint distance (Eq. 4-4), dB 97 dB (+/-0 dB) 97 dB 0 dB
SAE ARP 5534 pure-tone coefficient (ISO 9613-1) Mid-band α at 1 kHz, 25 °C, 70 % RH, 101.325 kPa, dB/m 0.006186 dB/m (+/-0 dB/m) 0.006186 dB/m 0 dB/m
ICAO Annex 16 Vol. I App. 2 Table A2-3 Perceived noisiness at SPL(b), 1 kHz band, in noys 1 (+/-0) 1 0
ICAO Doc 9501 ETM Vol. I Table 3-7 Tone correction of the turbofan example, dB 2 (+/-0) 2 0
ICAO Doc 9501 ETM Vol. I Table 4-4 Integrated-method reference EPNL, EPNdB 92.619 EPNdB (+/-0.01 EPNdB) 92.619 EPNdB 0 EPNdB
IEC 61265:1995 Table 1 Directional-response tolerance at 4 kHz / 90°, dB 2 dB (+/-0 dB) 2 dB 0 dB
Rotorcraft noise (ECAC Doc 32 / NORAH2): 100% (12/12)
Standard Quantity Expected (norm) Computed Δ Status
ECAC Doc 32 atmospheric attenuation (Table 4) ΔLa over a 1 km excess path at 1 kHz vs the NORAH2 guidance Table 4, dB 6.3 dB (+/-0.2 dB) 6.186 dB -0.114 dB
ECAC Doc 32 spherical spreading ΔLs at ten times the 60 m hemisphere reference distance (Eq. 24), dB -20 dB (+/-0 dB) -20 dB 0 dB
ECAC Doc 32 ground effect (rigid limit) ΔLg over a rigid surface at grazing incidence tends to +6 dB (Eq. 29), dB 6 dB (+/-1 dB) 6 dB 0.002 dB
ECAC Doc 32 propagation chain (NORAH2 prototype) LA of a single-hemisphere emission vs the NORAH2 prototype single-event history (R22 approach, 223.66 m slant), dB(A) 55.87 dB(A) (+/-0.1 dB(A)) 55.886 dB(A) 0.016 dB(A)
ECAC Doc 32 flight-condition interpolation (NORAH2 Eq. 8) Distance-scaled triangle blend of three uniform hemispheres, hand-checked, dB 97.0367 dB (+/-0.001 dB) 97.0364 dB 0 dB
ECAC Doc 32 flight-path kinematics (Eq. 17) Airspeed of a straight climbing track, 40 m/s ground speed at a 5° path angle, m/s 40.15279 m/s (+/-0.0001 m/s) 40.15279 m/s 0 m/s
ECAC Doc 32 retarded time (Eq. 22) Recorded-time delay at 100 m slant distance, r/c with c = 346.1 m/s, s 0.288934 s (+/-0.00001 s) 0.288934 s 0 s
ECAC Doc 32 single event (Eq. 27) SEL − LASmax of a constant-speed level flyover, 10·lg(π·d/V) closed form, dB 7.982 dB (+/-0.1 dB) 7.942 dB -0.04 dB
NORAH2 guidance mean ground plane (Eq. 36-40) Intercept of the plane fitted to a symmetric 20 m roofline, hand-checked, m 10 m (+/-0 m) 10 m 0 m
NORAH2 guidance mean flow resistivity (Eq. 41) Log-average of equal 1e4 and 1e6 Pa·s/m2 halves, hand-checked, Pa·s/m2 100000 Pa·s/m² (+/-0 Pa·s/m²) 100000 Pa·s/m² 0 Pa·s/m²
NORAH2 guidance diffraction at grazing (Eq. 42) Pure diffraction with the edge on the line of sight, 10·lg 3, dB 4.7712 dB (+/-0.0001 dB) 4.7712 dB 0 dB
NORAH2 guidance screening path difference (§A.4.5) Rubber-band delta over a 40 m hill, hand-checked geometry, m 4.2848 m (+/-0 m) 4.2848 m 0 m
CNOSSOS-EU road source (Directive 2002/49/EC Annex II): 100% (6/6)
Standard Quantity Expected (norm) Computed Δ Status
CIRCABC CNOSSOS-EU road emission test set Line power of the 60 committed cases of the 4 875-case published test set, 8 octave bands each, dB re 1 pW/m <= 0.01 dB on 480 published band levels (60 cases) 0.005 dB 0.005 dB
Directive (EU) 2021/1226 Annex pt (19)(a), Table F-1 Rolling and propulsion coefficients, 5 categories x 4 rows x 8 bands 160 coefficients identical 0 mismatches 0 mismatches
Directive (EU) 2021/1226 Annex pt (19)(b), Table F-4 Road-surface coefficients, 15 surfaces x 5 categories x (8 alpha + beta) 675 stored coefficients identical 0 mismatches 0 mismatches
Directive (EU) 2015/996 Appendix F, Tables F-2 and F-3 Studded-tyre and junction coefficients, unchanged since 2015 36 coefficients identical 0 mismatches 0 mismatches
Directive (EU) 2015/996 Annex II 2.2.4 / 2.2.11 Sound power at v_ref = 70 km/h under reference conditions, dB re 1 pW exactly A_R,i,m and A_P,i,m 0 dB 0 dB
Directive (EU) 2021/1226 Annex pt (8)(b) Octave-band A-weighting AWC_f,i prescribed by 2.5.5, dB 8 values identical 0 mismatches 0 mismatches
Wind-turbine noise (IEC 61400-11): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
IEC 61400-11:2012 Formula 30 Critical bandwidth about a 500 Hz tone, Hz 117.255 Hz (+/-0 Hz) 117.255 Hz 0 Hz
IEC 61400-11:2012 Formula 26 Apparent sound power level of a single band, dB re 1 pW 148.5139 dB (+/-0.0001 dB) 148.5139 dB 0 dB
IEC 61400-11:2012 Formulae 31-34 Tonal audibility of a synthetic clean tone, dB 16.38 dB (+/-0.06 dB) 16.38 dB -0.001 dB
Porous & multilayer absorbers (Mechel / Bies / Cox & D'Antonio): 100% (20/20)
Standard Quantity Expected (norm) Computed Δ Status
Bies 5e App. D Table D.1 / Mechel 2e G.11 (2) Delany-Bazley normalised Zc at X = 0.1, real part 1.3241 (+/-0) 1.3241 0
Bies 5e App. D Table D.1 / Mechel 2e G.11 (2) Delany-Bazley normalised Zc at X = 0.1, imaginary part -0.4694 (+/-0) -0.4694 0
Miki 1990 Eqs. (30)-(34) Miki normalised wavenumber at f/sigma = 0.1, real part 1.4523 (+/-0) 1.4523 0
Johnson et al. 1987 / Cox & D'Antonio 3e Eq. (6.19) JCA static viscous limit j w rho_e -> sigma, Pa s/m2 20000 Pa s/m2 (+/-0.01%) 20000 Pa s/m2 0 Pa s/m2
Mechel 2e Sect. D.3 Eq. (1) Hard-backed layer: TMM vs -j Zc cot(kd), max rel deviation 0 (+/-0) 0 0
Lossless-layer limit (Mechel 2e Sect. D.3-D.4) Air cavity over a rigid wall at lambda/4: alpha 0 (+/-0) 0 0
Mechel 2e Sect. D.5 Maximum statistical absorption of a locally reacting plane 0.951 (+/-0.001) 0.951 0
Cox & D'Antonio 3e Eq. (7.9) Membrane resonance 60/sqrt(m d), m = 5 kg/m2, d = 5 cm, Hz 120 Hz (+/-2%) 119.85 Hz -0.15 Hz
Maa 1998 Fig. 5 / Cox & D'Antonio 3e Fig. 7.28 Microperforated panel (d=t=0.2 mm, b=2.5 mm, D=6 cm): peak alpha 0.95 (+/-0.05) 0.956 0.006
Maa 1998 Eqs. (5a)/(10) MPP peak absorption vs 4r/(1+r)^2 with Maa's printed resistance 4r/(1+r)^2 = 0.949 0.956 0.007
Allard & Atalla 2e Sect. 11.3.4 (Eq. 6.90), Table 6.1 glass wool Zwikker-Kosten decoupling frequency Fd, Hz 43.27 Hz (+/-0.005 Hz) 43.271 Hz 0.001 Hz
Allard & Atalla 2e Eq. (11.55), printed p. 253 (prose limit) Limp effective density at DC = apparent total density rho_t, kg/m3 31.1809 kg/m3 (+/-0.01%) 31.1809 kg/m3 0 kg/m3
Allard & Atalla 2e Eq. (11.55), printed p. 253 (prose limit) Heavy frame recovers the rigid-frame Zc (relative deviation) 0 (+/-0.00001) 0 0
Allard & Atalla 2e printed p. 254 (Doutres et al. 2007) Limp-frame bulk-modulus limit for air, kPa 20 kPa (+/-0.3 kPa) 20.27 kPa 0.265 kPa
Allard & Atalla 2e Eq. (6.110), Table 6.1 glass wool Frame lambda/4 resonance of a 10 cm layer, Hz 459.9 Hz (+/-0.05 Hz) 459.93 Hz 0.033 Hz
Allard & Atalla 2e Sect. 6.5.4 (Biot model output), pp. 124-125 Airborne compressional branch changes root at 495 Hz 495 Hz (+/-1%) 495.9 Hz 0.9 Hz
Allard & Atalla 2e Sect. 6.5.4 (Biot model output), pp. 124-125 Frame-borne velocity ratio Re(mu_b) at 1500 Hz (see ERRATA) 0.82 (+/-2%) 0.811 -0.009
Allard & Atalla 2e Sect. 6.6.3 (Biot model output), p. 129 Surface-impedance peak of a 5,6 cm layer, Hz 860 Hz (+/-2%) 863.5 Hz 3.5 Hz
Allard & Atalla 2e Sect. 11.3.4 (rigid-frame limit) Stiff, heavy frame recovers the JCA layer (max rel deviation) 0 (+/-0.0000001) 0.0000000034 0
Allard & Atalla 2e Eq. (6.107) vs Sect. 11.5 assembly Two independent derivations of Zs (max rel deviation) 0 (+/-0.0000000001) 0 0
Slow-sound perfect absorbers (Jimenez et al. Appl. Sci. 2017): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Jimenez et al. Appl. Sci. 2017 Eq. (9) Critical coupling: alpha at the design frequency (300 Hz, normal) 1 (+/-0.001) 1 0
Poiseuille limit (Stinson 1991) Slit: j w rho_s -> 12 eta / h^2 as w -> 0 (h = 1.2 mm) 153.3 Pa s/m2 (+/-0.1%) 153.3 Pa s/m2 0 Pa s/m2
Poiseuille limit (Stinson 1991) Square duct: j w rho -> 28.454 eta / w^2 as w -> 0 (w = 3 mm) 58.2 Pa s/m2 (+/-0.2%) 58.2 Pa s/m2 0 Pa s/m2
Program loudness (ITU-R BS.1770 / EBU R 128): 100% (8/8)
Standard Quantity Expected (norm) Computed Δ Status
ITU-R BS.1770-5 Annex 1 997 Hz sine at 0 dB FS on the left channel, LKFS -3.01 LKFS (+/-0.01 LKFS) -3.01 LKFS 0 LKFS
EBU Tech 3341:2023 Table 1 case 1 Integrated loudness of the -23 dBFS stereo sine, LUFS -23 LUFS (+/-0.1 LUFS) -22.99 LUFS 0.007 LUFS
EBU Tech 3341:2023 Table 1 case 5 Gated integrated loudness of the -26/-20/-26 dBFS steps, LUFS -23 LUFS (+/-0.1 LUFS) -22.98 LUFS 0.021 LUFS
EBU Tech 3341:2023 Table 1 case 6 Integrated loudness of the 5.0-channel sine (Table 3 weights), LUFS -23 LUFS (+/-0.1 LUFS) -23.02 LUFS -0.016 LUFS
EBU Tech 3341:2023 Table 1 case 15 True-peak level of the fs/4 sine at 0.5 FFS, dBTP -6 dBTP (+0.2/-0.4 dB) -6.02 dBTP -0.015 dBTP
EBU Tech 3341:2023 Table 1 case 19 True-peak level of the fs/4 sine at 1.41 FFS, dBTP 3 dBTP (+0.2/-0.4 dB) 3 dBTP 0.001 dBTP
EBU Tech 3342:2023 Table 1 case 1 Loudness range of the -20/-30 dBFS tone steps, LU 10 LU (+/-1 LU) 10 LU 0 LU
EBU Tech 3342:2023 Table 1 case 3 Loudness range of the -40/-20 dBFS tone steps, LU 20 LU (+/-1 LU) 20 LU 0 LU
2D FDTD wave simulation (Attenborough & Van Renterghem 2021, Ch. 4): 100% (4/4)
Standard Quantity Expected (norm) Computed Δ Status
Rigid rectangular box eigenfrequency Mode (1,1) of a 1.0 x 0.7 m rigid box, f = (c/2)*sqrt(1/lx^2 + 1/ly^2), Hz 299.06 Hz (+/-1.5 Hz) 298.91 Hz -0.153 Hz
Free-field pulse arrival delay Probe-to-probe delay of a pulse over 0.6 m of air, (r2 - r1)/c, ms 1.749 ms (+/-0.05 ms) 1.756 ms 0.007 ms
2D Kirchhoff-Helmholtz NTFF: monopole directivity Far-field pattern ripple of an enclosed line source, dB 0 dB (+/-0.2 dB) 0.044 dB 0.044 dB
2D Kirchhoff-Helmholtz NTFF: monopole level NTFF far-field level vs the 2D Green function A sqrt(2/(pi k)), dB 0 dB (+/-0.3 dB) 0.106 dB 0.106 dB
Swept-sine distortion & phase utilities (Farina / Novak): 100% (7/7)
Standard Quantity Expected (norm) Computed Δ Status
Farina 2000 / Novak et al. 2015 (Chebyshev identity) 3rd-harmonic response H3 magnitude of a cubic polynomial, re a3/4 0.05 (+/-0.0005) 0.05001 0
Novak et al. 2015, JAES 63(10), Eqs. 18/49 Synchronized-sweep phase of H3 (Chebyshev: -sin(3wt)), rad 3.1416 rad (+/-0.005 rad) 3.1411 rad 0 rad
Farina 2000, AES 108th Conv. (THD from one sweep) THD(1 kHz) of the polynomial vs sqrt((a2/2)^2+(a3/4)^2)/(1+3a3/4) 0.06149 (+/-0.001) 0.06159 0
Farina 2000 (distortion rejected from the linear IR) THD floor of a purely linear path (gain 0.5), max over 100-2000 Hz 0 (+/-0.001) 0.00033 0
Bendat & Piersol, Random Data 4e Sec. 13.1.4 (Hilbert relation) Min-phase reconstruction of a strictly min-phase biquad, max err, rad 0 rad (+/-0 rad) 0 rad 0 rad
First-order allpass closed form (1-a^2)/(1+2a cos w+a^2) Group delay of the a = 0.5 allpass at w = pi/2, samples 0.6 (+/-0.00001) 0.6 0
All-pass decomposition of a pure latency (B&P Sec. 13.1.4) Excess group delay of a biquad delayed 7.25 samples, samples 7.25 (+/-0) 7.25 0
Spherical ground & barriers (Attenborough / Salomons / Bies): 100% (7/7)
Standard Quantity Expected (norm) Computed Δ Status
Attenborough 2e Eq. (2.40c) (spherical Q, hard-ground limit) abs(Q) as Z grows large (Rp -> 1 so (1 - Rp) -> 0 and Q -> 1) 1 (+/-0.000001) 1 0
Salomons 2001 Sec. 3.4 (two-ray field over a rigid ground) dL enhancement at small path difference (constructive, +6 dB) 6.0206 dB (+/-0.1 dB) 6.0205 dB 0 dB
Salomons 2001 Eq. (D.59) (plane-wave Rp, grazing incidence) Re(Rp) at grazing (hs, hr -> 0, cos(theta) -> 0 so Rp -> -1) -1 (+/-0.001) -1 0
Salomons 2001 Fig. D.3 (grassland ground dip, sigma = 200 kPa s/m2) Minimum dL for hs = hr = 2 m, r = 100 m (dip near 395 Hz), dB -12.7 dB (+/-0.3 dB) -12.72 dB -0.022 dB
Bies 5e Eq. (5.138) (Kurze-Anderson, N -> 0) Barrier attenuation at the shadow boundary N = 0 5 dB (+/-0 dB) 5 dB 0 dB
Bies 5e Eq. (5.138) (Kurze-Anderson, large-N slope) Delta(N=10) - Delta(N=1) vs the 10 lg(10) = 10 dB decade growth 10 dB (+/-0.5 dB) 9.8845 dB -0.116 dB
Attenborough 2e Eqs. (9.19)-(9.20) (rigid half-plane, shadow boundary) Exact thin-screen insertion loss at grazing (field halved, 6 dB) 6.0206 dB (+/-0.6 dB) 5.7932 dB -0.227 dB
Panel & aperture sound insulation (Bies / Hopkins / Cremer): 100% (17/17)
Standard Quantity Expected (norm) Computed Δ Status
Bies 5e Eq. 7.40 (mass law) 6 dB per octave (500 -> 1000 Hz) 6.0206 dB (+/-0.01 dB) 6.02 dB -0.001 dB
Bies 5e Eq. 7.40 (mass law) 6 dB per doubling of mass 6.0206 dB (+/-0.01 dB) 6.02 dB -0.001 dB
Bies 5e Eq. 7.42 (field incidence) One-third-octave correction 5.5 dB 5.5 dB (+/-0.001 dB) 5.5 dB 0 dB
Hopkins Eq. 2.201 / Bies Eq. 7.3 Coincidence frequency, 6 mm glass 2079 Hz (+/-3%) 2107.3639 Hz 28.364 Hz
Cremer Table 5.1 Thin-plate point impedance Z = 8 sqrt(B' m'') 2529.8221 N.s/m (+/-0 N.s/m) 2529.8221 N.s/m 0 N.s/m
Cremer Table 5.1 Infinite-beam mobility phase -45 deg -45 deg (+/-0 deg) -45 deg 0 deg
Hopkins Eq. 2.229 (Leppington/Maidanik) Radiation efficiency at f = 2 fc 1.4142 (+/-0) 1.4142 0
Bies Eq. 7.62 / Hopkins Eq. 4.73 Mass-air-mass resonance f0, empty cavity 76.9484 Hz (+/-0.5%) 76.8521 Hz -0.096 Hz
Bies Eq. 7.64 (double wall) Below f0 = mass law of the combined mass 11.6144 dB (+/-0 dB) 11.6144 dB 0 dB
Hopkins Eq. 4.92 (composite) 1 % open area caps R at 10 lg(S/Sa) 20 dB (+/-0.05 dB) 19.9996 dB 0 dB
Vigran Building Acoustics Eq. (3.109), printed p. 96 Flat 1 mm steel plate 1 m x 1 m, f(1,1) 4.9 Hz (+/-0.05 Hz) 4.93 Hz 0.033 Hz
Vigran Eqs. (3.113)/(3.115), printed p. 96 Corrugated 1 mm steel plate (H = 10 mm, L = 100 mm), f(2,2) 102 Hz (+/-0.1 Hz) 102.09 Hz 0.092 Hz
Bies 5e Eq. (7.59) / Vigran Eq. (6.112) Heckl coincidence-branch constant, dB (rho c = 414) -13.2 dB (+/-0.02 dB) -13.217 dB -0.017 dB
Bies 5e Eq. (7.60) / Vigran Eq. (6.112) Heckl recovery-branch constant, dB (rho c = 414) -23 dB (+/-0.2 dB) -23.16 dB -0.16 dB
Vigran Eq. (6.111) / Bies Eq. (7.38) Orthotropic diffuse integral below fc1 vs its exact mass-law form 6.287723 dB (+/-0.000001 dB) 6.287723 dB 0 dB
Hopkins Table A2, printed p. 608 h.fc products of 25 building-material rows, worst deviation 0 m.Hz (+/-0.06 m.Hz) 0.0476 m.Hz 0.048 m.Hz
Hopkins Eq. 4.99/4.101 (Gomperts slit) Transmission maximum at first resonance 1544.9615 Hz (+/-15 Hz) 1542.9615 Hz -2 Hz
Bending-wave plate-junction transmission (Cremer / Craik / Hopkins): 100% (6/6)
Standard Quantity Expected (norm) Computed Δ Status
Hopkins Eq. 5.12 (identical plates) X-junction corner tau12(0 deg) = 1/8 0.125 (+/-0) 0.125 0
Hopkins Eqs 5.12 + 5.6 (identical plates) X-junction corner angular average = 1/12 0.0833 (+/-0) 0.0833 0
Hopkins Eqs 5.12 + 5.6 (identical plates) L-junction corner angular average = 1/3 0.3333 (+/-0) 0.3333 0
Hopkins Eq. 5.14 (identical plates) In-line junction tau12(0 deg) = 1 1 (+/-0) 1 0
Hopkins Eq. 5.7 (SEA consistency) X-junction reciprocity tau_bar_12 / tau_bar_21 = chi 1.5 (+/-0) 1.5 0
Hopkins Eq. 5.116 (identical plates, fc_j = f_ref) X-junction vibration reduction index = 10 lg(12) 10.7918 dB (+/-0 dB) 10.7918 dB 0 dB
Atmospheric refraction (Salomons rays / GFPE): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Salomons Sec. 4.4 (ray turning height, linear profile) Turning height of a 10 deg ray vs Rc(1 - cos theta0) (circular arc), m 26.457 m (+/-0.1 m) 26.457 m 0 m
Salomons Eq. (3.4) (GFPE vs spherical-wave ground effect, homogeneous) PE relative level at 500 m over grassland vs Weyl-Van der Pol, dB -16.368 dB (+/-0.5 dB) -16.402 dB -0.035 dB
Salomons Eq. (3.4) (GFPE hard ground vs two-ray, homogeneous) PE relative level at 500 m over a rigid ground vs the coherent two-ray, dB 5.997 dB (+/-0.6 dB) 5.593 dB -0.405 dB
Electroacoustics: 100% (9/9)
Standard Quantity Expected (norm) Computed Δ Status
Beranek & Mellow 2e Eq. (13.117) Piston resistance R1(x) = 1 - 2 J1(x)/x at x = 2ka = 2 0.423275 (+/-0.00001) 0.423275 0
Beranek & Mellow 2e Eq. (13.118) Piston reactance X1(x) = 2 H1(x)/x at x = 2ka = 2 0.646764 (+/-0.00001) 0.646764 0
Beranek & Mellow 2e Eq. (13.117) (low-frequency limit) R1 -> (ka)^2/2 as ka -> 0 (x = 0.02, ka = 0.01) 0.00005 (+/-0.01%) 0.00005 0
Beranek & Mellow 2e Eq. (4.151) Radiation mass M = 8 rho a^3 / 3 (a = 0.1 m, rho = 1.206) 0.003216 kg (+/-0 kg) 0.003216 kg 0 kg
Beranek & Mellow 2e Eq. (13.102), Table 14.1 First directivity null at ka sin(theta) = 3.8317 (first zero of J1) 0 (+/-0.000001) 0 0
Beranek & Mellow 2e §4.19 (half-space baffle) Directivity index DI -> 10 lg 2 = 3.01 dB as ka -> 0 3.0103 dB (+/-0.001 dB) 3.0103 dB 0 dB
Long, Architectural Acoustics 2e, Eq. (18.21) Omnidirectional mic at Zs = -6 dB: L(H-M) <= L(H-L) - 4 dB 76 dB (+/-0 dB) 76 dB 0 dB
Long, Architectural Acoustics 2e, Eq. (18.22) Cardioid mic (DM = -2 dB) at Zs = -6 dB: L(H-M) <= L(H-L) - 2 dB 78 dB (+/-0 dB) 78 dB 0 dB
Long, Architectural Acoustics 2e, Eq. (18.23) Number-of-open-microphones correction 10 lg Nm at Nm = 4 6.0206 dB (+/-0 dB) 6.0206 dB 0 dB
Industrial noise control: 100% (22/22)
Standard Quantity Expected (norm) Computed Δ Status
Bies 5e Eq. (8.111) Expansion-chamber peak TL = 10 lg[1 + (1/4)(m - 1/m)^2], m = 4 at kL = pi/2 6.5472 dB (+/-0 dB) 6.5472 dB 0 dB
Bies 5e Eq. (8.111) Expansion-chamber trough TL = 0 at kL = pi (chamber transparent) 0 dB (+/-0 dB) 0 dB 0 dB
Bies 5e Eq. (8.44) / Example 8.1 Quarter-wave tube tuning f = c/(4 l_e), l_e = 1.516 m -> 56.6 Hz 56.6 Hz (+/-0.1 Hz) 56.6 Hz 0.003 Hz
Bies 5e Eq. (8.46) Helmholtz resonance f0 = (c/2pi) sqrt(S/(l_e V)) (S=1e-4, l_e=0.02, V=1e-3) 122.067 Hz (+/-0 Hz) 122.067 Hz 0 Hz
Bies 5e Eq. (8.73) Side-branch TL = 20 lg abs(1 + rho c/(2 Sd Zb)) (QWT branch, closed form) 0.1638 dB (+/-0 dB) 0.1638 dB 0 dB
Bies 5e Eqs. (8.141)/(8.148) (four-pole insertion loss) Insertion loss = transmission loss for the anechoic reference Zs=Zr=rho c/S 6.2498 dB (= TL) 6.2498 dB 0 dB
Bies 5e Eq. (8.275) (Wells' plenum method) Plenum TL = -10 lg[S_out(cos0/pi r^2 + (1-a)/(Sw a))] (S_out=.1,r=1,Sw=20,a=.2) 12.8541 dB (+/-0 dB) 12.8541 dB 0 dB
Bies 5e Table 8.14 (ASHRAE end reflection, flush) Duct end reflection D = 200 mm at 125 Hz = 10 dB (table node) 10 dB (+/-0 dB) 10 dB 0 dB
Long 2e Eq. 13.1 with Table 13.5 (ASHRAE 1987 fan model) Forward-curved fan at Q_REF, P_REF, peak efficiency -> K_F + C_BFI at 500 Hz 38 dB (+/-0 dB) 38 dB 0 dB
Long 2e Eq. 14.12 with Table 14.2 (Reynolds lined rectangular duct) 18 x 12 in duct, 6 ft, 1 in lining at 1 kHz -> 1.77 (10/3)^0.695 6 dB 24.5203 dB (+/-0 dB) 24.5203 dB 0 dB
Long 2e Table 14.4 (ASHRAE 1995 lined flexible duct) 8 in diameter, 9 ft long -> 6/8/16/25/28/28/18 dB (table node) 0 dB (max |diff| over the 7 bands) 0 dB 0 dB
Long 2e Eq. 14.17 (branch power division) 25 per cent split with area-matched branches -> -10 lg 0.25 = 6.02 dB 6.0206 dB (+/-0 dB) 6.0206 dB 0 dB
Long 2e Table 14.9 (worked duct-borne sheet, supply path) Fan to room, 8 octave bands -> 52/42/30/18/9/-2/-2/-1 dB at the receiver 0 dB +/-1 (max |diff| over the 8 bands) 1 dB 1 dB
Long 2e Eqs. 13.27-13.33 (Reynolds diffuser self-noise) 24 x 24 in rectangular diffuser, 312 cfm, 0.05 in pd -> the 33/32/29/23/15 dB row of Table 14.9 0 dB +/-1 (max |diff| over the five bands) 0.8853 dB 0.885 dB
ASHRAE 2019 Applications Ch. 49 Table 9 Max neck velocity of a supply outlet for design RC(30) -> 2.2 m/s 2.2 m/s (+/-0 m/s) 2.2 m/s 0 m/s
Norton & Karczub 2e Eqs. 7.6/7.8/7.9 (problem 7.1 answer) 254 mm duct, steam, 200 m/s: (1,0) cut-on 812 Hz and k_x = -8.23 1/m 0 +/-1 (Hz, and 1/m x100) 0.591 0.591
Norton & Karczub 2e Eq. 7.10 (problem 7.2 answer) 0.65 x 0.4 m duct, 15 m/s: first three cut-on 264 / 428 / 503 Hz 0 Hz (max |diff| over the 3 modes) 0 Hz 0 Hz
Bies 5e Eqs. (7.103), (7.111) (enclosure, fully absorbing limit) Enclosure correction C -> 10 lg 0.3 = -5.23 dB as alpha_i -> 1 -5.2288 dB (+/-0.001 dB) -5.2288 dB 0 dB
Norton & Karczub 2e Eq. (4.101) (problem 4.21 answer) Double brick wall into an 8 x 9 x 3 m room -> NR 37.5/40.8/49.0/62.8/65.3/65.9 dB 0 dB +/-0.05 (max |diff| over the 6 bands) 0.0308 dB 0.031 dB
Norton & Karczub 2e 4.6/4.9 (problem 4.18 answer) Blower in a plant room to the operator room -> 72.3/60.4/41.4/41.0/33.8/30.7 dB 0 dB +/-0.1 (max |diff| over the 6 bands) 0.0682 dB 0.068 dB
Norton & Karczub 2e Eq. (4.115) (problem 4.16 answer) Lined compressor enclosure against NC-45 -> required TL 14.4/25.2/28.9/34.4/35.2/34.7/34.7/31.6 dB 0 dB +/-0.15 (max |diff| over the 8 bands) 0.1099 dB 0.11 dB
Norton & Karczub 2e Table 4.5 (constant-volume source power) Source in the intersection of two flat surfaces (Q = 4) -> +10 lg 4 = 6.02 dB 6.0206 dB (+/-0 dB) 6.0206 dB 0 dB
CNOSSOS-EU railway source (Directive 2002/49/EC Annex II): 100% (8/8)
Standard Quantity Expected (norm) Computed Δ Status
CIRCABC CNOSSOS-EU railway emission test set Line power of the 123 committed cases of the published test set, both source heights, 8 octave bands each, dB re 1 pW/m <= 0.01 dB on 984 published band levels (123 cases) 0.0055 dB 0.005 dB
Appendix G Tables G-1a and G-1b (roughness) Wheel roughness by brake type (3 x 32) and rail roughness by class (2 x 35), dB 166 coefficients identical 0 mismatches 0 mismatches
Directive (EU) 2021/1226 Annex pt (20)(b), Table G-2 Contact filter A3 for 5 wheel load and diameter combinations x 35 wavelengths, dB 175 coefficients identical 0 mismatches 0 mismatches
Appendix G Table G-3 (transfer functions) Track transfer (8 x 24), wheel transfer (4 x 24) and superstructure transfer (24), dB per axle 312 coefficients identical 0 mismatches 0 mismatches
Appendix G Tables G-4 to G-7 Impact roughness (35), traction (5 x 2 x 24), aerodynamic (2 x 24) and bridge (2 x 24), dB 371 coefficients identical 0 mismatches 0 mismatches
Annex II 2.3.2, formula (2.3.15) Horizontal dipole directivity along the track: 10 lg(0,01) at phi = 0 -20 dB (+/-0 dB) -20 dB 0 dB
Annex II 2.3.2, formulae (2.3.13) and (2.3.14) Aerodynamic speed law at v0 = 300 km/h reduces to Table G-6 verbatim 50 lg 2 = 15.051 dB on every band 0 dB 0 dB
Annex II 2.3.2, formula (2.3.12) Impact roughness at the tabulated joint density n_l = 0,01 per m Table G-4 verbatim 0 dB 0 dB

Tests & coverage — 47238 tests, 0 failures (✅ all green)
Python Version Tests Failures Coverage Status
macos-latest-3.13 7873 0 97.0% ✅ Passed
macos-latest-3.14 7873 0 97.0% ✅ Passed
ubuntu-latest-3.13 7873 0 97.0% ✅ Passed
ubuntu-latest-3.14 7873 0 97.0% ✅ Passed
windows-latest-3.13 7873 0 97.0% ✅ Passed
windows-latest-3.14 7873 0 97.0% ✅ Passed

Conformance harness: scripts/conformance_report.py · full CI artifacts

Second review pass, on the prose and the leftovers rather than the mechanics.

The evidence table of "Why phonometry" cites the test file that proves each
normative claim, and five of those files moved in this change, so the page
that exists to be checkable was pointing at paths that are not there. Every
quoted test path now names the file it names today, in both languages and in
the GitHub mirror.

Three sentences did not survive counting. The reference spread metrology over
six sections, not seven. The taxonomy contract keeps its three deliberate
cross-parent sections, so nothing "loses two exceptions": what collapses is
five sections drawing from one package under four names. And section keys are
subpackage names only where the taxonomy allows it, which the same docstring
contradicts nineteen lines above, where the exceptions are listed. The
narrowed metrology docstring omitted the IEC 61043 class check, a quarter of
what the package still owns, and the README credited the Golay and swept-sine
system measurement to signal when it lives in room.

The curated API table only knew about the 3.2 deprecation generation; it now
describes both, including the namespace reads, since the CHANGELOG was the
only place a 3.x user could learn that metrology paths are deprecated too.

The renderer tests stayed in tests/metrology after the renderers were split,
so 21 of the 28 exercised another package's module; they follow the split now,
one file per package. The correlation normalization label, which is a
translation key reached through the result rather than written in the
renderer, gets the test it never had, and dir() on the narrowed namespace gets
one too.

SonarCloud raised ten repeated-literal issues, nine in the files the split
created, because axis labels that were written once per renderer now sit in
three modules: they become module constants, keyed the same way in the
translation table. The tenth is the sample-rate rejection message repeated by
the three entry points of the weighting module.

Also: the design and weighting module docstrings describe what those modules
do rather than what their old names said, the filter-design test file follows
its module, and the namespace shim takes the release it deprecates from
instead of hardcoding it.
@github-actions github-actions Bot added the area: materials Absorption, impedance and material properties label Aug 1, 2026
@bito-code-review

Copy link
Copy Markdown

You've reached the fair usage limit for the Bito Code Review Agent trial. Upgrade to a paid plan or contact support@bito.in for assistance. Learn more

The package holds both halves of the subject: it generates signals (the
IEC 60268-1 tone bursts, the white, pink and brown noise, the resampler) and
it analyses them (levels, spectra, coherence, correlation, cepstrum). The
singular collided with the one module its own readers import next to it:
75 fenced blocks across 24 pages do `from scipy import signal`, and 14 more
bind `signal` as a variable, so `from phonometry import signal` rebinds a
name that is already taken and the snippet fails several lines later with an
error that points nowhere near the import. The plural leaves that surface at
one guide, which is fixed here by renaming its local variable. It also reads
as what the package is: the sidebar has called this material "Signals and
spectra" all along. `signal_analysis` was the alternative and it is wrong by
exclusion, since it would deny the generators.

That collision is worth a gate rather than a habit, because Python does not
warn about it and the reader is the one who pays. scripts/check_doc_snippets.py
runs every Python block the guides print: the blocks of a page are
concatenated in reading order and executed, since a guide is a narrative and
its later blocks use what the earlier ones bound. Two static checks run first
and cost nothing: no name imported from phonometry may be rebound later on the
page, by an assignment or by another import, and the Spanish page must import
the same names as its English twin, so a translation cannot quietly teach a
different API. Whole-token comparison was tried for that second check and is
wrong: it fails on `plot(language="es")`, the one difference the pages are
supposed to have.

Twenty-five pages cannot run as a script and are listed with a reason each.
Most are excerpts of a workflow that starts from a record the prose
introduces. One is a defect the gate found rather than an excerpt: the
multiple-shock guide prints `vibration.RISK_THRESHOLDS_MALE`, and the
constant is real but the vibration namespace does not export it, so the fiche
example cannot run as printed. It is left in the list, named, for the
vibration work to fix. The list is checked for staleness in both directions:
a page that starts running has to leave it.

The gate has its own tests, one per defect it exists for, because a check that
only ever passes proves nothing.
@jmrplens jmrplens changed the title Split the metrology catch-all into filters, signal and metrology Split the metrology catch-all into filters, signals and metrology Aug 1, 2026
The guides render fiches, so the job needs requirements-reports as well as
requirements-figures: without reportlab twenty-three pages fail on an import
the reader would never hit.
Sonar wanted the composite assertion in the snippet-gate test split, and the
one line Codecov reports as uncovered is a guard the public verifier cannot
reach: it is marked as such, with the reason it is kept.
@sonarqubecloud

sonarqubecloud Bot commented Aug 1, 2026

Copy link
Copy Markdown

@jmrplens
jmrplens merged commit 02a1f8a into main Aug 1, 2026
33 checks passed
@jmrplens
jmrplens deleted the split-metrology branch August 1, 2026 22:53
@bito-code-review

Copy link
Copy Markdown

You've reached the fair usage limit for the Bito Code Review Agent trial. Upgrade to a paid plan or contact support@bito.in for assistance. Learn more

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api Public API surface, naming and deprecations area: aircraft Aircraft and rotorcraft noise area: broadcast Programme loudness and broadcast levels area: building Sound insulation and building acoustics area: core Shared internals and cross-cutting code every domain depends on area: electroacoustics Transducers, arrays and electroacoustic devices area: emission Sound power and source emission area: environment Outdoor propagation, environmental sources and noise assessment area: hearing Audiometric thresholds, hearing loss and noise exposure area: materials Absorption, impedance and material properties area: metrology Calibration, uncertainty and measurement quality area: psychoacoustics Loudness, sharpness, roughness and annoyance area: room Room acoustics and reverberation area: underwater Underwater acoustics and propagation area: vibration Human vibration and structure-borne sound ci Workflows, linting and developer tooling conformance Standard clause coverage, reference values or errata documentation Improvements or additions to documentation figures Generated plots, diagrams and animations i18n English and Spanish translations performance Speed and memory of computations reports Accredited-format .report() fiches and their rendering site Documentation website

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants