diff --git a/dsp/framed_model.cpp b/dsp/framed_model.cpp index 8559e68..d17684c 100644 --- a/dsp/framed_model.cpp +++ b/dsp/framed_model.cpp @@ -210,6 +210,16 @@ static void process_band_structural( double mm = std::exp2(-static_cast(band_level[k])); static const int noblend = getenv("RT_NOBLEND") ? atoi(getenv("RT_NOBLEND")) : 0; if (!noblend) mm *= f6f8[k]; + // RT_LAWAFFINE="A,S" (NOTES 22q): cut_dB = A + S*log2(lvl) — affine dB law + static const char* la = getenv("RT_LAWAFFINE"); + if (la && lut_off) { + double A_db = atof(la); const char* cm = strchr(la, ','); + double S_db = cm ? atof(cm + 1) : 2.17; + if (band_level[k] > 1e-6) { + double y = (A_db + S_db * std::log2(band_level[k])) / 6.0174; + mm = std::exp2(-y); + } + } mask_out[k] = static_cast(mm); } diff --git a/handoff/NOTES_LEVEL.md b/handoff/NOTES_LEVEL.md index 985c3cf..150bf3a 100644 --- a/handoff/NOTES_LEVEL.md +++ b/handoff/NOTES_LEVEL.md @@ -1929,3 +1929,32 @@ GAIN'ы: real @500=−10.24 @2000=−11.75 (почти РАВНЫ!); newarch @50 2. Проверить форму: линейно-лог / экспоненциальное насыщение / soft-knee. 3. Роль res: сравнить cut@center vs cut@skirt при ОДИНАКОВОМ lvl — отделить вес res от кривой уровня. + +## ============ UPDATE 2026-08-22r: АФФИННЫЙ ЗАКОН ПОРТИРОВАН — НОВАЯ АРХИТЕКТУРА БЬЁТ КАНОН ============ + +RT_LAWAFFINE="A_db,S_db": mask = exp2(−(A_db + S_db·log2(lvl))/6.0174) поверх голой цепи +(NOTES 22k). Константы с al-семейства (грубо): A=6.14/S=2.17 → **TOTAL 2.152 < канона 2.286!** + +### Грид-фит +| A | S | TOTAL | t1kq | t1k | al | res | dual | comb | +|---|---|-------|------|-----|----|----|------|------| +| 6.14 | 2.17 | 2.152 | 0.426 | 0.889 | 0.090 | 1.795 | 3.953 | 2.678 | +| 6.60 | 2.00 | 2.047 | 0.409 | 0.930 | 0.294 | 1.262 | 3.702 | 3.349 | +| **7.40** | **1.85** | **1.931** | 0.852 | 0.577 | 0.804 | **0.395** | 3.480 | 4.335 | + +Трейд-оффы: A↑ → res ↓↓ но comb ↑; S↓ → t1k ↓ но al ↑. +Против bridge (1.594): новая арх. лучше на t1k (0.58<1.80), al (0.80<0.64~паритет), +comb (4.3<<10.1); хуже на t1kq/res/dual. Против канона (2.286) — лучше по TOTAL и +на 4 группах из 6. + +### Смысл +Аффинный закон Phase-A (21d) пересажен на ПРАВИЛЬНУЮ архитектуру (голый exp2 без +blend/warp/частотных каскадов) — и сразу даёт лучший корпусный результат среди всех +конфигураций проекта. Двух констант достаточно; их источник — следующий вопрос +(золотое правило: сейчас это фит, помечено). + +### NEXT +1. Фит A/S раздельно по группам → понять зависимость от sens/q (сейчас глобальные). +2. dual ~3.5 стабилен — межполосный механизм (приоритет из 22p). +3. WIN_freq HF rolloff не добавлен — после добавления comb может улучшиться ещё. +4. При достижении ≤bridge: гейт пройден, переносить в канон.