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)

This commit is contained in:
2026-08-23 20:59:54 +03:00
parent 07cd4b7dc0
commit b8d5f83fc5
39 changed files with 190417 additions and 0 deletions
+47
View File
@@ -2224,3 +2224,50 @@ dual НЕ в пост-обработке кривой R.
0x1802a24c0 (3КБ AVX2) и complex-op шагов с буферами 0x540548/550/598 — следующий
статический шаг; альтернатива — трассировка промежуточных буферов живьём
(снапшоты в момент аудио-колбека, не между кадрами).
## ============ UPDATE 2026-08-23g (23b): ДИЗАЙН=LOG(band), Hann-окно, PRNG-дизеринг ============
### Что доказано декодом (детали в BLOCKMAP 23b)
1. Полная цепь построения FIR на полосу залочена по raw asm (52b55052b8bb):
scalar-shape ×2 → **DESIGN: scratch=log(bands[i])** (векторный log2, полином
идентифицирован по константам, тело 0x1802a24c0) → copy→FIR@0x540668
4 комплекс-op (A..D) на буферах 0x540548(SIMD/twiddle-workspace)/0x540598
(YMM-маски 8×1/8×0×64) вокруг нормировки &FIR[1]÷K и bigkernel →
**FIR[2048..4095] ×= Hann_freq[2048..4095]** (падающая половина периодического
Hann(4096), пик ровно на стыке!) → FIR[0]=1,FIR[1]=0 → dry/wet над 2n флоатами.
Структура log→ops→exp-класс + окно = классический frequency-sampling /
минимально-фазовый дизайн кернела. Гипотеза механизма скайрта: геометрия
задаётся ОКНОМ и комплекс-ops на log-спектре, а не постобработкой R.
2. WIN_freq опознан численно (w[1024]=0.5,w[2048]=1.0) — прежняя трактовка
«0.5→0.8» относилась к другому слоту (0x540698).
3. freqaxis: шаг 11.71303 vs точные 11.71875 — накопительная f32-ошибка построения;
сетка внутренняя 48k/4096 подтверждена независимо.
4. Выход плагина недетерминирован от рендера к рендеру (md5 разные, rms равные) —
LCG-прологи реально дизерят; честная метрика только спектральная.
### Динамика: почему живые кривые «статичны»
Realtime-playback без аудио-девайса НЕ вызывает processing (все треды спят);
кривые 22y — продукт инициализации проекта. `-renderproject` прожимает весь
цикл за ~0.8 c (init+render+exit); перехват требует SEIZE+TRACECLONE ДО первого
CONT главного треда. FUN_180529fe0/52d650/536300/52e260 не ловятся в рендер-окне
⇒ маск-цепь выполняется при загрузке/param-change, рендер использует кэш.
Следующий динамический шаг (если понадобится): bp на входе process-callback vtbl
или трасса окна init (поймать DESIGN в момент param-change).
### Инструментарий этого раунда (закommичено)
scripts/ilt_resolve.py (резолв стабов офлайн), scripts/firtrace.py (полный каталог
буферов + GUI-флаг 0x2404bc), scripts/firstop.py (SIGSTOP-семплирование),
fntrace*.py/fnhw.py/fnall.py (ptrace-лаборатория: INT3/DR, уроки — см. BLOCKMAP),
hotips.py. .dis тела: conv_float_a24c0, conv_double_fa420, imp_*, th_* (19 impl).
### Контрольные числа dual (цель раунда, неизменны)
cut@500=10.32 дБ const ∀q; @2000=11.82 @q=0.5; Δcut≈2.25·(ln res).
Модель сейчас: −0.18/@500-ок + провал скайрта.
### NEXT (пересмотр после декода)
1. numpy-реплика цепи log→opsA-D→window с КАЛИБРОВКОЙ ops по измеренным H(f)
(корпус референсов уже есть); критерий — воспроизведение Δcut(res) геометрии.
2. Если ops A-D ≈ exp-раундтрип со сглаживанием: транскрипция за RT_FIRCONV,
гейт corpus --vs-bridge + контрольные числа dual.
3. ptrace-эскалация ТОЛЬКО если численная репликация не сойдётся: цель —
брейкпоинт в момент param-change (init-окно хоста), а не рендер.