From a9d5581ad8573b3227f9d8e61cff0aa4707dd28c Mon Sep 17 00:00:00 2001 From: Matiq Date: Fri, 21 Aug 2026 12:55:23 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20NOTES=20=E2=80=94=20IIR3=20bidirectiona?= =?UTF-8?q?l=20decode,=20combine=20thunk=20semantics,=20Step=202=20re-scop?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handoff/NOTES_LEVEL.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/handoff/NOTES_LEVEL.md b/handoff/NOTES_LEVEL.md index b9370df..201cb13 100644 --- a/handoff/NOTES_LEVEL.md +++ b/handoff/NOTES_LEVEL.md @@ -1221,3 +1221,35 @@ chain, not the bridge. comb stays OPEN (structural combine/acc, P4/P5). NEXT: step 3 wire combine_acc track into mask output (currently computed, discarded); step 4 FFT-conv 0x535a70 mask smoothing; then decode BandConfig ctx+0x188 writers to replace MULT placeholder with decomp value. + +## ============ UPDATE 2026-08-21b: IIR3 bidirectional + combine semantics from raw decomp ============ +### IIR3 is BIDIRECTIONAL (corrects NOTES:830 "inline TWICE") +- consumers_out.txt:955-1075: TWO [reset state 0x440510=0, forward pass, backward + pass] pairs. State PERSISTS from forward into backward within a pair; reset + between pairs. Operand order verified: y[i] = x[i]*B3[i] + state*A3[i] + (A3@0x3c0510 multiplies STATE, B3@0x340510 multiplies x). Backward iterates + nbin-2 .. 1 with descending coefficient index. +- Wired into structural chain (commit 1a616e1); LUT_MULT retuned 4.4->4.2; + smoke mean|err| 1.021 (vs 0.993 fwd-only — parity within noise, kept faithful). + +### Combine block EXACT semantics (thunk-level, corrects both 20h and 20j notes) +- 8d60 sub: args (acc=0x5407c8, mask=0x540678, dst=f6f8=0x5406f8), dst=3rd arg: + f6f8[i] = mask[i] - acc[i] (acc NOT overwritten by sub; 20j was wrong) +- mirror f6f8 (11940 x2) +- 3c40 fma: f6f8_upper += kRTAtt*acc_upper ; f6f8_lower += kRTRel*acc_lower + (dst = F6F8 halves, b = acc — 20h had this right) +- 5a20: acc += mask (persistent per-band accumulator) + +### CRITICAL SCOPE FINDING for Step 2 (combine wiring) +- In the ONLINE single-band path (0x5408b8==0) the updated f6f8/acc have NO + consumer inside FUN_180529fe0 before warp/IIR3/dry-wet: warp applies to + band buffer directly, blend overwrites f6f8 next band/frame. Verified by + exhaustive grep of consumers_out.txt (last 0x5406f8 use = offline branch). +- => combine CANNOT close t1k/al single-band tails by itself; its effect must + enter via (a) multiband combiner 0x5316e0 reading acc/f6f8 across bands, or + (b) FFT-conv stage. Step 2 re-scoped: decode 0x5316e0 acc consumption FIRST, + only then wire. Do NOT invent a track->mask feedback (would be empirical). +- Online blend confirmed: f6f8 = freqaxis*(1-mix) + mix*fVar25(0.8) via + 6e40+15060 thunks, then bigkernel exp2 in-place on band (line 805-832). + +### Commits: 9ffe60e (IIR3 fwd-only + retune), 1a616e1 (bidirectional + decode).