From 0bc8427cd7e4d0259e3380568394538c98d14990 Mon Sep 17 00:00:00 2001 From: Matiq Date: Mon, 24 Aug 2026 22:00:31 +0300 Subject: [PATCH] =?UTF-8?q?24s:=20APPLIED=20LAW=20DIRECT=20=E2=80=94=20cut?= =?UTF-8?q?=5FdB=3D3.2193*ln1p(lvl/0.4927)+0.54,=20rms=200.016dB;=20audio?= =?UTF-8?q?=3D=3Dexp(deep=20scratch)=20proven=20both=20tones;=20buffer=20F?= =?UTF-8?q?IR=20is=20intermediate=20(min-phase=20packed);=20RT=5FVLAW=20v3?= =?UTF-8?q?=209.47/11.16;=20STFT=20layer=20is=20remaining=20-0.85dB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dsp/framed_model.cpp | 8 +++++--- handoff/NOTES_LEVEL.md | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/dsp/framed_model.cpp b/dsp/framed_model.cpp index edc4fd9..e30031f 100644 --- a/dsp/framed_model.cpp +++ b/dsp/framed_model.cpp @@ -168,9 +168,11 @@ static void process_band_structural( } } for (size_t k2 = 0; k2 < nbin; k2++) { - double cs = 1.729 * std::log1p(raw_level[k2] / 0.3824) - + (delta_mark[k2] ? 4.177 : 0.0); - band_level[k2] = static_cast(std::pow(10.0, -1.79 * cs / 20.0)); + // Applied-stage law (NOTES 24s): direct fit of deep-scratch vs lvl. + double cs = 3.2193 * std::log1p(raw_level[k2] / 0.4927) + + 0.5423 + + (delta_mark[k2] ? (7.46 - 0.5423) : 0.0); + band_level[k2] = static_cast(std::pow(10.0, -cs / 20.0)); } frame_dbg_ctr++; } else diff --git a/handoff/NOTES_LEVEL.md b/handoff/NOTES_LEVEL.md index af28943..b2edacd 100644 --- a/handoff/NOTES_LEVEL.md +++ b/handoff/NOTES_LEVEL.md @@ -3324,3 +3324,40 @@ rendersnap2 v5 (SLOTS+768), patchparam.py — рабочий правщик VST- вещественным спектром) — замкнёт путь преобразования буфер⇒фильтр. 2. После этого: bit-exact репликация применения станет механической. 3. Параллельно: Δ/q/sens по датасетам (mega_curves.pkl). + +## ============ UPDATE 2026-08-24s: ПРИМЕНЁННЫЙ ЗАКОН ПРЯМО (rms 0.016 дБ); АУДИО = exp(глубокого scratch); RT_VLAW v3 ============ + +### Развязка объектов (главная путаница раундов устранена) +Для deep-кадра multi4-ph063 одновременно: +``` +exp(scratch)[43]=0.320 [171]=0.267 ↔ аудио 0.305 / 0.257 ✓✓ +FIR-буфер [43]=0.528 [171]=0.475 ← промежуточное представление +``` +⇒ **АУДИО = exp(глубокого scratch) НАПРЯМУЮ** (оба тона!). Буферные состояния +и все γ₀-соотношения — внутренняя кухня тракта построения (мин.-фазовая +упаковка exp(s−iH(s)) подтверждена на re/im ±1%), для транскрипции НЕ нужны. +Применение = побиновное умножение кадра на ВЕЩЕСТВЕННУЮ маску exp(s_deep). + +### ПРИМЕНЁННЫЙ ЗАКОН (центр, 8 уровней драйва): +``` +cut_dB(b) = 3.2193 · ln(1 + lvl_raw(b)/0.4927) + 0.5423 rms 0.016 дБ +скирт-офсет (второй пик): +7.46 − 0.54 ≈ +6.92 дБ сверху (глуб-домен, +согласован с ×γ₀ старого 4.18) +``` +Контроль lvl=8.85 → 10.02 vs реф 10.32 (зазор 0.30 — фаза адаптива). + +### RT_VLAW v3 (константы применённой стадии напрямую): +dual_b1q_0.5: **9.47 / 11.16** vs реф 10.32 / 11.82 (было 9.32/11.58). +Остаток −0.85/−0.66 дБ = СЛОЙ STFT (усреднение по лепестку, диагноз 24m-2) +— следующий кандидат на разбор: параметры окна/hop нашего render48k против +движка {16384,8192}. + +### Формулировки для транскрипции (итог раунда) +``` +lvl_raw(b) = am(b)/res(b)·scale (наш детектор-фронтенд ✓) +cut_D(b) = 3.2193·ln1p(lvl/0.4927)+0.54 [+6.92 у вторых пиков] +mask = 10^(−cut_D/20) (вещественная!) +применение = per-bin multiply кадра +``` +Открыто: параметризация (α=3.22, β=0.49, Δ) по q/sens; слой STFT; +мин.-фазовая упаковка буфера как объект декодера ops A–D.