Matiq
25b736b2bb
23i: hardware watchpoint infrastructure working (u_debugreg base 0x350, LEN8 rejected -> use LEN4, DR6 reset documented); zero hits on kernel word — consumer may read a copy or builds early; fnwatch.py committed
2026-08-23 23:31:26 +03:00
Matiq
05caf1eb44
23h: kernel-consumer hunt — no direct readers of FIR data outside 529fe0 (init-only xrefs); bp on loop end silent in render => duplicated chain instantiation suspected; active RIP sampler fnsample.py working (2.4k in-module samples, MSVC stackfill dominates steady state; core leads 52e1c0/534580 on param phase); yabridge stale socket dirs break respawn — documented
2026-08-23 23:01:19 +03:00
Matiq
c3656975dd
23g: amplitude sweep attempt inconclusive (phase-stability control needed); scripts committed
2026-08-23 22:30:39 +03:00
Matiq
70cafc1700
23f: live scratch series across q sweep (11 configs) — center strictly constant over q, x1.805 hits real cuts within 0.14dB at both known points, scr171(res) nonlinear consistent with 22x exponent; detector smoothing located between raw bands[] write and DESIGN (raw blinks 0.3..382 while scratch steady)
2026-08-23 22:27:13 +03:00
Matiq
7902acfbb8
23e: law closed quantitatively — FIR=exp(0.984*scratch) pointwise; real/FIR cut ratio constant 1.80 across configs and bins (linear post-scale, EMPIRICAL until conv-stage decoded); center independence of q proven live (scratch43 -0.6565 vs -0.6551); skirt shift matches within 3% (1.46 vs 1.50 dB)
2026-08-23 22:19:05 +03:00
Matiq
3a0a38467b
23d: BREAKTHROUGH — live kernel captured via SIGSTOP sampling of offline render (rendersnap.py); bands[] input to DESIGN is the raw per-frame signal spectrum (Hann lobes at tone bins only!), captured FIR shows skirt cut deeper than center exactly as real output (0.473@2000 vs 0.524@500) despite R-curve claiming otherwise; am/res structure confirmed with twin template as divider; recipe for exact ops formula next round
2026-08-23 22:11:33 +03:00
Matiq
0a45661a25
23c: negative feasibility — symmetric log-domain convolution cannot reproduce dual skirt geometry (best 0.94dB err at absurd 324-bin width); narrows mechanism to non-symmetric ops / true bands[] input / temporal coupling; capture recipe for DESIGN-input dump documented
2026-08-23 21:09:14 +03:00
Matiq
b8d5f83fc5
23b: mask->FIR chain decoded — DESIGN body is vectorized LOG2 of band curve (poly fingerprinted), WIN_freq identified as periodic Hann(4096) falling half applied to FIR[n/2..n), full ILT stub->impl table resolved offline (ilt_resolve.py), live buffer catalog extended (SIMD lane masks at 0x540598, complex identity reset between callbacks, overlap buffer at 0x5406f8 non-zero), plugin output proven nondeterministic across renders (LCG dither) — spectral metrics only; ptrace lab scripts + lessons (TRACECLONE before CONT, sub-second host lifecycle under -renderproject)
2026-08-23 20:59:54 +03:00
Matiq
07cd4b7dc0
23a: docs sync to post-22z state — AGENTS header/open-gaps/key-files and BITEXACT_PLAN entry-point updated: priority #1 = bands[] input semantics (static decode of conv body or in-callback trace), canon stays LAWAFFINE 7.4/1.85 TOTAL 1.931, refuted branches documented
2026-08-23 19:00:44 +03:00
Matiq
738ffccad4
22z: mask->FIR call sequence decoded (535a70 thunk chain -> 1802a24c0 body; WIN_freq second-half segment multiply; FIR[0]=1,FIR[1]=0); IDFT-window-DFT spreading hypothesis NUMERICALLY REFUTED (max 2.6dB at skirt vs needed 11.8) -> dual skirt mechanics live in detector/template domain, not post-processing
2026-08-23 18:55:36 +03:00
Matiq
91101b2135
22y: live ctx capture pipeline works (scripts/dualtrace.py, realtime playback + chunked heap snapshot); found config-dependent reduction curves 0x540768/788/7f8 (peak follows band fc; 7f8 min exactly 1.0 => R=1/mask, notch-shaped); acc/f6f8 arrays ZERO in steady state; DECISIVE: applied filter != pointwise R (dual skirt 3dB vs real 11.8) -> FFT-conv wide-window spreading is the missing mechanism
2026-08-23 18:40:25 +03:00
Matiq
64beaa7131
22x: NO-alpha theorem — no res-exponent makes detector level consistent across families (dual needs alpha<0, fc-scans break at alpha<=0); dual-vs-q table: cut@center CONSTANT across q, skirt cut falls ~exp(-res/0.49) converging at res>=2 -> notch geometry lives in the fine-grid twin template (536300), not per-bin arithmetic; pointwise (am,res^alpha)+single-law class REFUTED
2026-08-23 18:04:47 +03:00
Matiq
13c2d028bf
22w: faithful mask-shaping chain v1 behind RT_FAITHFUL (fnfaith.cpp) — exact 180533340 freq-warped bidir-IIR coefficients (fc_bin=85@48k/4096, constants from dump); corpus TOTAL 5.315 but comb 2.57 best-ever; decisive: mask shape cannot balance dual tones -> level contrast is created by the DETECTOR (time-domain twin bank hypothesis priority #1 )
2026-08-23 17:04:23 +03:00
Matiq
34156315e6
22v: full block map of FUN_180529fe0 from raw asm — 4 bidir-IIR states, per-band acc array [0x5407c8+i*16] confirmed (21b semantics), ILT thunk table resolved; coefficient generator decoded (530b60 + 533340): frequency-warped one-pole g=fc/i below crossover — the real mask smearing mechanism; full disasm f529fe0_full.dis (old was truncated at 52a813)
2026-08-23 16:47:51 +03:00
Matiq
79c11dc220
22u: raw-asm re-decode of FUN_180529fe0 — multiband pre-combine inside method, per-band scale->kernel->2x bidir-double-IIR (52d650 fully decoded, per-bin double coefs), band-state arrays 0x540768[i]/0x5407a8[i]; 0x5407c8 acc has NO runtime reader (21b addr wrong); offline bidir-IIR smoothing hypothesis REFUTED (monotonic degradation)
2026-08-23 15:53:58 +03:00
Matiq
376bd955c9
22t: two-factor laws REFUTED by descent (quad Q->0, resrp rp->0 — geometry already in lvl=am/res); real render of sim-optimum 7.6/1.694 = 1.898 with group regressions, canon stays; error budget: dual = 62% of corpus abs-error -> inter-band acc/f6f8 consumer is priority #1
2026-08-23 15:10:06 +03:00
Matiq
3857205a6b
22s: offline law-fit infra (full replay sim, 2s/corpus) — NO single affine (A,S) exists even on pure tones; family slopes 0.85-2.19, global LSQ resid 0.60 dB structured by rms/fc-dist; scalar law saturated ~1.87-1.93, canon stays HEAD
2026-08-23 14:36:27 +03:00
Matiq
3b9158e63e
22r: affine dB law (RT_LAWAFFINE) ported onto bare chain — TOTAL 1.931 beats canon 2.286; A=7.4/S=1.85 best, tradeoffs mapped
2026-08-23 11:01:42 +03:00
Matiq
d160acaa27
22q: dual diagnosis — twin-divisor contrast refuted (real cuts both tones equally), saturating dB-curve hypothesis; pair-collection plan
2026-08-23 10:39:24 +03:00
Matiq
0aeedde019
22p: joint-fit grid — floor essential (without: corpus x2), optimum scale=0.90 TOTAL 5.215, comb beats canon first time; canon stays HEAD
2026-08-23 09:48:17 +03:00
Matiq
d4e8d055c6
22o: RT_ENV=live (live-table envelope) — noise TF better, corpus neutral; new-arch best 5.386 vs canon 2.286; joint fit next
2026-08-23 03:52:12 +03:00
Matiq
0861a64387
22n: live ctx found (0x2370048, scalars config-dependent!), slow detector adaptation discovered (gain deepens over ~seconds, kRTrel tau~2s)
2026-08-22 22:33:16 +03:00
Matiq
709d8ce227
22m: user hypotheses tested — gamma!=delta (E1), BandConfig stable under depth/delta (E3), no level-path refs in SpectralProcessor methods (E4)
2026-08-22 21:56:46 +03:00
Matiq
98a35e8648
22l: pool5+scale1.144+floor hits tone floor -20.74 (real -20.72); corpus 5.9 — params need systematic fit; canon untouched
2026-08-22 21:33:31 +03:00
Matiq
355ce828f4
22k: bare exp2 chain CONFIRMED on white-noise probe; remaining tone gap = detector level scale x1.14
2026-08-22 20:58:18 +03:00
Matiq
dee3864c3c
22j: white-noise probe — real TF is flat (warp not output multiplier), reduction is contrast-driven; adaptive-twin lead
2026-08-22 20:22:23 +03:00
Matiq
bf8c12603c
readme: sync to 22i — P5 status, floor blend*ln10/20, Step 7 refuted, detector front-end priority, new tooling
2026-08-22 20:02:11 +03:00
Matiq
d43bbfe66b
22i: RT_LVL_CAP inert (model post-IIR levels ~1.06 << cap) — gap relocated to detector front-end amplitude chain
2026-08-22 19:51:56 +03:00
Matiq
94383b15d3
22h: floor law mapped — floor_dB(sens)=20log10(ln10/20)-(sens-6)/3, depth shifts too; exact anchor sens6=ln10/20
2026-08-22 19:46:22 +03:00
Matiq
ef7d3f49c7
22g: NO-LUT test isolates gap to detector front-end; unified sidechain-clamp hypothesis (knee at 0dBFS, identical renders above)
2026-08-22 19:39:22 +03:00
Matiq
41b0d3c250
22f: floor discrimination via param bridge — dry/wet crossfade confirmed, floors=k*ln10/20, detector-cap hypothesis leads
2026-08-22 19:10:50 +03:00
Matiq
7febe744e9
plan: sync to 22e — Step 7 refuted, floor blend*ln10/20 solved, new priority Step 9 (floor mechanism)
2026-08-22 18:59:04 +03:00
Matiq
3970c1e309
22e: floor algebra solved — gain_floor=20log10(blend*ln10/20), matches -20.72dB within 0.006dB; lead FUN_180529c60
2026-08-22 18:54:48 +03:00
Matiq
9c14a74318
docs: 22d — hard gain floor -20.72dB mapped (t-clamp live confirmation); cold/hot discrepancy open
2026-08-22 18:40:13 +03:00
Matiq
f5ef81667c
bench: official param bridge (setparam/dump_params.lua) + rpp_setparam format tool; 22c — XML params decorative, depth=+-18dB, trim=+-24dB, reduction curves measured
2026-08-22 18:28:54 +03:00
Matiq
7fac8b2a4f
step7: live BandConfig capture infra + FUN_180563a60 decode — GUI-only, audio path refutes premise (22b)
2026-08-22 15:28:01 +03:00
Matiq
c222e054ca
docs: Phase B recovery — 4 offline detector hypotheses refuted; scripts into scripts/
2026-08-22 12:55:02 +03:00
Matiq
71644ff3e6
fix(render48k): chunk-scan WAV loader — hdr[40] is not data size when bext/junk present
2026-08-22 10:59:26 +03:00
Matiq
3e5085e06d
phase A: reduction law found (affine in dB), canon unchanged; keep RT_DUMP tooling
...
- Effective reduction is affine in dB(lvl): x_exp2 = -0.6646 - 0.05877*dB
(mask ~ 0.8*lvl^-0.354, gamma ~= decomp 0.344); tones +-0.13 dB over 42 dB
- Pre-IIR calibrated variant (X0=1.8/S=0.11): TOTAL 2.633 vs HEAD 2.286;
wins t1kq/t1k/al/comb, loses res/dual -> gate fails, canon stays LUT
- Grid search (X0,S,floor,CMAX) on validated trajectory model: no scalar
law of the family fits tone+noise simultaneously (res tension)
- Refuted: high-bin/IIR3-backward propagation, direct-affine bypass,
positive floors, ceilings
- Kept opt-in instrumentation RT_DUMP_BIN / RT_DUMP_ALL for Step 7 capture
- Docs: NOTES_LEVEL 21d, BITEXACT_PLAN s.0 note, roadmap, AGENTS
2026-08-21 19:29:21 +03:00
Matiq
702b74e297
docs: sync BITEXACT_PLAN/roadmap/AGENTS to 2026-08-21 state
...
BITEXACT_PLAN: structural column in S0 table; Step 2 re-scoped (combine
thunk semantics, acc has no single-band consumer; FUN_1805316e0 is a
coefficient writer NOT a mask combiner — fixed in Steps 2/8); Step 4
FFT-conv downgraded to P3 (window near-flat); Step 6 pipeline done
(render48k); entry point = saturation hunt then Step 7 capture.
roadmap: status 2026-08-21, P4 row + ~80% estimate with dual-canon results.
AGENTS: two-canon model description, render48k/corpus_structural commands,
stale-binary sweep hazard warning, updated gaps list.
2026-08-21 13:54:06 +03:00
Matiq
b2cb9235be
feat(scripts): structural-path full-corpus harness + first honest 62-case numbers
...
corpus_structural.py drives render48k (48k/4096 structural chain) across the
full corpus with bridge-compare mode. Results: comb 6.12 vs bridge 10.15
(structural wins multiband already), res better, single-band worse; dual@500
constant -6.7dB q-independent over-cut exposes missing reduction saturation.
Param sweep (gamma x MULT, verified builds) confirms current optimum; curve
SHAPE is the gap -> Step 7 capture or bigkernel input re-examination.
2026-08-21 13:12:53 +03:00
Matiq
a9d5581ad8
docs: NOTES — IIR3 bidirectional decode, combine thunk semantics, Step 2 re-scope
2026-08-21 12:55:23 +03:00
Matiq
1a616e1b7b
feat(dsp): IIR3 bidirectional per decomp (fwd+bwd x2), combine semantics decoded
...
Decomp (consumers_out.txt:955-1075): IIR3 = TWO [reset,forward,backward]
pairs, state persists fwd->bwd; y = B3*x + A3*state. Replaces 2x forward.
Combine block decoded from thunks: f6f8 = mask - acc (8d60, dst=3rd arg);
f6f8 += kRTAtt/kRTRel * acc (halves); acc += mask (5a20). KEY FINDING:
in online single-band path acc/f6f8 have NO consumer before warp/dry-wet
- combine affects output only via multiband/FFT-conv stages (Step 2 scope
narrowed). LUT_MULT retuned 4.4 -> 4.2. Smoke mean|err| 0.993 -> 1.021
(faithful transcription kept over tuned fwd-only). Checks PASS, guard PASS.
2026-08-21 12:54:46 +03:00
Matiq
9ffe60e66e
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.
2026-08-21 12:45:36 +03:00
Matiq
7a108c529a
docs: NOTES_LEVEL update — LUT level-domain discovery, sweep tooling hazard
2026-08-21 12:36:35 +03:00
Matiq
535b150f75
feat(dsp): move dB-LUT to level domain (pre-IIR/exp2) in structural chain
...
Mask-domain LUT clamps t<0 on loud input (t1k mask_dB < A=-13.78) causing
-24dB over-cut. Level-domain keeps quiet/loud inside [A,B] domain:
t1k err -24.04 -> +2.45 dB (3-case smoke: mean|err| 8.2 -> 1.09).
Params: gamma=0.344 (decomp-extracted), mult=3.8 (placeholder, empirical).
Module checks pass; corpus (bridge path) unchanged at 1.594.
2026-08-21 12:35:57 +03:00
Matiq
9b7e9d3099
feat(dsp): add dB-domain LUT (FUN_180563a60) to structural chain on 48k grid
...
- Add BandConfig A/B/gamma LUT compression (extracted from refs: A=-13.78dB, B=68.29dB, gamma=0.344)
- Add res^rp smoothing term for bridge-parity (RP0=0.0275, DRP=0.2159)
- Calibrate scale_factor to match bridge gain at tone bin (15.0 * 440.95 / 2048 = 3.23)
- Structural 48k: -26.81 dB vs ref -27.23 dB (err +0.426 dB)
- Bridge baseline: intact (0.000 dB degradation)
- All module checks PASS (fn529fe0, exp2, twin, tables, leveltrack, levelpath, fftconv)
2026-08-21 09:25:17 +03:00
Matiq
6924e539e0
feat(dsp): render48k pipeline + structural chain on 48000/4096 grid
...
- render48k: resample 44100→48000, process via SpectralProcessor(4096,1024,48000),
resample 44100, write 24-bit stereo WAV
- FramedDetector: structural chain (fn529fe0 sequence) runs on 48000/4096 grid,
bridge path unchanged for 44100/2048
- Structural chain: scale→IIR1→copy→IIR2→mirror→blend→exp2→combine→warp→dry/wet
using live tables (kIIR_A1/B1, kIIR_A2/B2, kBand768, kWarp, kRTAtt/kRTRel)
- Bridge baseline intact (0.000 dB degradation)
- 48k tone test: -20.73 dB vs ref -27.23 dB (6.5 dB error, scale factor not yet
calibrated to match bridge domain)
2026-08-21 04:46:51 +03:00
Matiq
7659eb0362
feat(dsp): SpectralProcessor sample_rate param
2026-08-21 01:32:50 +03:00
Matiq
7bf5a4a80c
feat(dsp): structural FUN_180529fe0 chain components + fn529fe0_check (step 1, module 1)
2026-08-21 01:09:36 +03:00
Matiq
fa71240d92
test: add validation harness (scripts/corpus.py + bridge baseline) to prevent Phase B regression
2026-08-21 01:06:05 +03:00
Matiq
f17ee78061
docs: BITEXACT_PLAN — 8-step path to byte-parity; fix repo docs to reflect not-yet-bit-exact status
2026-08-21 01:00:41 +03:00
Matiq
e990c21e94
fix: framed_test parse every comma band (was first-arg only); comb tests were single-band
2026-08-21 00:52:44 +03:00
Matiq
b333f6828f
docs: NOTES — verified comb params (neg sens, multi-mode); comb needs combine/acc, not params
2026-08-21 00:42:32 +03:00
Matiq
8e4e40b25a
docs: NOTES — Pchip LUT fix + comb diagnosis (level-dependent, not multiband)
2026-08-21 00:34:18 +03:00
Matiq
e5e9700333
fix: restore pchip LUT in framed_model (revert 12094f8 regression)
...
12094f8 replaced the empirical Pchip LUT with the parametric
linear form (CAP_A_LEVEL=-24/B=28/gamma=1). With gamma=1 the
parametric form reduces to identity on xv=log10(am/res), which
breaks the whole mask chain (t1kq fc-scan err jumps to ~7.9 dB).
Re-instating lut_pchip restores the honest baseline:
t1kq mean|err| 0.226 dB (was 7.9). Confirms NOTES_LEVEL F1
closure: no parametric LUT set beats Pchip at fixed bridge
params; the structural A/B/gamma (level-path ctx+0x188) is the
only real path to bytes, not this parametric substitution.
2026-08-21 00:32:39 +03:00
Matiq
12094f8119
Replace empirical Pchip LUT with parametric form from live DSP capture
2026-08-20 23:08:04 +03:00
Matiq
16853d7e0b
Integrate live-captured A/B/gamma params into framed_model; add CAP_ constants and parametric LUT helper
2026-08-20 22:59:21 +03:00
Matiq
2d69b85aa3
P5: NOTES — F5c DSP-FFT 0x140a70 status (P3 confirmed unwired; all check targets PASS)
...
Full dsp/ check sweep green. fft.cpp = numerical radix-2 (std::cos) not bit-exact
0x140a70; split-radix butterfly + plan-gen giant + sin-table loader remain (multi-week
P3). Required only for FFT-conv byte-parity, not for the bridge renderer.
2026-08-20 21:09:28 +03:00
Matiq
d802ee7aed
P5: F5b — exp2 0x26b820 assets extracted bit-exact + numeric fallback exp2_dsp
...
Extracted the 8x16 irrational tables + lead-in -708.4xx series from soothe_mem.bin
into exp2_tables.{hpp,cpp} (P3 bit-exact inputs). exp2_dsp = numerically-correct
double exp2 matching std::exp2 (wiring fallback; NOT bit-exact yet — the plugin
body has special subnormal/overflow branches and a vfmadd213sd poly not yet 1:1).
exp2_check: 2e6-grid PASS (0 cells >1e-13).
2026-08-20 21:07:30 +03:00
Matiq
4e9c1b1ed7
P4: F4 geometry test — internal 48000/4096 does NOT close residual (0.68 vs 1.00); all structural adaptations rejected
...
Tested internal-geometry (48000/4096 + resample) — worse. Combined with earlier
negative results (parametric LUT x6, FFT-conv window, combine acc), every structural
adaptation is rejected. Bridge (Pchip 0.774) = empirical ceiling. Bytes require live
A/B/gamma capture or bit-exact exp2/FFT kernels.
2026-08-20 20:54:05 +03:00
Matiq
fa1ef205df
P4: F2 structural wiring tests — combine+FFT-conv naive wiring both regress (doc only)
...
Wiring FFT-conv step5 (mask*=win) gives mean 5.2, combine/acc (att/rel from kRTAtt/
kRTRel) gives 4.7 vs base 0.75-0.80 on representative subset. Both belong to the
exp2(mask) structural chain (blend 0.8 + bigkernel) NOT the fitted bridge final-gain.
No code change; bridge + Pchip stays canonical (0.773).
2026-08-20 20:52:00 +03:00
Matiq
1cfe013939
P4: bench all existing parametric LUT sets on full honest corpus — Pchip remains best (0.773)
...
All previously-derived parametric LUT forms (u563a60 A=-13.78/68.29/0.344, lut5/
lut4 gamma-LUT, power-law, linear 0.483/0.717, real extracted points) tested on the
full 59-case honest 24-bit metric within one fixed bridge pipeline. None beat the
committed Pchip (0.773; worst powerlaw 6.8). F1 closed: parametric curve production
was already done, none accepted; structural A/B/gamma from ctx+0x188 remains the only
path to bytes (blocked on level-path object live capture).
2026-08-20 20:44:20 +03:00
Matiq
cea562b511
P4: F0 GATE PASSED — output is byte-deterministic; re-renders reproduce committed refs exactly
...
Two test RPPs (res_only1_500 4s, t1kq_only1_1000 6s) rendered twice each via
reaper -nosplash CLI. Data chunks identical across runs AND byte-identical to the
committed reference wavs. Whole-file differs only in the bext render-timestamp.
=> bit-exact (bytes) is REACHABLE; the per-run-dithrandization blocker is closed.
Next: exact structural chain + kernels + internal 48000/4096 geometry + live A/B/gamma.
2026-08-20 20:03:58 +03:00
Matiq
4014133d57
P4: NOTES — twin res verified vs Python canon (match <1.5%); res_only1 residual is LUT-level, not res-shape
2026-08-20 19:35:52 +03:00
Matiq
067d483f15
P4: NOTES — fit exploration results (mask-level fits do not transfer to full render)
...
- sqrt-Hann analysis regressed (0.788/2.91) vs committed Hann-Hann (0.774/2.12).
- Full-corpus G/W/A/rp mask-level fit (0.66) regressed in OLA render (0.812/2.37);
the render metric is the only honest one.
- Residuals level-dependent (t1k_b1f loud +0.8..2.9, al low -1.1..-1.8); solution =
structural A/B/gamma band LUT, combine/acc 0x5407c8 + FFT-conv 0x535a70 (todo #3 ).
2026-08-20 19:34:01 +03:00
Matiq
cc52461903
P4: AGENTS.md — honest baseline state (log-domain LUT bridge, correct 24-bit metric)
...
Replaces stale exp2(am/res) chain description + wrong metrics with the actual
honest state: C=G*LUT(log10(am/res))+W*warp^A, gain=(1-C)*res^rp; dual<=0.72,
fc-scan<=0.59, corpus mean 0.77. Documents the 24-bit metric trap, negative
broadband test, and the remaining structural gaps (combine + FFT-conv, A/B/gamma).
2026-08-20 18:31:22 +03:00
Matiq
9a26532c60
P4: NOTES — broadband hypothesis tested NEGATIVE (per-bin reduction confirmed) + LUT re-cut rejected
...
Windowed-FFT of dual ref: gain@500=0.309, gain@2000=0.292 but gain@1000 (empty bin)=0.995
=> reduction is per-bin (am_k/res_k), NOT broadband — validates model structure.
16-knot monotone LUT (floor .35/cap .70) regressed corpus mean 0.77->1.09; reverted.
t1k_b1f/al residuals rooted in am-normalization / input-level differences, not LUT shape.
2026-08-20 18:30:30 +03:00
Matiq
94a6749c9a
P4: NOTES — full honest corpus assessment (dual/al/res/t1k/t1kq baseline mean 0.77, max 2.12)
...
Systematics isolated: Pchip LUT frozen cap under-predicts loud tail (t1k_b1f needs
LUT 0.70 at xv 0.85), over-predicts low tail (al lv24 needs 0.35 at xv -0.5).
Real LUT extracted from refs; parametric fit A=-13.78/B=68.29/g=0.344 regresses dual
(rejects in full render). Structural next: decode BandConfig ctx+0x188 writers.
2026-08-20 18:25:02 +03:00
Matiq
da63adc82c
P4: METRIC FIX + log-domain LUT chain ported — honest baseline err <0.7 dB
...
Crucial: earlier dual ref -53.7 dB was a 24-bit-misdecoded artifact; honest ref is
-10.2 dB flat. Root cause of the "dual paradox" was a metric bug + missing log-domain
LUT. Ported the documented bridge (NOTES:147) into framed_model.cpp:
xv=log10(am/res); C=G*LUT(xv)+W*warp^A; gain=(1-C)*res^rp.
Results (honest 24-bit metric): dual (fc=500 q-sweep) err <=0.7, t1kq fc-scan
err <=0.59. All empiric numbers explicitly marked. Structural A/B/gamma + combine/
FFT-conv still pending.
2026-08-20 17:37:31 +03:00
Matiq
f8ecf6a1af
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.
2026-08-20 17:16:22 +03:00
Matiq
8f64539328
P4: CRITICAL fix — level = am/res (not am*res); fc-resonance shape now correct
...
res=|2B/A| is minimal at band centre (not maximal). Model uses xv=log10(A_k/res_k)
=> level = am / res. Old am*res inverted the fc-response (cut more off-center).
Fixed; fc-scan (tone1kq, band fc 800..1200 via t1kq_only1_<fc>) now tracks the
reference: scale=42 mean|err| 2.46 dB, intact shape (deepest at fc==tone). Was
flat+inverted before. Remaining under-cut off-center -> FFT-conv smoothing/gaps.
2026-08-20 16:25:00 +03:00
Matiq
ddf2ac2050
P4: lock PRNG prologue + correct constants (DAT_*=1); scale via prng_fvar30
...
CRITICAL fix: soothe_mem.bin is VA-linear (offset=RVA). DAT_18262b5c8/b704/b700
are INT 1 (cvtdq2ps -> 1.0), NOT the 0.4552/0.6089/0.6070 read earlier via a bad
section offset. Transcribed FUN_180529fe0 PRNG prologue into prng_fvar30():
fVar30=(int)(LUT[s+1]*LUT[s]+0.001). At live state 112 this is deterministically
1.0 over 300 frames, so scale level *= (1/2048)*440.95 is not randomized in
practice. Scale coefficient now computed structurally; t1kq unchanged -0.43 dB.
2026-08-20 16:14:50 +03:00
Matiq
f1f06765f7
docs: README intro -> bit-exact goal, point to AGENTS.md
2026-08-20 15:51:10 +03:00
Matiq
bdf9f21a60
docs: AGENTS.md + refresh README/roadmap/summary/SESSION_HANDOFF to P4 canon; rm empty logs
...
- AGENTS.md: canonical build/test commands, honest trimmed tone metric, current
bit-exact state (mask-apply chain), open gaps (PRNG/FFT-conv/exp2/SR-mismatch).
- README.md: status moved to P4 (C++ FramedDetector canon, framed_test), historical
B.1..B.15 numerical model demoted to <details>; structure/doc table updated.
- roadmap.md: P4 phase marked progress, P4.1/P4.2/P4.3 milestones, top status refresh.
- summary.md: marked historical (behavioral v4).
- SESSION_HANDOFF.md: fixed stale "NOT DECODED" (now decoded), copy note done.
- Removed empty tmp_spec.txt/giant3.txt and untracked .log/__pycache__ clutter.
2026-08-20 15:50:07 +03:00
Matiq
77b639ee82
chore: fix .gitignore to track decompiled .dis/.bin disassemblies
...
.gitignore used '*' as ignore-all with only extension whitelists, so the 128
handoff/nls_dasm/*.dis + 6 *.bin disassembly outputs (f_563a60, f_56e3e0,
f530850_full, f_52b570, fft, twin, ...) were NOT tracked - data-loss risk.
Now un-ignore handoff/nls_dasm/*.{dis,bin} explicitly. Heavy .bin dumps
(soothe_mem.bin etc.), logs, wav/rpp, dl/lib/bin/ghidra-proj stay ignored.
2026-08-20 15:42:42 +03:00
Matiq
2e0b107b4c
P4: document PRNG prologue + remaining bit-exact gaps
2026-08-20 15:32:47 +03:00
Matiq
87dbf88e6d
P4: add dual warp step (mask *= band768; *= warp) - comb 500/3000 fixed
2026-08-20 15:30:30 +03:00
Matiq
0d262461ea
P4: lock bigkernel semantics (exp2(-mask)*blend) + calibrate scale
...
Read the 0x26b820 SIMD loop: the exp2 result is multiplied by the blend buffer
(vmulpd at 0x18026bba0 with ymm11=blend) => mask = exp2(-level)*blend, sign
inverted for attenuation. framed_model.cpp corrected to exp2(-scratch)*0.8.
Calibrated level_scale=600 -> t1kq err -0.06 dB (ref -14.98). comb per-tone
errors reduced (max ~7.8 dB); warp/FFT-conv smoothing still approximated.
2026-08-20 15:25:49 +03:00
Matiq
d4a0a68584
P4: transcribe exact FUN_180529fe0 mask chain (structural, not yet calibrated)
...
framed_model.cpp now follows the decoded mono-path structure:
level -> scale(0x540870*0x54088c/0x1a0) -> IIR1 leaky(A1/B1) -> IIR2(A2/B2)
-> exp2(0.5*(mask-blend)) -> combine/acc -> warp -> IIR3(A3/B3)x2 -> dry/wet
IIR stages are the real live tables (iir_leaky y=A*acc+B*x, B=1-A). Removed the
empirical mask_lut=(1/(1+K*acc))^n. Not numerically calibrated yet: exp2 bigkernel
exact semantics + PRNG prologue (fVar30) + FFT-conv still TBD; t1kq depth -2.9 vs
-14.98 dB ref.
2026-08-20 15:10:29 +03:00
Matiq
f23bbfa1f6
P4: decode FUN_180529fe0 mono-path exactly + extract live mask tables
...
Full decomp of the per-band mask-apply loop (scale -> IIR1/2/3 leaky ->
blend -> exp2 bigkernel -> combine/accumulate -> dual warp -> dry/wet -> FFT-conv).
Extracted runtime tables to rt_mask_tables.{hpp,cpp}: IIR A1/B1,A2/B2,A3/B3
(leaky y=A*acc+B*x, B=1-A), warp 0x5406a8, per-band 0x540768, PRNG LUT 0x5408b0.
bigkernel 0x26b820 = vectorized exp2 (log2e/floor/mantissa tables). Fixed the
broken warp line in framed_model.cpp (compiles again).
2026-08-20 15:00:53 +03:00
Matiq
fc48a9fee4
P4: real mask chain in FramedDetector (level-tracker + accumulator + live-calibrated LUT), t1kq err 0.5dB
...
Replace empirical PCHIP detector with live-calibrated mask chain from FUN_180529fe0:
level = am*res*scale; track += w*(level-track) (per-bin attack/release weights
extracted from RT snapshot, rt_weights.hpp); acc = (level-track)+level; mask =
(1/(1+K*acc))^n (K=9.8026 n=0.25966 fitted to live mask band0). min-combine.
Results (N=2048 hop=512): t1kq single-band err +0.51 dB (-14.47 vs -14.98 dB ref);
comb 4-band per-tone -3.4..+5.8 dB (old PCHIP over-cut comb ~6 dB). Adds framed_test
harness for C++ FramedDetector eval on tone1kq/comb.
2026-08-20 13:11:27 +03:00
Matiq
5c939583f5
P4: multi-band FramedDetector (per-band twin res, sens-scaled GAIN, min-combine); tt_base 61.40%; min-combine wrong (soothe2 uses additive accumulator 0x5407c8)
2026-08-20 10:41:24 +03:00
Matiq
0cdc57972c
P4: port framed_render.py model to C++ (FramedDetector: twin-res -> level -> Pchip LUT -> warp -> res^rp gain), replace empirical Detector; tt_base 49.93%->61.45% (single-band); multi-band refs still 100% (model is single-band)
2026-08-20 10:31:43 +03:00
Matiq
45dfe2b8c2
P4: full decomp FUN_18052e260 frame driver (twin side-chain per band, LUT+mask+FFT-conv run per drained frame); wire order documented
2026-08-20 09:28:12 +03:00
Matiq
a6126d10ac
roadmap: mark P1.5/P2/P2.5 DONE, P3 partial (vlog+arch, butterfly remains); ~65-70% done
2026-08-20 09:27:04 +03:00
Matiq
5a4554a9a3
P4-prep: eval_lut_bin uses float logf/expf (matches decomp FUN_180563440 logf/expf, not double std::log/exp)
2026-08-20 09:26:38 +03:00
Matiq
8fad2bbfd9
P3.5: acc_437c0 = data shuffle (re/im repack + zero-fill), not arithmetic; full butterfly = twiddle load + shuffle + mult + combine
2026-08-20 08:48:00 +03:00
Matiq
feb44c3802
P3.4: transcribe plugin's own vectorized ln(x) (vlog.cpp, minimax ln(1+x) poly + ln2 range-reduction); correct prior misread — dispatch reaches runtime ln, not FFT; vlog_check ALL OK (rel 2.4e-7)
2026-08-20 07:12:56 +03:00
Matiq
7bbe7cce05
P3.3: final kernels use own vectorized sin/cos (SVML-like poly+exp, ln2=0.693147) not twiddle table for big-N; poly constants captured from rodata
2026-08-20 05:56:12 +03:00
Matiq
2a7b88e704
P3.2: map full 4-level FFT dispatch (535a70->140a10/70->jumptable->runtime table->6 final split-radix kernels 0x1802a24c0..2ce4a0); kernels force MXCSR round-to-nearest
2026-08-20 02:58:01 +03:00
Matiq
88422034f5
P3.1: extract FFT code from rt snap (extract_fft.py); decode cplx_mul 0x8440 = in-place elementwise double mult, twiddle loader 0x39b00 stride copy, dispatcher 0x535a70->0x140a10/70->jumptable[0x1826159a0]=4; implement cplx_mul_scalar_inplace
2026-08-20 02:25:59 +03:00
Matiq
22e4599e0a
P2: decode mask-accumulator combine kernels from raw bytes — combine3(0x8d60)=sub, acc_add(0x5a20)=dst+=src, acc_fma(0x3c40)=dst+=a·b; implement + levelpath_check ALL OK
2026-08-20 01:30:33 +03:00
Matiq
d3db772121
P2.5: decode twin-mask factory (FUN_18056e3e0 = constant fill 2π/(count·SR)) + band LUT apply (FUN_180563a60: level->gain t^γ/power-law); implement in levelpath.cpp, levelpath_check ALL OK
2026-08-20 01:23:22 +03:00
Matiq
a49e35dc25
P1.5: embed live level-tracker A[] + mask scalars into C++ (dsp/leveltrack_data.hpp); leveltrack_check sanity confirms SR=48000, A_ATTACK plateaus 0.692, attack/release=1.0
2026-08-20 01:12:12 +03:00
Matiq
0e90918226
P1.5 SOLVED: live ctx (0x2370040, +0x24==48000) + level-tracker A[] + mask scalars captured via realtime playback; method play.lua + rtctx_rt.py; prior 'unreachable' was offline-engine artifact
2026-08-20 00:44:58 +03:00
Matiq
fe43509d50
NOTES_CAPTURE: P1.5 live level-tracker A[]/ctx confirmed unreachable (window ptr only in registry, no +0x24==40000 object); scalars static-derived from RPP; 2 missing consts 0x24c4348/44a4
2026-08-20 00:11:45 +03:00
Matiq
c5d2b2ad7f
P1.5: rtctx.py live-capture pipeline (registry-scan + ctx discovery); confirms live level-tracker A[]/ctx not reachable (window ptr only in registry, no +0x24==40000 object) => scalars are static-only
2026-08-20 00:11:25 +03:00
Matiq
fd5a46542b
roadmap: reflect P0-P2 (tables/fftconv/leveltrack/mask-canon) + exact estimate of remaining code (P1.5-P5, ~60% left)
2026-08-19 23:58:20 +03:00
Matiq
433a0026e6
P2: level-tracker UPDATE-loop located (inline bidirectional IIR in FUN_180529fe0), structural module leveltrack (iir_first_order/bidirectional/unrolled4); scalar==unrolled verified; remaining = live A[] coeffs
2026-08-19 23:53:01 +03:00