Phase A: consts extraction (11602), Hann window ID, DSP const map
This commit is contained in:
+24
-3
@@ -21,6 +21,8 @@
|
||||
H=1/√(1+(Qeff·A)²), Qeff=1.54·q^1.33, sat(level), Q_notch=qn·(1−g)+1, per-frame env, WOLA-маска.
|
||||
- LUT: depthcurve (207 float @0x1826170e8, `0.302+0.698·sin(π/2·x)^0.94`, r²=0.99999).
|
||||
- Рендер-свипы в `/home/m/soothe-bt/` (506 wav + 609 rpp) — эталон для bit-exact.
|
||||
- BFS-замыкание call-graph от сидов: `fun_map.txt` (2035 функций), `decomp_funs.txt` (1640 декомпилировано,
|
||||
312K), `consts.txt` (11602 констант) — после фикса `getInstructions()` в `DumpFuns.java`.
|
||||
|
||||
## Контракт из manual (`soothe2_ManualFAQ.pdf`, v1.0.0)
|
||||
|
||||
@@ -69,6 +71,22 @@
|
||||
- A.5. Найти oversample/resolution-путь (M6/M7): интерполяция сетки, период обновления.
|
||||
- A.6. Сопоставить топологию с диаграммой (0.1) и stereo/link/balance (M8).
|
||||
|
||||
### Статус фазы A (~40%)
|
||||
- **A.2 константы — готово**: `consts.txt` (11602 из инструкций BFS-замыкания, 2670 в DSP-диапазоне
|
||||
0x1824c0000–0x182700000) из повторного прогона `DumpFuns.java`. Точная double/f32-интерпретация —
|
||||
`consts_double.txt` (чтение PE напрямую, `.data` vs `.rdata` через RVA).
|
||||
- **A.3 ОКНО — найден**: `FUN_1805356f0` генерирует **Hann** `w(i)=0.5·(1−cos(2πi/N))`
|
||||
(double 2π @0x1824c4e00/4248, 1.0 @4da0/4140, 0.5 @4c90/4050; хвост через `cos`, чётные пары через
|
||||
SIMD `divpd`+`thunk_FUN_181a114e0(=cos)`). Размер N: `FUN_18052e130` →
|
||||
`N = 2^floor(log2(sr/44100))·N0` (44100 @0x1824c45ec, 2.0 @41e8). **Нормализация окна** в
|
||||
`FUN_18052df60`: сумма по окну → `scale=1/(mean/N)`, потом `/= (fsize @+0x1ac)`.
|
||||
- **A.3 FFT — НЕ подтверждён для DSP**: найденный планировщик `FUN_181384180` (radix-4/8 стадии,
|
||||
cos/sin twiddle, бит-реверс, log2(N)) — это **Vorbis-декодер** (строка `s_vorbis_1821e47fc`);
|
||||
в DSP-пути не участвует. В бинарнике нет kissfft/fftw/MKL-FFT строк. DSP-STFT-FFT ищется дальше.
|
||||
- **Константы детектора**: `10^((dB)/20)` через `expf((30·X−90)·0.115129255)`,
|
||||
`0.115129255=1/(20·log10e)`, `−6.907755=−ln1000`, `0.707`/`0.51`/`0.54`/`0.001`,
|
||||
маппинг резонанса `(x−0.707)·0.5+1` в `FUN_1805316e0`.
|
||||
|
||||
### Фаза B — Реконструкция C++ (bit-exact)
|
||||
- B.1. Классы 1:1: `Soothe2FilterGraph::processBlock`, `FilterGraphGrid`, `DigitalFilter`,
|
||||
`SpectralProcessor` (STFT), `AudioProcessingModule`, `IIRFilterExtended`, env-модуль с
|
||||
@@ -85,10 +103,13 @@
|
||||
- C.3. Итеративный цикл diff → локализация блока → фикс → повтор.
|
||||
|
||||
## Риски
|
||||
- **FFT bit-exact**: если FFTW — нужна та же сборка; свой radix-2 — воспроизводим напрямую (A.3).
|
||||
- **FFT bit-exact**: свой планировщик есть только у Vorbis-декодера; DSP-STFT-FFT ещё не найден (A.3) —
|
||||
если свой radix-2 — воспроизводим напрямую; главный нерешённый риск фазы A.
|
||||
- **Хост-зависимость**: уточнить точный размер буфера/фрейма (рендеры при разных RENDER_RANGE должны давать одинаковые байты).
|
||||
- **Stereo**: все текущие свипы mono; для бит-exact графа M8 нужны стерео-рендеры (link/balance/ms).
|
||||
|
||||
## Открытые вопросы
|
||||
1. Окна/oversample детали — из декомпиляции (A.6) или требуется доп. замеры.
|
||||
2. Стерео-верификация (M8) — приоритет mono-путь или сразу стерео-граф.
|
||||
1. Где реальный DSP-STFT FFT (не Vorbis/не внешний lib)? Искать большие функции с butterfly/стадиями
|
||||
в 18052*/18053* или через трассировку вызовов от `processBlock` спектрального процессора.
|
||||
2. Окна/oversample детали — из декомпиляции (A.6) или требуется доп. замеры.
|
||||
3. Стерео-верификация (M8) — приоритет mono-путь или сразу стерео-граф.
|
||||
|
||||
Reference in New Issue
Block a user