roadmap: reflect P0-P2 (tables/fftconv/leveltrack/mask-canon) + exact estimate of remaining code (P1.5-P5, ~60% left)
This commit is contained in:
+25
-6
@@ -12,16 +12,22 @@
|
|||||||
|
|
||||||
## Текущий статус (2026-08-19)
|
## Текущий статус (2026-08-19)
|
||||||
|
|
||||||
- **Статический декомп DSP-ядра — закрыт (~90%)**: twin-резонатор, генератор case8,
|
- **Статический декомп DSP-ядра — закрыт (~95%)**: twin-резонатор, генератор case8,
|
||||||
level-path (0x530d30/0x529fe0), LUT-кривая (FUN_180563440), IIR-трекеры (FUN_180563ce0),
|
level-path (0x530d30/0x529fe0), LUT-кривая (FUN_180563440), IIR-трекеры (FUN_180563ce0),
|
||||||
FFT-conv (0x535a70) декодированы; `.dis` в `handoff/nls_dasm/`. Остаток — runtime-значения
|
FFT-conv (0x535a70), main render-loop (FUN_18052e260) декодированы; `.dis` в `handoff/nls_dasm/`.
|
||||||
(окно 0x540658, sens-источник, IIR update-loop).
|
Остаток — 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,
|
- **Численная модель = 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)`.
|
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**
|
- **Честная тримнутая метрика** (длина выхода = длина входа): 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**.
|
(q0.1/q10 идеальны, боттлнек q1@2000=−0.71); joint free-knot LUT (B.15) → **dual mean≈0.027 dB**.
|
||||||
- **Цель bit-exact (Phase C) — в работе**: twin-транскрипция в `dsp/` готова, порт
|
- **Цель bit-exact (Phase C) — в работе**: twin-транскрипция в `dsp/` готова и проходит
|
||||||
res_power/Q-dep-rp/LUT — TODO.
|
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.
|
||||||
- **ВАЖНО про метрику**: ранние записи "mean=0.160/0.144" считались на выходе НЕтримнутой
|
- **ВАЖНО про метрику**: ранние записи "mean=0.160/0.144" считались на выходе НЕтримнутой
|
||||||
длины (`nfr*HOP+N`) и были артефактом; честный базлайн для scalar `rp=0.0169` = **0.280**.
|
длины (`nfr*HOP+N`) и были артефактом; честный базлайн для scalar `rp=0.0169` = **0.280**.
|
||||||
Все числа в этом файле — на ТРИМНУТОЙ метрике.
|
Все числа в этом файле — на ТРИМНУТОЙ метрике.
|
||||||
@@ -58,7 +64,20 @@ gain = max(1 - C, eps) * res_k**rp # rp = rp0 * Q**drp (res_power)
|
|||||||
- **Фаза B (численная модель)** — пройдена до B.15: от B.10 (rmse 0.109 dB) до full frame-рендера
|
- **Фаза B (численная модель)** — пройдена до B.15: от B.10 (rmse 0.109 dB) до full frame-рендера
|
||||||
Q-dep rp (0.175) и joint free-knot LUT (dual 0.027). Канон — `framed_render.py`.
|
Q-dep rp (0.175) и joint free-knot LUT (dual 0.027). Канон — `framed_render.py`.
|
||||||
- **Фаза C (C++ bit-exact)** — in progress: `dsp/twin.*` готов и проходит float-parity (1.27e-5);
|
- **Фаза C (C++ bit-exact)** — in progress: `dsp/twin.*` готов и проходит float-parity (1.27e-5);
|
||||||
остальное построено, но res_power/Q-dep-rp/LUT/verify_bit_exact — TODO.
|
`dsp/{tables_data, fftconv, leveltrack}.cpp` + `dsp_ctx.hpp` готовы (P1-P2 структурно);
|
||||||
|
`verify_bit_exact.py` даёт базлайн (все DIFF — ожидаемо до подключения живой маски).
|
||||||
|
Оставшийся код по фазам:
|
||||||
|
|
||||||
|
| Фаза | Компонент | Статус |
|
||||||
|
|---|---|---|
|
||||||
|
| P1.5 | live-коэффициенты level-tracker A[] + скаляры RPP | TODO (нужен live-capture / дизасм FUN_18052d650) |
|
||||||
|
| P2.5 | twin-mask factory FUN_18056e3e0 (полн.) + mask-accum 0x5407c8 | TODO (структурный фрагмент есть) |
|
||||||
|
| P3 | бит-экзактная base-CRT FFT (диспетчер 0x535a70) | TODO (главный риск) |
|
||||||
|
| P4 | render-loop 52e260 + res_power/Q-dep-rp порт + связка mask→FFT-conv | TODO (структура известна) |
|
||||||
|
| P5 | стерео M8 (link/balance/LR-vs-MS) + multiband combine 5316e0 + writer | TODO (в скоупе, не начат) |
|
||||||
|
|
||||||
|
Оценка объёма оставшегося кода: ~60% (против ~40% готовых) — крупнейшие куски P3 (FFT bit-exact)
|
||||||
|
и P5 (стерео M8); структурно всё размаплено, остаток — точные вычисления и живые константы.
|
||||||
|
|
||||||
## Ключевые находки (итог)
|
## Ключевые находки (итог)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user