readme: sync to 22i — P5 status, floor blend*ln10/20, Step 7 refuted, detector front-end priority, new tooling
This commit is contained in:
@@ -10,34 +10,54 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Статус (P4, 2026-08-20)
|
## Статус (P5, 2026-08-22)
|
||||||
|
|
||||||
**Цель — bit-exact реверс.** Декомпиляция DSP-ядра закрыта (~95%): twin-резонатор,
|
**Цель — bit-exact реверс.** Декомпиляция DSP-ядра закрыта (~95%): twin-резонатор,
|
||||||
генератор case8, level-path, LUT-кривая (FUN_180563440/563a60), mask-apply
|
генератор case8, level-path, mask-apply (FUN_180529fe0), FFT-conv — расшифрованы;
|
||||||
(FUN_180529fe0), FFT-conv — всё расшифровано; дизассемблы в `handoff/nls_dasm/`.
|
дизассемблы в `handoff/nls_dasm/` (~140).
|
||||||
|
|
||||||
**Активный канон — C++ `FramedDetector`** (`dsp/framed_model.cpp`): точная mask-apply
|
**Активный канон — C++ `FramedDetector`** (`dsp/framed_model.cpp`): структурная цепь
|
||||||
цепь (не эмпирическая подгонка):
|
|
||||||
```
|
```
|
||||||
level=am*res*scale -> IIR1/IIR2 leaky -> mask=exp2(-mask)*blend -> combine/acc
|
level=am*res*scale -> IIR1/IIR2 leaky -> mask=exp2(-level)*blend -> combine/acc
|
||||||
-> warp(mask*=0x540768, *=warp) -> IIR3x2 -> dry/wet -> FFT-conv
|
-> warp(mask*=0x540768, *=warp) -> IIR3x2 -> dry/wet -> FFT-conv
|
||||||
```
|
```
|
||||||
- **bigkernel 0x26b820 = векторизованный exp2**; семантика залочена (`mask=exp2(-level)*blend`).
|
|
||||||
- **Level-tracker = би-направленный leaky-IIR** `y=A[i]·acc+B[i]·x` (B=1−A), live-таблицы
|
- **Level-tracker = би-направленный leaky-IIR** `y=A[i]·acc+B[i]·x` (B=1−A), live-таблицы
|
||||||
в `dsp/rt_mask_tables.{hpp,cpp}`, `dsp/rt_weights.{hpp,cpp}`.
|
в `dsp/rt_mask_tables.{hpp,cpp}`, `dsp/rt_weights.{hpp,cpp}`.
|
||||||
- **Результаты**: t1kq err **−0.43 dB** (level_scale=600); comb per-tone err ≤6.4 dB.
|
- **Корпус (62 случая)**: bridge mean 1.594 dB; структурная цепь TOTAL 2.286,
|
||||||
|
но comb **6.12** и res **0.44** — лучше bridge.
|
||||||
|
|
||||||
|
### Главное за 2026-08-21…22 (сессии 21a–22i)
|
||||||
|
|
||||||
|
1. **«LUT-кривая» FUN_180563440/563a60 — GUI-only!** Весь кластер кривых питается от
|
||||||
|
GUI-timer vtables; аудио-метод FUN_180529fe0 BandConfig не читает (22b). Live BandConfig
|
||||||
|
у всех конфигов одинаковый: A=−24/B=28/γ=1. LUT-константы в модели помечены EMPIRICAL.
|
||||||
|
2. **Пол редукции найден живьём и решён алгебраически** (22d/e): hot-тон упирается в жёсткий
|
||||||
|
пол gain=−20.72 dB = `20·log10(blend·ln10/20)` с точностью 0.0055 dB;
|
||||||
|
`floor_dB(sens) ≈ −18.78 − (sens−6)/3` (якорь sens6 = ln10/20 ровно).
|
||||||
|
3. **Разрыв локализован в детекторном фронте** (22g/i): модель теряет ×2.8 уровня на
|
||||||
|
изолированных пиках (lvl_raw 3.01 → 1.06 после IIR1-разведения), реальный плагин
|
||||||
|
доводит пост-IIR lvl до ~3.12. Не форма кривой — амплитудная цепочка am/res/scale.
|
||||||
|
4. **Инфраструктура**: официальный параметр-мост REAPER (`setparam.lua`/`dump_params.lua`),
|
||||||
|
XML `<PARAM>` в RPP = декоративная копия; live-capture BandConfig (`scripts/step7_capture.py`);
|
||||||
|
env-солверы констант (`RT_LUT_A/B/G/MULT`, `RT_LUT_OFF`, `RT_LVL_CAP`).
|
||||||
|
5. Оффлайн-гипотезы Phase B (pooling/temporal/scalar-ρ) — все опровергнуты (22a);
|
||||||
|
clipping-теория пола опровергнута (float-домен, 22g); mix = чистый dry/wet кроссфейд.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Канон сборки и рендера:
|
# Канон сборки и рендера:
|
||||||
cmake -S dsp -B dsp/build && cmake --build dsp/build --target framed_test
|
cmake -S dsp -B dsp/build && cmake --build dsp/build --target framed_test render48k
|
||||||
./dsp/build/framed_test /home/m/soothe-bt/tone1kq.wav /tmp/o.wav 678.7611083984375,0.99999785,12,600
|
./dsp/build/render48k /home/m/soothe-bt/tone1kq.wav /tmp/o48.wav 1000,0.99999785,12
|
||||||
|
python3 scripts/corpus_structural.py --vs-bridge scripts/baseline_bridge.json
|
||||||
```
|
```
|
||||||
Детальная метрика и история — в `AGENTS.md`, `roadmap.md`, `handoff/NOTES_LEVEL.md`.
|
Детальная метрика и история — в `AGENTS.md`, `BITEXACT_PLAN.md`, `handoff/NOTES_LEVEL.md`
|
||||||
|
(апдейты 20j…22i).
|
||||||
|
|
||||||
### Открытые bit-exact пробелы
|
### Открытые bit-exact пробелы
|
||||||
PRNG-пролог (LCG→fVar30), FFT-conv сглаживание, бит-экзактный exp2, точная обратная
|
**Приоритет №1 — детекторный фронт**: амплитудная нормировка am, форма res_k, сила
|
||||||
связь combine/acc `0x5407c8`, и SR-mismatch (внутренний DSP 48000/N=4096 против
|
IIR1/2 вдоль частоты (модель теряет уровень на пиках). Далее: PRNG-пролог (LCG→fVar30),
|
||||||
хоста 44100/2048). Полный список — в `AGENTS.md` и `NOTES_LEVEL.md`.
|
FFT-conv сглаживание, бит-экзактный exp2, combine/acc консюмер, SR-mismatch
|
||||||
|
(внутренний DSP 48000/N=4096 против хоста). Полный список — `AGENTS.md`, `BITEXACT_PLAN.md`
|
||||||
|
(Шаг 9), `NOTES_LEVEL.md`.
|
||||||
|
|
||||||
> Исторический блок (поведенческая/численная модель B.1…B.15, `framed_render.py`,
|
> Исторический блок (поведенческая/численная модель B.1…B.15, `framed_render.py`,
|
||||||
> Pchip LUT, res_power) — см. `roadmap.md`; самодостаточен как справочник, но не канон.
|
> Pchip LUT, res_power) — см. `roadmap.md`; самодостаточен как справочник, но не канон.
|
||||||
@@ -103,6 +123,9 @@ re-tools/
|
|||||||
│ patchparam.py, addfx.lua
|
│ patchparam.py, addfx.lua
|
||||||
├── Живая трассировка (yabridge-host + Frida): dump_soothe.py, rtall/rtscan/
|
├── Живая трассировка (yabridge-host + Frida): dump_soothe.py, rtall/rtscan/
|
||||||
│ rtsig/rttbl/rtver/rtone/rtwin/rtdeep*.py, probe.py, procdump.py
|
│ rtsig/rttbl/rtver/rtone/rtwin/rtdeep*.py, probe.py, procdump.py
|
||||||
|
├── Параметр-мост и live-capture: setparam.lua, dump_params.lua,
|
||||||
|
│ play.lua, scripts/step7_capture.py, scripts/rpp_setparam.py,
|
||||||
|
│ scripts/corpus{,_structural}.py, scripts/phaseA/B*.py
|
||||||
└── summary.md, notes_giant_fft.md
|
└── summary.md, notes_giant_fft.md
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -166,12 +189,13 @@ gain = max(1 - C, eps) * res_k**rp # rp = rp0 * Q**drp (res_power)
|
|||||||
|
|
||||||
## Чего не хватает / следующие шаги (bit-exact)
|
## Чего не хватает / следующие шаги (bit-exact)
|
||||||
|
|
||||||
Текущий фокус — C++ `FramedDetector` (`dsp/framed_model.cpp`). Открытое (см. AGENTS.md,
|
Текущий фокус — **детекторный фронт** (Шаг 9 плана): амплитудная нормировка am,
|
||||||
NOTES_LEVEL.md §2026-08-20m):
|
форма res_k, сила IIR1/2 вдоль частоты — модель теряет ×2.8 уровня на изолированных
|
||||||
|
пиках относительно реального плагина (NOTES_LEVEL 22g/22i). Открытое:
|
||||||
|
- **Детекторный фронт** (приоритет №1, Шаг 9) — см. выше.
|
||||||
- **PRNG-пролог** FUN_180529fe0 (LCG+LUT → fVar30) — per-frame рандомизация scale/dry-wet.
|
- **PRNG-пролог** FUN_180529fe0 (LCG+LUT → fVar30) — per-frame рандомизация scale/dry-wet.
|
||||||
- **FFT-conv** (0x535a70) — сглаживание маски перед FIR.
|
- **FFT-conv** (0x535a70) — сглаживание маски перед FIR (P3).
|
||||||
- **Бит-экзактный exp2** (0x26b820) вместо `std::exp2`.
|
- **Бит-экзактный exp2** (0x26b820) вместо `std::exp2`.
|
||||||
- Точная обратная связь combine/аккумулятора `0x5407c8`.
|
- Точная обратная связь combine/аккумулятора `0x5407c8` (консюмер не найден).
|
||||||
- **SR-mismatch**: внутренний DSP 48000/N=4096 против хоста 44100/2048; twin per-bin IIR
|
- **SR-mismatch**: внутренний DSP 48000/N=4096 против хоста 44100/2048.
|
||||||
(FUN_180535880 tail-call) статически невидим.
|
- Стерео-путь M8 (link/balance/LR-vs-MS), межполосное суммирование (Шаг 8).
|
||||||
- Стерео-путь M8 (link/balance/LR-vs-MS), multiband combine 5316e0.
|
|
||||||
Reference in New Issue
Block a user