P4: Phase B — framed_model re-transcribed to the confirmed chain (NOTES:199-226)

Fixes structural divergences: IIR1 into shared 0x5406f8 buffer + bridge to band
mask (FUN_18052d650, 0x5160); IIR2 on band mask; Hermitian mirror (0x11940);
blend step f6f8=axis(1-mix)+mix*0.8, mask=exp2(-mask)*f6f8; real combine via
kRTAtt/kRTRel weights (0x5406c8/6e8); warp, IIR3x2, dry/wet.

Validation: t1kq only1 fc1000 -21.1 vs -22.1 (OK); fc-scan shape intact;
dual @500 matches (s30 -51.5 vs -53.7), @2000 gap -4..-13 vs -29.6 remains.
That gap = dB-domain band LUT (FUN_180563a60) not yet in chain -> Phase A.
This commit is contained in:
2026-08-20 17:16:22 +03:00
parent 8f64539328
commit f8ecf6a1af
3 changed files with 90 additions and 49 deletions
+25
View File
@@ -923,3 +923,28 @@ swept 800..1200, refs t1kq_only1_<fc> = true single-band) tracks the reference s
Remaining under-cut off-center: real soothe reduces ~16-22 dB broadly across
800-1200 while model narrows; candidate = FFT-conv smoothing + warp + q shape.
DEFAULT level_scale for am/res path ~= 35-45 (was 600 for the wrong am*res path).
## ============ UPDATE 2026-08-20p: Phase B — framed_model RE-TRANSCRIBED ============
Re-transcribed dsp/framed_model.cpp per confirmed chain (NOTES:199-226, source
/tmp/consumers_out.txt:638-1111). Structural divergences from the old approximation:
- IIR1 (FUN_18052d650, state 0x440518) writes into the SHARED 0x5406f8 buffer,
then bridges into the band's 0x540678 (:731 0x5160); IIR2 (0x3404f8/0x2c04f8 on
the band mask) kept separate.
- mirror 0x11940: upper half = reversed lower (Hermitian), full-nfft scratch.
- blend step: f6f8 = 0x540698·(1mix) + mix·0.8; mask = exp2(mask)·f6f8. C_AXIS=1.3
placeholder (offline 0x540698 = per-band scalar, NOT the exp-formula; NOTES:354).
- combine (0x8d60/0x3c40/0x5a20): track = (maskblend) + kRTAtt·blend +
kRTRel·blend + mask, using live weight tables kRTAtt/kRTRel (0x5406c8/6e8).
- warp (0x540768·0x5406a8), IIR3 (A3/B3)x2, dry/wet identity.
VALIDATION (scale sweep):
- DUAL (band fc=500, tones 500+2000 at 7.23 dBFS): ref @500 53.7/@2000 29.6.
model @500 matches over scale (s30 51.5, s42 58.1); @2000 stuck ~4..13 (way
short). The DAZING far-field reduction (reduce 2000 by 29.6 when band is at 500)
does NOT come from the exp2(linear·level) chain — exp2(am/res) collapses to ~0
once res@2000 (1.344) ≫ res@500 (0.1175).
- T1KQ only1 fc1000: 21.1 vs ref 22.1 (OK). fc-scan shape intact.
=> Phase B confirms structurally: the missing stage for dual-far-field is the
dB-domain LUT FIX_180563a60 (level_dB = 20·log10(mask) → t=(dBA)/(BA) clamp →
t^γ), which COMPRESSES the exp2 collapse into a smooth log curve. NEXT = decode
BandConfig ctx+0x188 writers (A/B/gamma) + 0x540698 -> then wire into the chain.