From 508b24125f3cd2bdd2ed2f92d1a3c636e5a845ae Mon Sep 17 00:00:00 2001 From: Matiq Date: Mon, 24 Aug 2026 19:17:59 +0300 Subject: [PATCH] 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 --- handoff/NOTES_LEVEL.md | 44 ++++++++++++++++++++++++++++++++++++++++++ scripts/rendersnap2.py | 3 ++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/handoff/NOTES_LEVEL.md b/handoff/NOTES_LEVEL.md index 28491f1..bfc175f 100644 --- a/handoff/NOTES_LEVEL.md +++ b/handoff/NOTES_LEVEL.md @@ -2970,3 +2970,47 @@ out-nofx.wav / out_dual300.wav битЫЕ СТАРОГО происхожден Корпус после восстановления: t1kq 0.768 / t1k 2.114 / al 0.986 / res 0.437 / dual 3.264 / comb 6.116 / TOTAL **2.286** (dual улучшился против 3.578 — свежие рефы). + +## ============ ДОПОЛНЕНИЕ 24l-2: ЖИВАЯ ПАРА (scratch, FIR); FIR = exp(log(bands)); поддержка log ОГРАНИЧЕНА ============ + +### Решающий снапшот +rendersnap2 v4 (слоты +540548/550/598/628) на multi.rpp → multi3/ph040.npz: +в ОДНОМ STOP пойманы scratch@540628 НЕнуловой (231 бин, max |s|=0.75) и FIR. +Проверка поточечно: +``` +bin43: scratch=-0.6472 exp(s)=0.5235 FIR=0.5292 (+1.1%) +bin171: scratch=-0.7498 exp(s)=0.4724 FIR=0.4763 (+0.8%) +``` +⇒ **FIR ≈ exp(scratch) = bands[i] напрямую** (расхождение ~1% — окна/ops). +«Строение кернела» не преобразует кривую — оно ВОСПРОИЗВОДИТ её через +log→exp-тракт (инверсия знака/твидлы/окна из 24l почти взаимно компенсируются; +их остаточная роль ~1% — выяснить отдельно). + +### Поддержка лога ОГРАНИЧЕНА +scratch непулевой ТОЛЬКО в бинах 6..623 (~70..7300 Гц) при нотчах на 43 и 171. +Вне поддержки scratch=0 ⇒ exp=1 ⇒ ЕДИНичный passband кернела — вот механизм +ровной единички пасбэнда! Границы поддержки = детекторная активность/порог +(уточнить законом). + +### Сшивка всех фактов раунда +``` +applied_A = 1.019 · B^1.8345 (24k, rms 0.0025 дБ) +B = exp(scratch) ≈ bands[i] (24l-2, ±1%) +⇒ остаётся ОДНА неизвестная: кривая bands[i] детектора (наша M ≠ B). +Контроль: A(B@43=0.5235)=0.310 → −10.17 дБ vs реф −10.32 ✓; +глубокий флэш D@43=0.315..0.32 = ровно значение, дающее реф-глубину при +подстановке в закон (D и есть B другой мгновенной фазы адаптива). +``` + +### Буферы +buf548: стабилен внутри сессии, span 4..8193, НЕ классические твидлы +(pair512=(−0.707,−0.724)) — построение при init, реплицировать численно. +mask598: паттерн lane-select подтверждён. + +### NEXT (24m) +1. Формула B(b): центр-закон 1.7436·ln(1+lvl/0.3824) уже есть; скирт-ветка + + границы поддержки (бины 6..623!) — следующие цели. Датасеты: multi3/ + rn_lv*/rn_q* + тракты. +2. Численная репликация log→exp тракта (ops A-D, buf548) до ±1% для bit-exact. +3. sens/fc-серии для масштабирования закона. +4. RT_FIRCONV=3 уже даёт правильную композицию — детектор доводить до B. diff --git a/scripts/rendersnap2.py b/scripts/rendersnap2.py index 3528100..9ced465 100644 --- a/scripts/rendersnap2.py +++ b/scripts/rendersnap2.py @@ -18,7 +18,8 @@ import time import numpy as np -SLOTS = [0x540668, 0x540678, 0x540688, 0x540788, 0x5407f8] +SLOTS = [0x540668, 0x540548, 0x540550, 0x540598, 0x540628, + 0x540678, 0x540688, 0x540788, 0x5407f8] NARR = 8194 SCAL_OFF = 0x540860 SCAL_N = 24 # floats -> 0x540860..0x5408c0