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

This commit is contained in:
2026-08-26 13:09:33 +03:00
parent c69257a551
commit 6bc0120286
+33
View File
@@ -4160,4 +4160,37 @@ q=1 → rms 0.022 дБ; q=0.8 → 0.0065 дБ (медиана, 60 кадров).
3. Windows/x64dbg-MCP (если доступен хост): брейкпоинт на 52b644..52b893,
дамп FIR после каждого из 6 шагов для одного кадра — закрывает всё.
## 24mm10-бис: итог статического разбора близнецов (раунд «добить q»)
```
Ядра 181b853e0(INV-core)/181b81b80(FWD-core): 3130 строк почти развёрнутого
AVX2-кода (60 jcc, 4 боевых петли), БЕЗ внутренних вызовов; единственные
float-константы ±0.707107 (+ знак-маска 0x80000000) в собственном статике
@0x186ee7dxx (в дампе есть). Это radix-4/split-radix КОМПЛЕКСНЫЙ FFT
половинного размера (count=N/2=2048 от воркера), специфицированный под
размер (jump-table по log2n в воркере выбирает ядро).
Нормировок внутри НЕТ (ни одной vmulps на константу ≠±1/√2).
INV-воркер добавляет ffe0(2^-12) ([obj+0xc]=1), FWD-воркер НЕ добавляет
([obj+8]=0). Твидлы плана лежат инлайн после заголовка плана (захват buf548:
квады cos(π/8)-класса @f32-индекс 560+, пары sin|cos дальше);
указатели plan[+0x30]/[+0x38]/[+0x50]/[+0x58] — кучные адреса этих таблиц
(вне дампа), разность [+0x38][+0x30]=0x230Б=140 f32.
Инструмент: /tmp/opencode/avx_interp.py (мини-интерпретатор AVX/FMA-
подмножества; баги cmp-as-sub и RIP-rel исправлены; довести до прогона —
упёрлось в управление потоком на таблицах, см. probe2/probe3.py).
```
ВЫВОД: пара INV/FWD == пара numpy.irfft/rfft (подтверждено трижды).
Парадокс q (модель требует аргумент×0.8, все масштабы зафиксированы)
⇒ причина НЕ в нормировках ядер, а в том, ЧТО реально лежит в FIR-буфере
в момент γ-кадров: офлайн-гипотезы о стадиях исчерпаны, кадры полиморфны.
Необходимо наблюдение ЖИВОГО состояния (варианты 2/3 выше), либо полный
декод управления потоком близнеца (петли по стадиям, r13/r14 walk —
частично картирован: r13=work, add/sub rbp, add 0x40/0x100).
### Скорректированные мелочи dataflow этого раунда
- Порядок: copy → opA(INV) → FIR[n]=0 → fold×2 → zero[2049..] → opB(FWD)
(FIR[n]=0 стоит ПОСЛЕ opA, обнуляет временной отсчёт t[N/2], не вход!)
- В модели убрать h[-1]=0 перед irfft (Найквост входа НЕ обнулялся).
```