From 9ffe60e66ecc8b674476d6d4346ceba05be578ec Mon Sep 17 00:00:00 2001 From: Matiq Date: Fri, 21 Aug 2026 12:45:36 +0300 Subject: [PATCH] feat(dsp): wire IIR3 x2 (kIIR_A3/B3) post-warp into structural chain Step 9 of NOTES_LEVEL:820-840 mono-path (was missing; roadmap claimed it). Light spatial mask smoothing, upper half re-mirrored. LUT_MULT retuned 3.8 -> 4.4 for the shifted calibration. Smoke (48k/4096): mean|err| 1.093 -> 0.993 (t1kq -1.06, t1k +1.66, al12 -0.26). Module checks PASS, corpus --compare bridge baseline PASS. --- dsp/framed_model.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dsp/framed_model.cpp b/dsp/framed_model.cpp index 477c058..0a95d97 100644 --- a/dsp/framed_model.cpp +++ b/dsp/framed_model.cpp @@ -84,7 +84,7 @@ static void process_band_structural( constexpr float LUT_A = -13.78f; constexpr float LUT_B = 68.29f; constexpr float LUT_GAMMA = 0.344f; - constexpr float LUT_MULT = 3.8f; + constexpr float LUT_MULT = 4.4f; // res^rp term (bridge parity): smooth frequency-dependent floor constexpr double RP0 = 0.0275; @@ -130,6 +130,14 @@ static void process_band_structural( mask_out[k] *= kBand768[idx] * kWarp[idx] * std::pow(res_k, rp); } + // Step 9 (NOTES_LEVEL:830): IIR3 inline TWICE (kIIR_A3/B3), post-warp + // spectral smoothing of the mask; upper half re-mirrored afterwards. + fn529fe0::iir1(mask_out, kIIR_A3, kIIR_B3, nbin, 0.0); + fn529fe0::iir1(mask_out, kIIR_A3, kIIR_B3, nbin, 0.0); + for (size_t k = 0; k < half; k++) { + mask_out[nfft - 1 - k] = mask_out[k]; + } + for (size_t k = 0; k < nfft; k++) { mask_out[k] = mask_out[k] * (fVar30 * 1.0f) + (1.0f - fVar30); }