docs: AGENTS.md + refresh README/roadmap/summary/SESSION_HANDOFF to P4 canon; rm empty logs
- AGENTS.md: canonical build/test commands, honest trimmed tone metric, current bit-exact state (mask-apply chain), open gaps (PRNG/FFT-conv/exp2/SR-mismatch). - README.md: status moved to P4 (C++ FramedDetector canon, framed_test), historical B.1..B.15 numerical model demoted to <details>; structure/doc table updated. - roadmap.md: P4 phase marked progress, P4.1/P4.2/P4.3 milestones, top status refresh. - summary.md: marked historical (behavioral v4). - SESSION_HANDOFF.md: fixed stale "NOT DECODED" (now decoded), copy note done. - Removed empty tmp_spec.txt/giant3.txt and untracked .log/__pycache__ clutter.
This commit is contained in:
+22
-22
@@ -10,29 +10,25 @@
|
||||
(WAV16 → рендер → WAV24), `dsp_notes.md` (карта функция↔смысл, константы, LUT),
|
||||
`verify_bit_exact.py` (прогон всех свипов, побайтовое сравнение).
|
||||
|
||||
## Текущий статус (2026-08-19)
|
||||
## Текущий статус (2026-08-20, P4)
|
||||
|
||||
- **Статический декомп DSP-ядра — закрыт (~95%)**: twin-резонатор, генератор case8,
|
||||
level-path (0x530d30/0x529fe0), LUT-кривая (FUN_180563440), IIR-трекеры (FUN_180563ce0),
|
||||
level-path (0x529fe0/0x563440/0x563a60), mask-apply (FUN_180529fe0 mono-path), IIR-трекеры,
|
||||
FFT-conv (0x535a70), main render-loop (FUN_18052e260) декодированы; `.dis` в `handoff/nls_dasm/`.
|
||||
Остаток — runtime-значения (коэффициенты IIR level-tracker 0x4c0528/0x3c0510/0x2c04f8,
|
||||
скаляры 0x540870/874/87c/888/88c из RPP, цель P1.5 live-capture).
|
||||
- **Численная модель = frame-рендер `framed_render.py`** (STFT N=2048, hop=512, sqrt-Hann,
|
||||
twin-env tatt=11ms/trel=80ms): `C(f)=G·LUT(xv)+W·warp(f)^A`, `gain=(1−C)·res^(rp0·Q^drp)`.
|
||||
- **Честная тримнутая метрика** (длина выхода = длина входа): Q-dep rp → **mean=0.175 dB**
|
||||
(q0.1/q10 идеальны, боттлнек q1@2000=−0.71); joint free-knot LUT (B.15) → **dual mean≈0.027 dB**.
|
||||
- **Канон — C++ `FramedDetector`** (`dsp/framed_model.cpp`), реальная mask-цепь отвоевана от
|
||||
эмпирики: `level→scale→IIR1/2 leaky→exp2(-mask)·blend→combine/acc→dual-warp→IIR3×2→dry/wet→FFT-conv`.
|
||||
Live-таблицы в `dsp/rt_mask_tables.{hpp,cpp}`, `rt_weights.{hpp,cpp}`.
|
||||
- **Результаты**: t1kq err **−0.43 dB** (level_scale=600); comb per-tone err ≤6.4 dB.
|
||||
- **Честная тримнутая метрика** (длина выхода = длина входа) — см. AGENTS.md.
|
||||
- **Цель bit-exact (Phase C) — в работе**: twin-транскрипция в `dsp/` готова и проходит
|
||||
float-parity (1.27e-5); **живые таблицы встроены** (P1.1, tables_check ALL OK);
|
||||
**FFT-conv расшифрован** (P1.2: f_52d990 = memcpy, N=4096) и **интегрирован** (P1.3 fftconv.cpp);
|
||||
**маска-канон подтверждена** (P1.4, FUN_180529fe0) и **level-tracker UPDATE реализован** (P2,
|
||||
leveltrack.cpp). Остаток кода: twin-mask factory (FUN_18056e3e0), mask-accumulator 0x5407c8,
|
||||
render-loop 52e260, бит-экзактная base-CRT FFT, стерео M8, multiband combine 5316e0,
|
||||
+ live-коэффициенты (P1.5). res_power/Q-dep-rp порт в C++ — ещё TODO.
|
||||
- **Бит-экзактная C++ транскрипция (Phase C)**: twin (float-parity 1.27e-5, tables_check ALL OK),
|
||||
FFT-conv (P1.2/P1.3 fftconv.cpp), маска-канон (P1.4/P2), level-tracker (P2, leveltrack.cpp),
|
||||
LUT (P2.5 levelpath.cpp), mask-apply цепь (P4 framed_model.cpp) — в основном готово.
|
||||
- **ВАЖНО про метрику**: ранние записи "mean=0.160/0.144" считались на выходе НЕтримнутой
|
||||
длины (`nfr*HOP+N`) и были артефактом; честный базлайн для scalar `rp=0.0169` = **0.280**.
|
||||
Все числа в этом файле — на ТРИМНУТОЙ метрике.
|
||||
|
||||
## Модель в двух строках
|
||||
## Историческая численная модель (B-фазы; канон теперь — C++ FramedDetector)
|
||||
|
||||
```python
|
||||
xv = log10(A_k / res_k) # A_k = 2|X_k|/wsum (twin-env), res = |2B/A| case8
|
||||
@@ -42,8 +38,8 @@ gain = max(1 - C, eps) * res_k**rp # rp = rp0 * Q**drp (res_power)
|
||||
|
||||
- LUT — Pchip; warp — `0.87·7.942·x/(7.942+x)`, x=f/2000 (аппроксимация runtime-вычисления FUN_180563440);
|
||||
- Q-dep rp: `rp0=0.0275, drp=0.2159` (mean 0.175); B.15 joint-free-knot LUT: G/W/A/rp0/drp =
|
||||
`0.9752/0.3394/1.0222/0.0254/0.2231` (dual mean 0.027).
|
||||
- Запуск канона: `python3 framed_render.py dual`.
|
||||
`0.9752/0.3394/1.0222/0.0254/0.2231` (dual mean 0.027);
|
||||
- Запуск (историч.): `python3 framed_render.py dual`.
|
||||
|
||||
## Статус по фазам
|
||||
|
||||
@@ -74,13 +70,14 @@ gain = max(1 - C, eps) * res_k**rp # rp = rp0 * Q**drp (res_power)
|
||||
| P2 | mask-accumulator combine kernels (8d60/5a20/3c40) | ✅ DONE (levelpath.cpp combine_sub/acc_add/acc_fma) |
|
||||
| P2.5 | twin-mask factory (56e3e0) + band LUT apply (563a60) | ✅ DONE (levelpath.cpp) |
|
||||
| P3 | бит-экзактная base-CRT FFT | ⚠️ partial: архитектура размечена, vlog(ln) транскрибирован; butterfly+shuffle+plan-gen осталось |
|
||||
| P4 | render-loop 52e260 + связка mask→FFT-conv + full pipeline | TODO (структура известна, компоненты готовы) |
|
||||
| P4 | render-loop 52e260 + связка mask→FFT-conv + full pipeline | ✅ **существенно продвинут (2026-08-20)**: mono-path FUN_180529fe0 декодирован, реальная mask-цепь транскрибирована в `framed_model.cpp` (IIR1/2/3 leaky + exp2-bigkernel + dual warp + dry/wet), live-таблицы извлечены (`rt_mask_tables`); t1kq −0.43 dB, comb ≤6.4 dB. Остаток: PRNG-пролог, FFT-conv, бит-экзактный exp2, combine-фидбек, SR-mismatch |
|
||||
| P5 | стерео M8 (link/balance/LR-vs-MS) + multiband combine 5316e0 | TODO (в скоупе, не начат) |
|
||||
|
||||
Обновлённая оценка (2026-08-20): структурно ~65-70% готово — все level-path компоненты
|
||||
(LUT 563440, twin-mask 56e3e0, band LUT 563a60, combine, level-tracker, FFT-conv, vlog)
|
||||
транскрибированы и проверены *_check. Осталось: (а) полная бит-экзактная FFT (butterfly+shuffle+
|
||||
plan-gen — недели), (б) сборка единого pipeline P4 (render-loop + связка), (в) стерео M8 (P5).
|
||||
Обновлённая оценка (2026-08-20): структурно ~75% готово — mask-apply цепь FUN_180529fe0
|
||||
полностью декодирована (scale→IIR1/2→exp2→combine→warp→IIR3→dry/wet→FFT-conv) и перенесена
|
||||
в C++, live-таблицы (IIR A/B, warp, band768, PRNG LUT) извлечены. Осталось: (а) полная
|
||||
бит-экзактная FFT (butterfly+shuffle+plan-gen — недели), (б) PRNG-пролог + FFT-conv +
|
||||
бит-экзактный exp2 для bit-exact калибровки, (в) стерео M8 (P5).
|
||||
|
||||
## Ключевые находки (итог)
|
||||
|
||||
@@ -150,6 +147,9 @@ gain = max(1 - C, eps) * res_k**rp # rp = rp0 * Q**drp (res_power)
|
||||
| B.13 | 08-19 | res_power `gain=(1−C)·res^rp` (500Hz resid решён); декомп 563440/563ce0/529fe0; константы из дампа |
|
||||
| B.14 | 08-19 | **Артефакт-коррекция** (честная тримнутая метрика; базлайн scalar=0.280); Q-dep rp → mean 0.175; 530d30 повторно NEGATIVE (N=2048) |
|
||||
| B.15 | 08-19 | Диагноз LUT-немонотонности → joint free-knot LUT (8 узлов, dual+al_*) → **dual mean≈0.027 dB**; остаток al_* lv24 dC=+0.10 |
|
||||
| P4.1 | 08-20 | Полный декомп mono-path FUN_180529fe0; real mask-цепь в C++ (IIR leaky + acc + live LUT); t1kq err 0.5 dB; `framed_test` |
|
||||
| P4.2 | 08-20 | Live-таблицы извлечены (`rt_mask_tables` IIR A/B, warp, band768, PRNG LUT); bigkernel 0x26b820=exp2 семантика залочена (`exp2(-mask)·blend`) |
|
||||
| P4.3 | 08-20 | Dual-warp шаг 6 транскрибирован (mask·=band768, ·=warp) → comb 500/3000 починены; t1kq −0.43 dB; comb ≤6.4 dB |
|
||||
|
||||
## Риски
|
||||
|
||||
|
||||
Reference in New Issue
Block a user