- handoff/NOTES_LEVEL.md 4413→397 (голова 24mm5+), хвост → handoff/archive/NOTES_LEVEL_2026-08-18_2026-08-23.md - handoff/NOTES_LEVEL_INDEX.md NEW навигатор, handoff/archive/ whitelist .gitignore - SESSION_HANDOFF/summary → archive + редиректы, NOTES_TWIN/NOTES_CAPTURE сжаты - README.md:13 единственный источник TOTAL 1.594/dual 0.193, AGENTS runbook, BITEXACT_PLAN 9→3 шага (каскад 9-19/k-маппинг/Δ)
4.1 KiB
4.1 KiB
Roadmap: bit-exact реверс DSP-ядра oeksound soothe2 (v1.1.2)
Цель
Воспроизвести DSP-путь soothe2 в виде собираемого standalone C++ с побайтово идентичным выходом (bit-exact).
Результат
re-tools/dsp/ — *.cpp/*.h (классы DSP), CMakeLists.txt, harness.cpp (WAV16 → рендер → WAV24), dsp_notes.md (карта функция↔смысл), verify_bit_exact.py.
Статус — см. README.md:13 (единственный источник TOTAL)
Итог 2026-08-28 (24mm14): применение декодировано до формул
mask=10^(−cut_D/20),cut_D=α·ln1p(lvl/β)+c(rms ≤0.016, 3 семейства), слой STFT без синтез-окна, dual-корпус 0.193 dB (канон 3.264). Гейт = bit-exact. Остаток: 3 шагаBITEXACT_PLAN.md:1(каскад 9–19, k-маппинг, Δ-правило). Архив B-фаз ниже свёрнут.
История B-фаз (B.1…P4.3) — свёрнуто, детали → handoff/archive/ + git log
- Статический декомп ~95%: twin, generator case8, level-path (0x529fe0/0x563440/0x563a60), mask-apply, IIR-трекеры, FFT-conv (0x535a70), render-loop FUN_18052e260 —
.disвhandoff/nls_dasm/. - Структурная цепь
dsp/framed_model.cpp::process_band_structural(48k/4096):scale→LUT(level)→IIR1→IIR2→mirror→blend/exp2→combine→dual-warp→IIR3×2→dry/wet; live-таблицыrt_mask_tables. Корпус: comb 6.12 (bridge 10.15), res 0.44. - Численная модель B.10…B.15:
C=g·LUT(xv)+w·warp^a,gain=(1−C)·res^rp, rp=0.0275·Q^0.2159 (mean 0.175), Pchip LUT (dual 0.027). Канон —framed_render.py(исторический). - Фазы P1–P5: twin float-parity 1.27e-5, FFT-conv, leveltrack, LUT, mask-apply — в основном готово; осталось каскад 9–19 + twin/am + Δ.
Ключевые находки (итог, свёрнуто)
- Маска аддитивная
C=g·LUT+w·warp^a(не мультипликация). res_powergain=(1−C)·res^rp— закрывает 500Hz residual.0x530d30дважды NEGATIVE — тилт не оттуда.- LUT — гамма-монотонная
FUN_180563440(Pchip немонотонна). - Константы: SCALE=1/1024, DB_CONV=8.6859, IIR α=0.1, LCG 0x3cdca.
Контракт из manual (soothe2_ManualFAQ.pdf)
| # | Факт | Следствие |
|---|---|---|
| M1 | Soft/Hard меняет всё | mode = препроцессор детектора |
| M2 | Depth ±18, до 60 dB | depthcurve-LUT, clip 60 dB |
| M5 | Attack/Release частотно-зависимы | Env — частотный масштаб |
| M8 | Stereo link/balance/L-R vs M/S | детектор на sum |
| M10 | Банды: 2 cut + 4 general | FilterGraph<float,6,0x400> |
Топология пайплайна (Приложение A, стр.30)
main/sidechain → input trim → analysis (depth/sharpness/selectivity; EQ per-band)
→ stereo apply + balance → ms encode? → processing (M/S) → mix → bypass → output
Журнал вех (свёрнуто)
| Веха | Дата | Суть |
|---|---|---|
| B.1–B.6 | 08-17 | C++ каркас, twin, dispatch, band-структура |
| B.10–B.15 | 08-18…19 | Модели C/LUT, bridge C=g·LUT+w·warp^a (0.236), res_power, dB-parity 0.268 |
| P4.1–P4.3 | 08-20 | Декомп FUN_180529fe0, live-таблицы, dual-warp |
Полный журнал — handoff/NOTES_LEVEL_INDEX.md + git log.
Где лежат детали
README.md:13— актуальный статус (TOTAL).handoff/NOTES_LEVEL.md(живая голова) +handoff/archive/NOTES_LEVEL_2026-08-18_2026-08-23.md— журнал.handoff/BLOCKMAP_529fe0.md— карта метода 9–19.handoff/NOTES_TWIN.md— twin краткая справка.handoff/NOTES_CAPTURE.md— registry heartbeat.notes_giant_fft.md— FFT/twiddle.