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)

This commit is contained in:
2026-08-23 22:19:05 +03:00
parent 3a0a38467b
commit 7902acfbb8
+27
View File
@@ -2327,3 +2327,30 @@ CONT, дамп rcx/rdx на хите (скрипт fnall.py готов, нуже
4. reaper.ini: alsa_outdev/indev=null прописаны (бэкап /tmp/opencode/reaper.ini.bak) 4. reaper.ini: alsa_outdev/indev=null прописаны (бэкап /tmp/opencode/reaper.ini.bak)
— realtime колбек всё равно не ожил (cpu 0.2 t/s), вопрос закрыт в пользу — realtime колбек всё равно не ожил (cpu 0.2 t/s), вопрос закрыт в пользу
render-snap метода. render-snap метода.
## ============ UPDATE 2026-08-23i (23e): ЗАКОН СОШЁСЯ КОЛИЧЕСТВЕННО ============
Серия rendersnap: dual_b1q_0.5 + dual_b1q_3.0 (стационарные фазы).
1. **FIR = exp(0.984·scratch)** поточечно (коэф идентичен @43/@171) ⇒ ops
между log и exp — скалярный раундтрип, никакой межбиновой магии в самих ops.
2. **real_cut / FIR_cut = 1.7981.810 константа** по всем 4 точкам
(q0.5: 5.70/6.58 FIR против 10.32/11.82 real; q3.0: 5.69/5.76 против
10.29/10.32). Между кернелом и слышимым применением — ЛИНЕЙНЫЙ масштаб
~1.805 в дБ-домене (кандидат: двойное применение/нормировка conv-стадии;
залочить при декоде потребителя, до тех пор EMPIRICAL-константа).
3. **Центр не зависит от q живьём**: scratch43 = 0.6565(q0.5) vs 0.6551(q3)
при том, что сырой bands[] мигает от 0.3 до 382 (детекторные IIR дают
стационар). Скайрт: Δscratch171(q3q0.5)=+0.0937 ln ⇒ ×0.984×1.805 =
**+1.46 дБ** против реального Δ=1.50 дБ — сходится в пределах 3%.
4. Структура механизма окончательно: mask_log(f) = G(log(am_frame(f)), res_band(f));
кернел = exp(mask_log) c падающим Hann-окном на [n/2..n); применение =
свёртка × масштаб 1.805. Это УЖЕ наша каноническая структура am/res — но
вход амплитуды берётся из спектра кадра напрямую (не через наш lvl-тракт),
и применение — FIR-свёртка, а не поточечное умножение STFT.
### NEXT (конкретика)
1. Восстановить точную зависимость scratch(band, res): прогнать q-серию
{0.1,0.2,...,10} + am-серию, аппроксимировать G (ожидаем линейность в логах
вида k·ln(am/res)+c, k≈0.984·?): две точки уже дают k_skyрт согласован.
2. Найти источник масштаба 1.805 (декод потребителя FIR: кто читает 0x540668).
3. Транскрипция RT_FIRCONV=1: bands=STFT-спектр кадра → scratch=G(...) →
kernel=exp·HannWin → rfft-свёртка overlap-add → гейт корпуса.