plan: sync to 22e — Step 7 refuted, floor blend*ln10/20 solved, new priority Step 9 (floor mechanism)
This commit is contained in:
+59
-13
@@ -5,6 +5,20 @@ comb 10 dB). Bit-exact ДОСТИЖИМ (F0 gate: плагин байт-дете
|
|||||||
воспроизводит реальный DSP-путь. Этот документ — план, как туда дойти, и точка отсчёта
|
воспроизводит реальный DSP-путь. Этот документ — план, как туда дойти, и точка отсчёта
|
||||||
для любой будущей сессии. **Читать вместе с `AGENTS.md` и `handoff/NOTES_LEVEL.md`.**
|
для любой будущей сессии. **Читать вместе с `AGENTS.md` и `handoff/NOTES_LEVEL.md`.**
|
||||||
|
|
||||||
|
> **ОБНОВЛЕНИЕ 2026-08-22 (сессии 22a–22e):**
|
||||||
|
> 1. Phase-B оффлайн-гипотезы (pooling/temporal/scalar-ρ) — все ОПРОВЕРГНУТЫ (22a).
|
||||||
|
> 2. Шаг 7 выполнен → премиса опровергнута: BandConfig A/B/γ = −24/28/1 у ВСЕХ конфигов,
|
||||||
|
> но это GUI-timer кривые; аудио их не читает (22b). LUT-константы структурной цепи
|
||||||
|
> помечены EMPIRICAL.
|
||||||
|
> 3. Насыщение редукции НАЙДЕНО ЖИВЬЁМ и РЕШЕНО АЛГЕБРАИЧЕСКИ (22d/e):
|
||||||
|
> hot-тон упирается в ЖЁСТКИЙ пол gain=**−20.72 dB**, pin ≥24 dB драйва;
|
||||||
|
> `gain_floor = 20·log10(blend·ln10/20)` — совпадение 0.0055 dB!
|
||||||
|
> Константа ln10/20=0.11513 @0x1824c3cd4, аудио-юзеры FUN_180529c60/52baa0/bad0/bba0.
|
||||||
|
> 4. Инфраструктура: официальный параметр-мост (`setparam.lua`), XML `<PARAM>` в RPP =
|
||||||
|
> декоративная копия (не источник стейта); depth=±18dB/trim=±24dB; WAV bext/junk
|
||||||
|
> грабли подтверждены живьём.
|
||||||
|
> Новый приоритет №1 — Шаг 9 (ниже).
|
||||||
|
|
||||||
Цель фазы C (bit-exact): воспроизвести `FramedDetector` (= fn `FUN_180529fe0` mono-path)
|
Цель фазы C (bit-exact): воспроизвести `FramedDetector` (= fn `FUN_180529fe0` mono-path)
|
||||||
настолько точно, что `verify_bit_exact.py` даёт побайтовое совпадение на рендерах
|
настолько точно, что `verify_bit_exact.py` даёт побайтовое совпадение на рендерах
|
||||||
(`t1kq_*`, `dual_*`, `comb_*`). Ниже — конкретный порядок, что и зачем.
|
(`t1kq_*`, `dual_*`, `comb_*`). Ниже — конкретный порядок, что и зачем.
|
||||||
@@ -43,7 +57,14 @@ comb 10 dB). Bit-exact ДОСТИЖИМ (F0 gate: плагин байт-дете
|
|||||||
на однополосных t1kq/t1k/al и проваливает dual@500 (константный −6.7 dB при всех q —
|
на однополосных t1kq/t1k/al и проваливает dual@500 (константный −6.7 dB при всех q —
|
||||||
отсутствие НАСЫЩЕНИЯ редукции: реальная кривая упирается в C_max≈0.70, exp2(−lvl) не
|
отсутствие НАСЫЩЕНИЯ редукции: реальная кривая упирается в C_max≈0.70, exp2(−lvl) не
|
||||||
ограничен). Свип γ×MULT подтвердил: текущий оптимум (0.344/4.2) лучший, слепая
|
ограничен). Свип γ×MULT подтвердил: текущий оптимум (0.344/4.2) лучший, слепая
|
||||||
подкрутка исчерпана — проблема в ФОРМЕ кривой, см. Шаг 7 / bigkernel-вход.
|
подкрутка исчерпана — проблема в ФОРМЕ кривой.
|
||||||
|
|
||||||
|
> **КОРРЕКЦИЯ 22d/e**: «насыщение C_max≈0.70» старой модели = артефакт placeholder
|
||||||
|
> MULT=4.2 / Pchip cap 0.667, НЕ свойство плагина: живой плагин на ±24 dB trim
|
||||||
|
> редуцирует БЕЗ потолка (R 1.4→15.7 dB), а на горячем тоне (+6 dBFS) упирается в
|
||||||
|
> ЖЁСТКИЙ пол gain=−20.72 dB = **blend·ln10/20 точно** (Δ0.0055 dB). Механизм пола —
|
||||||
|
> в нетранскрибированном куске аудио-пути (след: FUN_180529c60, ln10/20-фактор),
|
||||||
|
> см. Шаг 9.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -162,6 +183,25 @@ mean кап-нагрузки al/t1k ≤ 0.3 dB.
|
|||||||
межполосного суммирования масок/acc ещё не локализована (см. пере-скоуп Шага 2).
|
межполосного суммирования масок/acc ещё не локализована (см. пере-скоуп Шага 2).
|
||||||
Критерий: `verify_bit_exact.py` — побайтовое совпадение данных-чанка WAV.
|
Критерий: `verify_bit_exact.py` — побайтовое совпадение данных-чанка WAV.
|
||||||
|
|
||||||
|
### Шаг 9 — Механизм пола редукции blend·ln10/20 (НОВЫЙ ПРИОРИТЕТ №1, 2026-08-22)
|
||||||
|
Живой факт (22d): hot-тон упирается в ЖЁСТКИЙ пол gain=−20.72 dB = `20·log10(0.8·ln10/20)`
|
||||||
|
с точностью 0.0055 dB; колено между L=−6..0 (trim-шкала); холодный тон на ±24 trim
|
||||||
|
пола НЕ достигает. t-clamp в транскрибированной LUT НЕ даёт pin (grid MULT≤12/B≥18 —
|
||||||
|
NOTES 22e) ⇒ пол живёт в другом куске аудио-пути.
|
||||||
|
|
||||||
|
9a. Декодировать `FUN_180529c60` полностью: фактор
|
||||||
|
`expf((p87c·30 − 90)·ln10/20)` на band-буферы 0x540678[band] через
|
||||||
|
`FUN_1804d56b0` (f_529c60.dis:94-101) — что именно считает 1804d56b0 и куда
|
||||||
|
идёт произведение (это vtbl-метод рядом с аудио-entry).
|
||||||
|
9b. Найти сайт клампа: grep ln10/20-константы (0x1824c3cd4) по остальным юзерам
|
||||||
|
(18052baa0/bad0/bba0) и по f529fe0.dis/f_52d650.dis на предмет floor/clamp маски.
|
||||||
|
9c. Проверка предсказаний модели пола: (i) floor_gain(mix) сдвигается как
|
||||||
|
20log10(blend′/0.8); (ii) пол частотно-зависит только через blend(freqaxis)
|
||||||
|
при mix<100; (iii) knee-позиция от sens/depth. Рендеры через setparam.lua.
|
||||||
|
9d. Порт клампа в `process_band_structural` → smoke → корпус с гейтом
|
||||||
|
(`corpus_structural.py --vs-bridge`; цель: dual@500 уходит с −6.7, res/dual/comb ≥ bridge).
|
||||||
|
Критерий: воспроизвести pin −20.72 dB в рендере модели + отсутствие регресса групп.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. Что НЕ делать (подводные камни из дока)
|
## 2. Что НЕ делать (подводные камни из дока)
|
||||||
@@ -174,6 +214,11 @@ mean кап-нагрузки al/t1k ≤ 0.3 dB.
|
|||||||
Bridge — только запасной вариант, пока структурная цепочка не пройдёт Шаг 1-2.
|
Bridge — только запасной вариант, пока структурная цепочка не пройдёт Шаг 1-2.
|
||||||
- **НЕ использовать битые 24-bit загрузчики** — метрика `render_parity.py:43` правильная
|
- **НЕ использовать битые 24-bit загрузчики** — метрика `render_parity.py:43` правильная
|
||||||
(x>=0x800000 => x−0x1000000). В тестовых скриптах использовать тот же код.
|
(x>=0x800000 => x−0x1000000). В тестовых скриптах использовать тот же код.
|
||||||
|
- **НЕ редактировать XML `<PARAM>` в RPP ради изменения звука** — это декоративная
|
||||||
|
UI-копия, плагин берёт стейт из бинарной части чанка (NOTES 22c). Только мост
|
||||||
|
`setparam.lua`.
|
||||||
|
- **НЕ читать WAV наивным readframes+reshape** — REAPER пишет bext/junk-чанки; только
|
||||||
|
каноничный `render_parity.load` (иначе фантомный шум/клиппинг, NOTES 22c).
|
||||||
|
|
||||||
## 3. Риски и время
|
## 3. Риски и время
|
||||||
|
|
||||||
@@ -187,17 +232,18 @@ mean кап-нагрузки al/t1k ≤ 0.3 dB.
|
|||||||
|
|
||||||
## 4. Точка входа для следующей сессии
|
## 4. Точка входа для следующей сессии
|
||||||
|
|
||||||
1. Прочитать `AGENTS.md`, этот `BITEXACT_PLAN.md`, `handoff/NOTES_LEVEL.md:820-840`
|
1. Прочитать `AGENTS.md`, этот `BITEXACT_PLAN.md`, `handoff/NOTES_LEVEL.md`
|
||||||
(точная цепочка) + апдейты 20j/21a/21b/21c (IIR3 bidi, combine-семантика,
|
апдейты **20j / 21a-21e / 22a-22e** (цепочка, Phase-B негативы, Шаг 7 опровержение,
|
||||||
структурный корпус) и `dsp/rt_mask_tables.hpp` / `dsp/rt_weights.hpp` (live-таблицы).
|
параметр-мост, пол blend·ln10/20) и `dsp/rt_mask_tables.hpp` / `dsp/rt_weights.hpp`.
|
||||||
2. Собрать: `cmake --build dsp/build --target render48k framed_test`.
|
2. Собрать: `cmake --build dsp/build --target render48k framed_test`.
|
||||||
3. Бейзлайны: `python3 scripts/corpus.py` (bridge, 62 случая, §0) и
|
3. Бейзлайны: `python3 scripts/corpus.py` (bridge, 62 случая, §0) и
|
||||||
`python3 scripts/corpus_structural.py --vs-bridge scripts/baseline_bridge.json`
|
`python3 scripts/corpus_structural.py --vs-bridge scripts/baseline_bridge.json`.
|
||||||
(структурная цепь на внутренней сетке).
|
4. ПРИОРИТЕТ №1 — **Шаг 9** (пол редукции):
|
||||||
4. ПРИОРИТЕТ (закрытие разрыва формы кривой редукции):
|
a. 9a: полный декод FUN_180529c60 + FUN_1804d56b0 (f_529c60.dis готов).
|
||||||
a. СТАТИКА: hunt clamp/насыщения в level-пути — `vminpd/vmaxpd/minsd/maxsd` в
|
b. 9b: grep 0x1824c3cd4 по аудио-функциям; hunt клампа маски.
|
||||||
FUN_18052d650 (IIR1), инлайн IIR2, scale-шаг; семантика FUN_180323f20 и
|
c. 9c: предсказания пола — рендеры mix/sens через `setparam.lua` (мост готов,
|
||||||
depth-скаляра 0x540888. Если clamp найден — транскрибировать, smoke + корпус.
|
XML-правки стейта НЕ работают — NOTES 22c).
|
||||||
b. Если статика исчерпана — Шаг 7: live-захват BandConfig ctx+0x188 по
|
d. 9d: порт + корпус с гейтом.
|
||||||
NOTES_CAPTURE.md; сначала разрешить противоречие A/B/γ между сессиями
|
5. Инструменты сессии: `setparam.lua`/`dump_params.lua` (параметр-мост),
|
||||||
(render_long/t1kq: −24/28/1 vs fit по точкам рефов: −13.78/68.29/0.344).
|
`scripts/rpp_setparam.py` (только формат-хирургия!), `RT_LUT_*` env в
|
||||||
|
framed_model.cpp (солвер констант), `scripts/step7_capture.py` (live BandConfig).
|
||||||
|
|||||||
Reference in New Issue
Block a user