You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#471 established that sweep::pre_impulse_snr_db is not a signal-to-noise ratio on a short electrical loopback leg: the pre-peak region is dominated by the deconvolution's own residue, whose level relative to the peak is set by the sweep shape, not by the capture's noise. Measured and reproduced synthetically within 0.5 dB — 100 dB of added noise moves it 0.0 dB, a route attenuated 40 dB reads like a good cable, and the figure ranges ~17 dB (20–20000 Hz) to ~35 dB (500–4000 Hz).
report::ir_stats judges the measurement IR with that same statistic, against a fixed PRE_IMPULSE_SNR_MIN_DB of 18.0 dB (#376). plot ir's default band floors at 17.2 dB in the configuration #471 characterised.
If the same dependence holds in ir_stats' configuration, the IR read-out's verdict is partly a property of the sweep the operator chose rather than of the capture — the defect #471 fixed for the reference leg.
why this is not yet a confirmed defect
The two call sites do not use the same configuration, so #471's numbers do not transfer:
The guard band is (ir_len / 32).max(8), so a different ir_len changes both the region measured and its length. The floor for ir_stats' actual configuration is unmeasured — that is the first thing this issue needs, not an assumption that 17.2 dB carries over.
TAU_SNR_THRESHOLD_DB's own doc comment already records that these are two constants with different evidence and deliberately not one, which is the right starting point: the question is whether 18.0 dB is anchored to a stimulus the same way 24.0 dB was.
If it is: decide whether the same derived-floor rule applies (ac_core::measurement::sweep::pre_impulse_snr_floor_db already exists and takes window_len and peak_index, so the machinery is in place), or whether an acoustic capture's genuine noise makes the fixed constant still meaningful.
Assumed: that the mechanism carries into ir_stats' window and harmonic count. Untested — this issue exists to test it.
related
#471 / PR #473 (the reference-leg fix and the characterisation), #376 (where 18.0 dB came from), #368 (the shared formula, and why the two thresholds are separate constants). Flagged by the architect in #471's design decision as explicitly out of that PR's scope.
problem
#471 established that
sweep::pre_impulse_snr_dbis not a signal-to-noise ratio on a short electrical loopback leg: the pre-peak region is dominated by the deconvolution's own residue, whose level relative to the peak is set by the sweep shape, not by the capture's noise. Measured and reproduced synthetically within 0.5 dB — 100 dB of added noise moves it 0.0 dB, a route attenuated 40 dB reads like a good cable, and the figure ranges ~17 dB (20–20000 Hz) to ~35 dB (500–4000 Hz).report::ir_statsjudges the measurement IR with that same statistic, against a fixedPRE_IMPULSE_SNR_MIN_DBof 18.0 dB (#376).plot ir's default band floors at 17.2 dB in the configuration #471 characterised.If the same dependence holds in
ir_stats' configuration, the IR read-out's verdict is partly a property of the sweep the operator chose rather than of the capture — the defect #471 fixed for the reference leg.why this is not yet a confirmed defect
The two call sites do not use the same configuration, so #471's numbers do not transfer:
ir_stats2 × ceil(0.05 × sr)(9600 at 96 kHz)window_len(default 4096)n_harmonics(default 5)The guard band is
(ir_len / 32).max(8), so a differentir_lenchanges both the region measured and its length. The floor forir_stats' actual configuration is unmeasured — that is the first thing this issue needs, not an assumption that 17.2 dB carries over.TAU_SNR_THRESHOLD_DB's own doc comment already records that these are two constants with different evidence and deliberately not one, which is the right starting point: the question is whether 18.0 dB is anchored to a stimulus the same way 24.0 dB was.what would settle it
pre_impulse_snr_dboverir_stats' configuration — sweep shapes ×window_len×n_harmonics— noiseless and with noise, the way plot_ir's same-capture reference fails calibrate's 24 dB gate at default sweep parameters #471 did. If noiseless ≈ noisy, the statistic is stimulus-bound there too.ac_core::measurement::sweep::pre_impulse_snr_floor_dbalready exists and takeswindow_lenandpeak_index, so the machinery is in place), or whether an acoustic capture's genuine noise makes the fixed constant still meaningful.IrVerdict::Failed), so it needs a UX pass — unlike plot_ir's same-capture reference fails calibrate's 24 dB gate at default sweep parameters #471, which only moved a refusal threshold inside an unchanged message.provenance
ir_stats' window and harmonic count. Untested — this issue exists to test it.related
#471 / PR #473 (the reference-leg fix and the characterisation), #376 (where 18.0 dB came from), #368 (the shared formula, and why the two thresholds are separate constants). Flagged by the architect in #471's design decision as explicitly out of that PR's scope.