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.
This commit is contained in:
2026-08-21 12:45:36 +03:00
parent 7a108c529a
commit 9ffe60e66e
+9 -1
View File
@@ -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);
}