Matiq
f689023089
Exact ln/exp2 infrastructure for FIR construction (0x1802a24c0 / 0x26b820)
...
- log2_ln.hpp/cpp: Plugin's exact ln(float) polynomial from 535a70
(0x1802a24c0). IEEE 754 bit extraction + Horner evaluation.
Coefficients extracted from binary at 0x181f81f80..0x181f821c0.
Max error ~3e-6 for typical inputs.
- spectral.cpp: Updated buildFirFromMask to use plugin's ln→negate→exp2
pipeline instead of naive 1/mask reciprocal.
- exp2_tables.hpp/cpp: Already contains plugin's exp2 tables (0x26b820).
Remaining: twiddle stages (ops B/C/D with cos/sin tables from buf548)
are the missing piece for bit-exact FIR construction. These are
FFT butterflies already implemented in fft.hpp but need integration
into the FIR pipeline.
2026-08-27 12:18:57 +03:00
Matiq
575d26a771
STFT partitioned conv: FIR construction pipeline (52b550-52b8bb)
...
Implement minimum-phase FIR design from BLOCKMAP:
- buildFirFromMask: mask → 1/mask (reciprocal via log→negate→exp) →
IFFT → causal window → FFT → normalize → complex multiply
- RT_FIRCONV=2 activates the new path
- RT_FIRCONV=1 preserved as simple mask × audio (legacy)
Results (tone1kq single band):
default (pointwise): 500Hz=-25.35 dB, 1kHz=-50.60 dB
FIRCONV=1 (mask mul): 500Hz=-1.31 dB, 1kHz=-25.92 dB
FIRCONV=2 (min-phase): same as FIRCONV=1
The twiddle stages (ops B/C/D with cos/sin tables) are the missing
piece for bit-exact FIR construction. They perform FMA operations
with twiddle factors that modify the mask shape.
Note: dual_b1q_0.5.wav reference is empty (0 bytes) — corpus can't run.
Needs regeneration.
2026-08-27 06:13:18 +03:00
Matiq
4d78785f0b
cascade integration: sin-peak floor, complex twin resp storage, per-band cascade
...
- Add sin-peak floor mechanism (529c60): RT_CASC_SINPEAK param
Formula: sin_peak = sin(param*30-90) * 0.115129 * peak_level
Floor active for param in [3,9], max at param=6 (ln10/20=0.115129)
Prevents over-reduction by clamping level curve from below
- Store complex twin filter responses in FramedDetector::setParams()
for cascade 529c60 per-band processing
- Add cascade state persistence (fn529fe0::CascadeState per band)
- ctx[0x24] = 48000 (sample rate, from commit 0e90918 )
With init values ctx[0x1a0]=1, ctx[0x1ac]=4, cascade w=0 (passthrough)
- All tests pass: fn529fe0_check, render48k build OK
2026-08-27 03:12:56 +03:00
Matiq
b6e7fdc289
24mm13-add3: live per-stage dumps (CIN/COUT/AIN/AOUT); op-A confirmed b=|z| pairs; cascade input is accumulated signed state, NOT exp(scr)
2026-08-26 15:46:31 +03:00
Matiq
f68081f694
24mm13-add2: numeric recurrence check mismatches -> need per-stage entry/exit dumps of 529c60/16140 (tracer ready)
2026-08-26 15:42:23 +03:00
Matiq
c18f4b3ef4
24mm13-add: op-A 16140 = per-pair ENERGY re^2+im^2 of complex band curve; track = recursively smoothed energy -> explains magnitudes
2026-08-26 15:32:01 +03:00
Matiq
7202b8d6a4
24mm13: cascade helpers decoded (prefix-sum + x0.5 + pairwise-average = hierarchical smoothing); op-A 16140 body TBD; recurrence ready for numpy closure
2026-08-26 15:31:04 +03:00
Matiq
943e781720
24mm12: detector cascade FOUND = vtable stage vt+0x28 = 180529c60 (0x281 bytes, mixes bands@678 + prev track, x0.5, vec6f8 helpers); vtable pipeline map; fn529fe0 only builds kernel from ready tracks
2026-08-26 14:53:44 +03:00
Matiq
60421c32c9
24mm11: wine ptrace tracer works; FIR chain verified BIT-EXACT live (ratio=1.0, q=1 exact); df0 complex-mul confirmed; NEW: track_i != exp(scr) -> gamma born in detector cascade (Stage B target)
2026-08-26 14:15:03 +03:00
Matiq
6bc0120286
24mm10-bis: twins = radix-4 complex FFT-2048, raw normalization (INV+ffe0(2^-12), FWD none); twiddles inline in plan capture; q-paradox not in normalizations -> need live intermediate states
2026-08-26 13:09:33 +03:00
Matiq
c69257a551
24mm10: EXP kernel full formula (table-reduced exp + double Cody-Waite sincos, no internal scale); fwd/inv normalizations pinned (s_i=s_f=1); rejected swap/nyq/window-family; q paradox formulated with 3 resolution paths
2026-08-26 12:23:22 +03:00
Matiq
50d7ab0d05
24mm9-wip: EXP kernel fully decoded = exact complex exp (no scale); fwd/inv normalizations pinned raw; swap-variant rejected (82dB); q!=1 contradiction sharpens -> suspected unordered-FFT layout / missed reorder op
2026-08-26 12:18:04 +03:00
Matiq
3c5e276fc5
24mm9: FIR-chain decoded = min-phase cepstral sandwich; opB/opC are RFFT twins (plan@548), df0 = complex-mul dst=track; validated 0.0065 dB median over 60 clean frames; gamma = 1+s_F(q), q~0.8 source open
2026-08-26 11:49:48 +03:00
Matiq
f0cfec8af7
handoff: next-round entry point opB worker 4ca80 descriptor-op
2026-08-26 10:03:55 +03:00
Matiq
c2da7495c0
24mm8: opB/opC/df0 resolved to descriptor-op bodies (4ca80/1d160/1a0c0/18400); all micro-questions localized
2026-08-26 09:41:26 +03:00
Matiq
a281f6a721
24mm7: design output = exact ln(bands_final) (eps-level test), gamma arises post-design (opsB/C + df0 combine); candidate formulas logged
2026-08-26 09:10:17 +03:00
Matiq
d97dcffaa7
24mm6: FIR pre-exp scalar is x2.0 (1824c41e0), not -1; gamma=2*k_design hypothesis; four localized micro-questions for next round
2026-08-26 02:48:18 +03:00
Matiq
e9125d4024
24mm5: full band-loop register-level buffer map (two log-exp rounds with bidir-IIR4 in log domain = spectral mixing); design 535a70 resolves to THE conv body 1802a24c0 (open item 22z closed as identity)
2026-08-26 02:45:33 +03:00
Matiq
a79c8f4934
24mm4: cascade_sim.py skeleton + clean-frame picker (gamma/identity phases), power law validated to 0.0006dB; pointwise detector laws refuted on 447 bins - scr is spectral-cascade product
2026-08-26 02:33:11 +03:00
Matiq
17f25089c6
24mm3 BREAKTHROUGH: applied mask = trk^1.760561 (exact), trk=exp(scr); gamma computed by cascade not stored; recalibrates all prior law fits
2026-08-26 02:17:39 +03:00
Matiq
5c29e2cd4f
24mm2 notes: kernel library identified, expf/divide decoded, cascade sim started
2026-08-26 02:06:56 +03:00
Matiq
e958b3d3d6
24mm2: full static resolve of all 10 bigkernel stubs (divide/expf/logf/pow/sincos/custom-curve), expf fully decoded, step-14 order fix, ACC slot at 5407c8
2026-08-26 02:06:24 +03:00
Matiq
dcfe7774f3
: 24 ,
2026-08-26 01:40:00 +03:00
Matiq
b5a5afbd16
session close: final knowledge map — decoded list, open items (curve mechanism needs bigkernel op decode; G(geometry,STATE) run-dependent), practical status dual 0.193
2026-08-25 23:43:09 +03:00
Matiq
87f00ce181
24kk3: SLOT 540668 IS POLYMORPHIC — holds two float scalars (~0.43,2.0) between processing phases, pointer-to-FIR during callbacks; explains missing 668 in all new captures; GUI-curve slot 540678 matches audio ±5%
2026-08-25 14:35:10 +03:00
Matiq
c210a778e5
24ii3 FINALE: unified per-peak-gain law — cut=alpha*ln1p(g_k*L_k/beta)+c with g(fc)=1, g@2000=12.15 (tt-run) BUT g varies between runs at same geometry => g=G(geometry,STATE); STATE=[ctx+540788] readable; final roadmap to bit-exact defined
2026-08-25 13:54:36 +03:00
Matiq
0677a390d2
24ii2 BREAKTHROUGH: [ctx+540788] = DETECTOR SPECTRAL STATE (smoothed input estimate, content-dependent, stable within run); corrects 'static template' misread; explains alpha(content), sens plateau, cross-peak redistribution — the missing second argument of the law
2026-08-25 13:40:38 +03:00
Matiq
94116e2a17
24jj2: R@540788 is BANDPASS-shaped (peak ~3.5-4kHz) fundamentally unlike our monotone twin — equal-loudness-like weighting hypothesis; explains all far-bin anomalies at once; exact entry form of weighting TBD
2026-08-25 13:19:54 +03:00
Matiq
d2f67016ab
24ll3: per-bin am/res paradigm REFUTED for off-center peaks — unified res^p fit hits lower bound (wants NO res dependence), yet cuts grow monotonically with res at equal am; two-argument structure or full cascade required; multi6 dataset is the validation target
2026-08-25 12:57:18 +03:00
Matiq
b85b344e23
24ll2: multi6 dataset — SIX notches one run (self-consistent); cut GROWS with res (2.33->7.18), independent of am (first four tones equal am!); rejected floor/power models; perfect validation target for cascade simulator
2026-08-25 12:54:25 +03:00
Matiq
def7cea522
24nn: SESSION FINALE — per-peak softplus laws ultra-clean (pk2 rms 0.0006!), shared alpha~3.3, beta2 10x smaller than beta1, level-scale x11.6 const; CROSS-RUN absolute comparisons UNRELIABLE (state selection) — within-run series only; campaign tools complete
2026-08-25 12:32:23 +03:00
Matiq
f365fa8451
docs: full documentation refresh post-24kk2 — README status (application decoded to formulas, dual 0.193), AGENTS phase header + env-flags/tools tables, NEXT_PROMPT rewrite (cascade simulator + campaign recipes), PLAN/roadmap gate=BIT EXACT decision recorded
2026-08-25 12:18:32 +03:00
Matiq
0fee9238dc
24kk2: clean distance-series data (non-monotone below-single at small d = depth redistribution); cascade simulator with guessed forms does NOT close (rms 0.42-0.49) — op-by-op transcription per dataflow 24hh/24ii is the defined path; session consolidated
2026-08-25 12:06:18 +03:00
Matiq
77c02c8f9d
24mm: distance series captured (cuts depend on 2nd-tone distance, confirming local mixing); w(d) inversion needs cleaner methodology (peak-window/domain issues documented); raw data preserved
2026-08-25 11:39:10 +03:00
Matiq
0dfff22efb
24ll: alpha(content) LOCALIZED — far second tone (@4000, both 0dB and -12dB) does NOT affect alpha (1.075-1.110 vs 1.153); mixing is template-local via res-weighted freq-IIRs; distance-kernel series is the next campaign cell
2026-08-25 11:22:45 +03:00
Matiq
4f79f83c11
24kk: Q-INDEPENDENCE PROVEN — law constants identical for q=1.0 and q=0.5 at fc1000 (alpha/beta/c match to 3 decimals); g_s12 anomaly = louder input file (tone1k 2.28x); campaign tool added; remaining axes: content-tones (alpha doubling) and fc
2026-08-25 10:53:00 +03:00
Matiq
bf3faab660
24hh2: gate set to BIT EXACT (user decision); g_s12 datapoint captured (fc1000 q1 s12: audio=scratch+(-0.11dB) confirms direct-mask at fc1000 too); parameterization campaign table drafted
2026-08-25 10:48:05 +03:00
Matiq
c33212c21b
24jj: BIGKERNEL BODIES FOUND via runtime IAT resolve — 1803a06a0/180296c80/180323f20/1802dc0e0, real math functions with x87 transcendental pair (exp family); iat_name.py v2 with double-deref+PE exports
2026-08-25 10:29:06 +03:00
Matiq
483f52f296
24hh-2: runtime dispatch tables STABLE (=static); bigkernels resolve to IMPORTS (outside dump); iat_name.py PE-export parser drafted (needs SIGSTOP race fix); once named, full cascade simulator becomes implementable
2026-08-25 10:16:48 +03:00
Matiq
8ef1d4ec73
24ii-cont: bigkernel bodies behind NESTED dispatch (packer) — static unwrapping ends; runtime table-dump after init noted as the extraction path
2026-08-25 09:58:49 +03:00
Matiq
0943471b33
24ii: th2000 CORRECTED to elementwise array-multiply (not axpy); steps 13-16 decoded — mirror branch, centering -1, bigkernel, *track, *warp; pipeline structure coherent
2026-08-25 09:57:35 +03:00
Matiq
2d6bdcf967
24hh: exact dataflow steps 9-12 decoded — vec698 zero, vec6f8+=0.8 baseline, combine vec6f8=bands-ACC confirmed from dc40 body; correction-curve architecture identified; steps 13-19 next
2026-08-25 09:55:04 +03:00
Matiq
83c12d9b3d
24gg: step-12 CORRECTION — th1b80 is MEMCPY not add (6840->1a5a0->181a646c0 pure vmovdqu); resonance hypothesis needs revision pending full steps 9-19 dataflow pass
2026-08-25 09:46:09 +03:00
Matiq
feaa82957a
24ff: step-11 fma semantics — triplets (re,im,coef): f6f8 += att/rel_coef * ACC_i (upper/lower halves); ACC persistent leaky integrator with static per-freq coefs (gain 2.57-3.42); possible source of level amplification anomalies
2026-08-25 09:45:04 +03:00
Matiq
0fbff6dc6e
24ee: variables SEPARATED — softplus form universal (3 independent calibrations rms<=0.016), alpha grows with tone count (1.15->3.22 for 1->2 tones: freq-mixing in steps 9-19); audio=deepest-scratch+const across ALL families; dual two-stage was two-tone artifact
2026-08-25 09:21:44 +03:00
Matiq
61219acca6
24dd: clamps refuted by refs (gradual q variation); saturation LOCALIZED in frontend — plugin template gain FLOORS at res~0.153 @fc1000q1 (ours falls to 0.0069 by s24, 22x deeper); law itself correct; next = twin/am module formula decode
2026-08-25 08:56:20 +03:00
Matiq
10d8c1cf5a
24cc: exact coef-gen formula pinned — exp_arg=|c|*g/n with n=2049 ([state+8] live-verified all three states); saturating form; default down-coefs 0.003-0.19 (gentle, cascade-only effect)
2026-08-25 08:42:00 +03:00
Matiq
d4c56bdfce
24bb: P1 complete — simple maps rejected (k non-constant, smoothing naive-form ineffective, B!=am, parametric bump rms 4dB); NEW FACT: notches are FLAT-TOPPED symmetric about fractional peak position; asm re-check shows extra *g in 533340 coef gen missed by transcription — next round priority
2026-08-25 08:39:41 +03:00
Matiq
2fb0e640e0
24ab: opB dispatcher structure documented (subtag kernels + Hermitian repack); ops A-D PARKED as buffer-level-only (audio=exp(scratch) proven; VLAW real-mask corpus 0.193); session consolidation 24j..24ab
2026-08-25 02:31:22 +03:00
Matiq
47c5360ac2
24aa: 563a60 confirmed GUI-branch (detector-LUT params absent from audio-instance memory — full rw-scan); audio-path level compression lives in step 1-19 op semantics (bigkernels/fma/combine); memory-scan tools added
2026-08-25 01:42:16 +03:00
Matiq
65ee61d540
24z-2: rendersnap2 v6 attempts band-object LUT capture (A/B/gamma) — ctx+0x540678 is curve data not object ptr; band-object array discovery is next session opener
2026-08-25 01:28:26 +03:00
Matiq
676d43d40a
24z: FUN_180563a60 FULLY DECODED — detector LUT builder: dB=ln(x)*8.68589; t=(dB-A)/(B-A) clamped; out=0.5*t^gamma (+ symmetric 2t^g-1 mode, + virtual dispatch); A/B/gamma live in [band+0x180] object — the level-compression stage found materially
2026-08-25 01:26:05 +03:00
Matiq
8a4e7a3c54
24y: law validated on fc500-q2 (-0.06dB, extends beyond calibration); plugin LEVEL saturation discovered (impl plateaus 15.47 at sens18/24, 49.9 at q>=2) — LUT FUN_180563a60 is prime suspect for the compression stage
2026-08-25 01:24:34 +03:00
Matiq
243ea03a45
24x: structural diff table (plugin unity-passband+narrow dips vs canon blend+warp smear — VLAW bypass structurally correct); k-mapping table of effective levels across configs (k=0.403 const for q>=2, exponential in sens) — frontend decode is the remaining bit-exact closure
2026-08-25 01:20:29 +03:00
Matiq
4b94ce5c15
24w-3: live constants of FUN_180533340 — p=[54087c]=1.0, tau1=1200, tau2=180, mult=360, C=1000; body formula asm-confirmed; single bidir pass does NOT move curve centers (q-dependence lives elsewhere in steps 9-19)
2026-08-24 22:35:13 +03:00
Matiq
5284ce2b57
24w-2: scalar combos of lvl/res rejected for cross-config law (q enters via mechanism — freq-IIR coefficients from FUN_180533340/selectivity); our twin res@center q-independent, sens-dependent confirmed
2026-08-24 22:32:32 +03:00
Matiq
cf38622995
24v: STFT layer solved — NO synthesis window (partitioned-conv architecture); dual corpus 0.193 mean/0.438 max (was 3.264); RT_SYN/RT_WIN env options; remaining: q/sens parameterization of law constants
2026-08-24 22:29:56 +03:00
Matiq
edf6f35cdf
24u: engine ctor init-map — sub-inits 5335c0(x2)/534550(x5) consume cfg chain from stack; next: decode 534550 bodies + WIN_WINDOW usage xref
2026-08-24 22:18:41 +03:00
Matiq
abbee308ba
24u: WIN_WINDOW decoded structurally — fade 0.5->0.8 over EXACTLY 2049 samples (=kernel bin count) then unity to 8193; block 8192 hinted by cfg; non-canonical taper (embed table verbatim)
2026-08-24 22:17:52 +03:00
Matiq
da0393bd93
AGENTS.md: current-phase header updated to post-24t state (application decoded, VLAW v3 status, remaining gaps)
2026-08-24 22:13:52 +03:00
Matiq
5bd60cfefd
24t: exact semantics th2030=mul / th2270=add (with special cases); FUN_180563a60 identified as init-time dB-domain table builder (log x 8.68589); LUT-form vs softplus both fit drive series — decomp required to discriminate; disasm_func.py tool
2026-08-24 22:13:01 +03:00
Matiq
0bc8427cd7
24s: APPLIED LAW DIRECT — cut_dB=3.2193*ln1p(lvl/0.4927)+0.54, rms 0.016dB; audio==exp(deep scratch) proven both tones; buffer FIR is intermediate (min-phase packed); RT_VLAW v3 9.47/11.16; STFT layer is remaining -0.85dB
2026-08-24 22:00:31 +03:00
Matiq
a309ca3e31
24r: track slot static (not the 2nd stage); DTFT test — deep kernel matches ref at center (10.63 vs 10.32) but fails at skirt => consumption packing via ops A-D is the last undecoded piece; patchparam param-map obtained
2026-08-24 21:52:33 +03:00
Matiq
4b56e4f384
24q: controlled depth/mix sweep via patchparam.py — gamma0 INDEPENDENT of depth (1.760 const); blend hypothesis falsified (audio/steady ratio 1.6-1.86 at ALL mix, never 1); constant +0.4dB gap deepest-capture->audio; RENDER_FILE clone hazard documented
2026-08-24 21:49:34 +03:00
Matiq
3062a02389
24p: stage ratio pointwise-constant 1.760+-0.011 across all bins (pure scalar dB-stage); blend hypothesis gamma0=1+blend(0.8)=1.8 with testable mix prediction; s_corr_mix series incomparable (different input) — controlled mix variation pending VST-chunk tooling
2026-08-24 21:38:21 +03:00
Matiq
a3d108f4d5
24o-2: global shape fit FAILED (rms 1.4dB, chaotic per-project scales) — saturation caps are config-specific; route forward = static decode of FUN_180533340/LUT/mix^p/double-exp; datasets preserved (mega_curves.pkl)
2026-08-24 20:48:45 +03:00
Matiq
5f822ebae1
24o: parameterization datapoints — qmap/sens series with correct center-bin; ref_cut==cut_D universally; sens saturation plateau 11.74dB (lvl x70!), law non-monotone in lvl across q configs; datasets committed to /tmp
2026-08-24 20:46:16 +03:00
Matiq
31cc5540e1
24n-2: Delta-branch implemented (peak+neighbourhood, two-pass); dual end-to-end 9.32/11.58 vs ref 10.32/11.82; VLAW corpus: dual 0.708 (was 3.264) but single-band groups regress — constants are dual-family-specific (q/fc dependence open); canon default verified 2.286
2026-08-24 20:33:40 +03:00
Matiq
fc224b00a3
24n: unified stage-S law cutS=alpha*ln1p(lvl/0.3824)+Delta(b) — same beta both branches, Delta=+4.18dB at off-center content peak; RT_IIR12=0 critical (freq-IIRs smear dips); VLAW center 9.40 vs ref 10.32; ramp trajectory confirms gamma0 (+0.2dB lag)
2026-08-24 20:12:51 +03:00
Matiq
b00a8a667e
24m-2: RT_VLAW=1 two-stage detector law implemented (formula verified in-code g=0.319@43); end-to-end gap traced to STFT application layer (WOLA mainlobe smearing vs narrow dip); stale-build hazard reconfirmed
2026-08-24 20:04:28 +03:00
Matiq
fe01ef5bac
24m: TWO-STAGE detector — deep=gamma0 x shallow in dB, gamma0=1.79+-0.02 constant across bins/q/levels (explains 1.805/1.8345 family); skirt branch 7.57+2.70*ln(1+lvl/0.341) rms 0.22dB; 18 full-support scratch curves captured
2026-08-24 19:34:43 +03:00
Matiq
508b24125f
24l-2: live (scratch,FIR) pair proves FIR=exp(log(bands)) pointwise (+1%); log support LIMITED to bins 6..623 -> unity passband mechanism; applied = 1.019*B^1.8345 with B=band curve; detector M->B is the only remaining gap
2026-08-24 19:17:59 +03:00
Matiq
3a611cff35
24l: exact FIR-loop decode from asm — pre-exp sign inversion (div by -1, xmm13) + upper-half zeroing (xmm9=0); step-1 multiplier is NO-OP (xmm8=1.0); exp kernel behind IAT; ops A-D = descriptor-typed twiddle-FMA stages; disasm.py tool
2026-08-24 19:13:49 +03:00
Matiq
65fb983d57
24k-4: RT_FIRCONV=3 (application law 1.019*M^1.8345); rendersnap2 wav-path hazard fixed (RENDER_FILE parse, was destroying refs — dual_b1q_1.0.wav restored); corpus TOTAL 2.286
2026-08-24 18:37:30 +03:00
Matiq
1605e0ba29
24k-3: V = sum of independent narrow per-content-bin dips (no broad skirt, R-corr=0); center law cutV=1.7436*ln(1+lvl/0.3824) rms 0.045dB; skirt branch structurally steeper — unified law open; application law unchanged
2026-08-24 18:32:00 +03:00
Matiq
6dc2967e4a
24k-2: clean q-table of V — dip shape q-invariant (6-7 bins half-width forall q), q lives in broad skirt component Wq; two-component model V=D(f)*Wq(f)
2026-08-24 18:05:02 +03:00
Matiq
cc8ba34577
24k: application law EXACT — cutA=1.8345*cutV+0.1615dB (rms 0.0025dB, 8 drive levels); x1.805 = exponent product 0.984x1.8345; single instance confirmed; R-slots static; probe-multitone method
2026-08-24 18:02:28 +03:00
Matiq
6629e8bbf2
24j: applied response == live FIR per-bin (x1.805 revoked as stale-kernel phantom); R-slots static twin template; rendersnap2 soft snapper + probe-multitone method
2026-08-24 17:35:27 +03:00
Matiq
475b1958d5
fix: corpus 24-bit loader + LUT calibration env var
...
- Fix reshape error in corpus.py 24-bit WAV loader (misaligned data)
- Add RT_LUT_CAL env var for LUT output calibration
- Corpus results: TOTAL 2.397 (bridge 1.594), comb improved (-4.032)
- Structural chain regresses on t1kq/t1k/al/dual due to LUT curve mismatch
- The LUT produces different frequency response than plugin's FIR construction
2026-08-24 15:18:39 +03:00
Matiq
a1632a9fce
fix: persistent IIR state eliminates ×1.805/×2.44 gaps
...
Root cause: IIR accumulator reset to 0 every frame, losing temporal state.
Fix: static thread_local accumulator persists across frames.
Results (dual_b1q_0.5, reaper render):
cut@500 = -10.32 dB (EXACT match, was -14.35)
cut@2000 = -11.82 dB (EXACT match, was -6.58)
Both the ×1.805 (OLA normalization) and ×2.44 (mask computation) gaps
were caused by the same root issue: IIR state reset.
2026-08-24 14:31:55 +03:00
Matiq
0e4d3177fe
feat: ×1.805 confirmed — OLA normalization factor (24i)
...
Steady-state simultaneity test: 60 captures, mask constant at 0.5099,
fir constant at 0.5241, actual cut -10.32 dB.
Ratio actual/fir = 1.839 ≈ ×1.805 from 23e/24e.
Two independent error sources identified:
1. Mask computation: 0.209 vs 0.510 (×2.44, LUT issue)
2. Application: per-bin vs FIR convolution (×1.805, OLA)
2026-08-24 14:23:39 +03:00
Matiq
2c99a4fc96
feat: consumer identified (th_b3c0), scan3.py, RT_FIRCONV/RT_FIRPOWER
...
- th_b3c0 (0x18000b3c0) = pure complex multiply FIR × audio in freq-domain
- scan3.py: pre-scan approach finds ctx in 1.5s, multi-instance detection
- RT_FIRCONV=1: FIR from mask + complex multiply (spectral.cpp)
- RT_FIRPOWER=1: power-law mask from raw spectrum (framed_model.cpp)
- Root cause: plugin uses FIR convolution (OLA), not per-bin multiply
- Live captures: FIR@43=0.524, mask@43=0.510, final gain=0.305
- Best result: RT_LUT_OFF gives cut@500=-8.18 dB (ref -10.32)
- NOTES_LEVEL 24e/24f/24g appended
2026-08-24 13:52:52 +03:00
Matiq
03777fdaee
docs: NEXT_PROMPT.md — session handoff prompt (post-24d state, priorities, environment hazards, control numbers)
2026-08-24 09:48:29 +03:00
Matiq
135f0e9f21
24d: round stop — two-instance hypothesis untested (scan2.py debugger mismatch vs rendersnap documented); consumer hunt state fully recorded: static xrefs exhausted, dynamic traps blocked under wine, conv engine object identified, glue method pending decode
2026-08-24 09:43:58 +03:00
Matiq
77e294d445
24c: live per-frame processing PROVEN by clean content-switch experiment (seq A/B halves show different cuts: 21.91 vs 25.74 dB @2000) — retracting 23k build-once conclusion (instrumentation blindness: wine holds HW BP slots); methodology fixes documented (partial-output trap, LOOP=1 render bounds)
2026-08-24 09:16:00 +03:00
Matiq
a9f1bd365b
24b: full module vtable mapped (setters confirmed: 52ba20 flag->full rebuild via 52e9b0, 52baa0 writes 0x54088c expf scalar used by FIR loop); conv engine is non-virtual direct-call object — its process method lives among callers of dc30/fe00 in 52d650..532xxx range
2026-08-24 02:44:34 +03:00
Matiq
f483fe398d
24a: perf_event breakpoints definitive — wine reserves HW BP slots (ENOSPC on wine threads while self/cross-process native opens succeed), closing hardware-trap route and explaining all prior ptrace-DR silence; FFT-conv engine object identified at ctx+0x540530 (inline cfg {2,4096}/{16384,8192}, member vectors +0xb8..+0x130, methods dc30/fe00/dd30) — its process method is the kernel consumer candidate
2026-08-24 02:43:04 +03:00
Matiq
8acbf6612e
23m: round final — DR-trap delivery anomaly under wine threads documented (near-zero stops despite verified arming and confirmed module execution); full stop-logging added to fnexec; roadmap to bit-exact fixed: G-form via stabilized series, consumer via init-family decode or perf_event HW breakpoints, then RT_FIRCONV gate
2026-08-24 02:30:19 +03:00
Matiq
56edd3c0f4
23l: DR exec-watch verified working end-to-end by micro-test on this kernel (SIGTRAP+DR6 correct); contradiction isolated to process/thread targeting in tracer, single remaining hypothesis documented with debug protocol
2026-08-24 02:22:55 +03:00
Matiq
baafbb6dc6
23k: HW exec-breakpoints operational (correct offsets, RF-flag pass, clone inheritance); clean run proves decoded chain does NOT execute in steady render — kernel built ONCE on param-change in <100ms window after instance creation; transcription implication: rebuild kernel only on setParams; full capture recipe documented
2026-08-24 02:08:30 +03:00
Matiq
9e85b730b2
23j: multi-register watchpoint definitive negative — zero hits even on mandatory-hot words (overlap/R/lock) across confirmed renders with 8/8 threads armed; HW data watchpoints not delivered under wine threads here — route closed, pivot to static table-index scan
2026-08-24 01:56:15 +03:00
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