revert chain_9_19 to working 0.314 baseline. document chain I/O unknown as blocker
This commit is contained in:
@@ -104,6 +104,29 @@ err = db(ta(out,1000)/ta(ref,1000)) # err в dB, цель <0.1
|
|||||||
Датасеты: `/tmp/opencode/sc_{q,sens,qmap,k,f,d}*` + `tract_*` + `*.pkl/.npz` (см. `NOTES_LEVEL_INDEX.md`).
|
Датасеты: `/tmp/opencode/sc_{q,sens,qmap,k,f,d}*` + `tract_*` + `*.pkl/.npz` (см. `NOTES_LEVEL_INDEX.md`).
|
||||||
Открытые пробелы → `BITEXACT_PLAN.md`.
|
Открытые пробелы → `BITEXACT_PLAN.md`.
|
||||||
|
|
||||||
|
## Архитектурная проблема chain_9_19 (КРИТИЧЕСКОЕ)
|
||||||
|
|
||||||
|
`chain_9_19` из `dsp/fn52fe0.cpp:259` (BLOCKMAP:620-644) — это per-frame цепь с **persistent ACC state** (`@ctx+0x5407c8`). Она работает в Reaper'е блоками по 4096 samples с накоплением ACC между кадрами.
|
||||||
|
|
||||||
|
**Попытки интеграции (c23646d revert + 12 итераций):**
|
||||||
|
- ACC steady-state iteration 10-100x: не сходится, потому что chain требует **block-based feedback** (выход frame N → вход frame N+1), а не одноразовой итерации.
|
||||||
|
- Frame-based вызов с `casc_curve` (cascade output ~0.0004): chain output = 0 (неправильный масштаб input).
|
||||||
|
- Frame-based вызов с `am/res*sf` (VLAW scale O(1-10)): chain output = 0 (неправильный формат input).
|
||||||
|
- `f6f8_` (IIR1 out buffer) не был инициализирован → segfault.
|
||||||
|
|
||||||
|
**Критический пробел: НЕИЗВЕСТЕН формат I/O chain_9_19:**
|
||||||
|
1. Какой масштаб input? (casc_curve ~0.0004 vs VLAW scale O(1-10) vs что-то другое)
|
||||||
|
2. Что представляет output? (mask? level curve? log-domain vs linear?)
|
||||||
|
3. Как ACC (track) взаимодействует с chain в рамках одного кадра?
|
||||||
|
|
||||||
|
**Правильный путь:**
|
||||||
|
1. **Live-dump chain I/O** через ptrace: зафиксировать вход/выход chain в реальном времени при обработке тестового тона
|
||||||
|
2. **Или**: детальный анализ decompilation `52a580-52b3cd` для понимания data flow
|
||||||
|
|
||||||
|
**Статус:** chain отключен, используется VLAW path (`RT_VLAW=1`). Target `0.314→<0.05` требует **live-dump chain I/O** или полной транскрипции data flow из decompilation.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Чистая работа
|
## Чистая работа
|
||||||
- Не коммитить: `*.bin`, `*.wav/rpp`, `*.log`, `dsp/build/`, `ghidra-proj/`, `dl/lib/bin/include/`, `regions*/`. См. `.gitignore`.
|
- Не коммитить: `*.bin`, `*.wav/rpp`, `*.log`, `dsp/build/`, `ghidra-proj/`, `dl/lib/bin/include/`, `regions*/`. См. `.gitignore`.
|
||||||
- После правки C++ — `touch` исходника + `cmake --build dsp/build --target framed_test` (hazard `AGENTS.md:66`) + `python3 scripts/corpus.py --compare scripts/baseline_bridge.json --tol 0.25`.
|
- После правки C++ — `touch` исходника + `cmake --build dsp/build --target framed_test` (hazard `AGENTS.md:66`) + `python3 scripts/corpus.py --compare scripts/baseline_bridge.json --tol 0.25`.
|
||||||
|
|||||||
@@ -762,12 +762,17 @@ void FramedDetector::processFrame(const std::complex<double>* spectrum, float* m
|
|||||||
4, // ctx[0x1ac] = 4 (quality default)
|
4, // ctx[0x1ac] = 4 (quality default)
|
||||||
false // is_magnitude = false (input is complex)
|
false // is_magnitude = false (input is complex)
|
||||||
);
|
);
|
||||||
|
// chain_9_19: transforms level curve AFTER cascade, BEFORE VLAW law.
|
||||||
|
// ACC state (track_[b]) persists across frames (FramedDetector member).
|
||||||
|
// f6f8_ is shared IIR1 output buffer.
|
||||||
|
{
|
||||||
// Cascade output IS the level curve (Haar-smoothed magnitude).
|
// Cascade output IS the level curve (Haar-smoothed magnitude).
|
||||||
// Use it directly as am_ replacement — pass res=1.0 so level = am*1
|
// Use it directly as am_ replacement — pass res=1.0 so level = am*1
|
||||||
// (twin response already baked into cascade output).
|
// (twin response already baked into cascade output).
|
||||||
process_band_structural_am(am_.data(), res_[b].data(), bands_[b],
|
process_band_structural_am(am_.data(), res_[b].data(), bands_[b],
|
||||||
band_mask.data(), nfft_, sample_rate_,
|
band_mask.data(), nfft_, sample_rate_,
|
||||||
bands_.size(), casc_curve.data(), true);
|
bands_.size(), casc_curve.data(), true);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
process_band_structural(am_.data(), res_[b].data(), bands_[b],
|
process_band_structural(am_.data(), res_[b].data(), bands_[b],
|
||||||
band_mask.data(), nfft_, sample_rate_, bands_.size());
|
band_mask.data(), nfft_, sample_rate_, bands_.size());
|
||||||
|
|||||||
Reference in New Issue
Block a user