From c69257a551e128df336a06287666a3bed7741aa4 Mon Sep 17 00:00:00 2001 From: Matiq Date: Wed, 26 Aug 2026 12:23:22 +0300 Subject: [PATCH] 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 --- handoff/NOTES_LEVEL.md | 59 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/handoff/NOTES_LEVEL.md b/handoff/NOTES_LEVEL.md index e454c95..9986f77 100644 --- a/handoff/NOTES_LEVEL.md +++ b/handoff/NOTES_LEVEL.md @@ -4102,3 +4102,62 @@ scr@628 → pack(re=scr,im=0) 2049 пар 3. Детекторный каскад lvl_raw→scr (шаги 9–17) не тронут; нужны ACC@7c8 (+ WINfreq@658 для контроля окна) — обновить rendersnap2 SLOTS. +## ============ 24mm10: ЯДРО EXP ДЕКОДИРОВАНО ПОЛНОСТЬЮ; МАСШТАБЫ ОПОВ ЗАФИКСИРОВАНЫ; ПАРАДОКС q ============ + +### EXP 1803831c0 — полная формула (скалярный путь = векторная математика) +Вход: пары (re,im) плоско; выход in-place. Это ТОЧНАЯ комплексная экспонента: +``` +e^re: t = fma(re, C1, MAGIC), C1=184.665 (=128·log2e!), MAGIC=12582912 + k = t−MAGIC (округление до целого); таблица T @0x1820fcd80, + запись 8 байт (hi/lo extended double), индекс (t&MASK)<<3 + r_hi = re − k·h, h=0.00541687 (=ln2/128, f32) + r = r_hi + k·1.65777e-06 ; Коди–Уэйт вторая компонента + p = r + 0.5·r² + e^re = T[k].lo + T[k].hi·p (+знаковые фиксы, guard 87.33654=maxarg−2ln2) +e^(i·im): |im|→q=round(|im|·(1/π)) через тот же MAGIC; приведение в DOUBLE: + rπ = |im| − q·π_hi − q·π_lo (двухкомпонентный π); фолд π/2; + минимакс sin/cos в double {2.60578e-06, −1.98096e-4, 3.166e-05, + −0.01604}; знаки по квадранту (vmovmskps) +out = (e^re·cos(im'), e^re·sin(im')) — БЕЗ КАКОГО-ЛИБО МАСШТАБА ВНУТРИ. +``` +Следствие: аргумент экспоненты в цепи = ровно то, что даёт fwd-RFFT. + +### Нормировки опов (пин по дизасму воркеров) +- FWD(1a0c0): сборка X[Nyq]=A0−B0 БЕЗ ×0.5 ⇒ ядро сырое (gain 1 = numpy.rfft); + план-масштаб guard `[obj+8]`: у нас [+8]=0 ⇒ ffe0 НЕ вызывается. ИТОГ s_f=1. +- INV(4ca80): голова X0/XN бабочка без 0.5, план-масштаб guard `[obj+0xc]`=1 + ⇒ ffe0 ×2^-12 по всему буферу ПОСЛЕ ядра. Ядро сырое (raw IDFT, gain N) + ⇒ после ffe0: s_i = 1 (ровно numpy.irfft). ИТОГ s_i=1. +- Содержимое WINfreq@658 подтверждено по старым дампам (firbufs.npz): + периодический Hann(4096), w[1]=5.8827e-07, w[1024]=0.5, w[2047]=0.9999994. + +### Отвергнуто (численно, на ультрачистых кадрах) +- Своп направлений (fwd,inv,fwd,inv): rms 82 дБ — исключено. +- «Найквост не экспоненцируется»: rms 60 дБ — исключено (EXP накрывает все + 2049 флоатов включая слот Nyquist.re). +- Окно hann^p (p=0.5..4) при q=1: s_F∈[0.81..0.97], не достигает 0.76. +- Перестановка («unordered» layout) для кадров класса post-stage: сортировка + модулей не совпадает ни с одной стадией (relres 0.28..0.98) — кадры + полиморфны, forensics снапшотов исчерпана. + +### ПАРАДОКС q (главный остаток) +Все масштабы зафиксированы ⇒ модель обязана быть точной при q=1, однако: +q=1 → rms 0.022 дБ; q=0.8 → 0.0065 дБ (медиана, 60 кадров). +Более того: наблюдаемый закон cur=trk^γ держится с rms~1e-4 на РАЗНЫХ +контентах, а наш сэндвич даёт контент-зависимый наклон s_F (0.82..1.34). +⇒ реальный тракт ведёт себя как ПОТОЧЕЧНАЯ степень (диагональный оператор +в частотном домене), наш rfft∘fold∘irfft — нет. Гипотеза: ops A–D суть +комплексные FFT размера 2048 (не real-4096!) либо содержат zreorder-слой, +и срединный линейный оператор L=rfft∘fold∘irfft в действительности близок +к диагональному в частотном базисе (например, при интерпретации буфера +как 2048 комплексных отсчётов fold-паттерн становится почти тривиальным). + +### Пути закрытия (следующий раунд) +1. Статический декод ядер-близнецов (~3.1k строк AVX каждый) — определить + размер/тип преобразования и формат укладки окончательно. +2. Live: burst-захват rendersnap2 (обновлён, +ACC/WINfreq) с плотным + семплированием состояния FIR внутри рендера; сравнить стадии. +3. Windows/x64dbg-MCP (если доступен хост): брейкпоинт на 52b644..52b893, + дамп FIR после каждого из 6 шагов для одного кадра — закрывает всё. + +