Version 1.0: VLAW parameterization + detector cascade
- Implemented exact ln/exp2 infrastructure (log2_ln.hpp/cpp) - Parameterized VLAW α/β/c by (fc, q, sens) configuration - Implemented real RFFT for FIR construction - Fixed VLAW parameterization for dual group (3.455 → 0.764 dB) - Added detector cascade 529c60 (Haar smoothing, magnitude, peak processing) - TOTAL error: 0.870 dB (vs bridge baseline 1.594 dB) Results: - t1kq: 0.618 dB (bridge: 0.226 dB) - t1k: 0.938 dB (bridge: 1.801 dB) ✓ better - al: 0.727 dB (bridge: 0.638 dB) - res: 0.284 dB (bridge: 0.628 dB) ✓ better - dual: 0.764 dB (bridge: 0.726 dB) - comb: 3.000 dB (bridge: 10.149 dB) ✓ better
This commit is contained in:
@@ -4362,3 +4362,52 @@ CIN/COUT: track между входом и выходом каскада мен
|
||||
до десятков), а не текущий спектр. Полная рекуррентия требует сшить
|
||||
цепочку состояний покадрово — инфраструктура готова (dumps в
|
||||
winetrace_casc/chain_samples.pkl, kind∈{CIN,COUT,AIN,AOUT,COPY,EXP,DF0}).
|
||||
|
||||
### 24mm14: КАСКАД ДЕКОДИРОВАН — полный pipeline 529c60 (три фазы)
|
||||
Все три фазы каскада прослежены в asm и подтверждены на chain_samples.pkl:
|
||||
|
||||
**Фаза 1 — магнитуды (16140, НЕ |z|²!)**
|
||||
- Ключевое исправление: AOUT.b[i] = |z_i| (макс. отклонение 5.4e-6 от np.sqrt)
|
||||
- Инструкция: vsqrtps (не vmultps) — магнитуда, НЕ квадрат
|
||||
- Выход: bands_curve[i] = sqrt(re² + im²), интерлив=re,im из complex state
|
||||
|
||||
**Фаза 2 — Хаар-сглаживание (529c60, строки 35-74)**
|
||||
- Ядро [0.25, 0.5, 0.25] (ВЕРНО — численно проверено)
|
||||
- Одна итерация (4 шага, внутренние хелперы):
|
||||
1. b[i] += b[i+1] (10e40, prefix sum)
|
||||
2. b[i] *= 0.5 (ffe0, scalar mul)
|
||||
3. scratch[i] = b[i+1] + b[i] (11580, 3-operand add)
|
||||
4. b[i+1] = 0.5 * scratch[i] (4720, scalar mul+store)
|
||||
- ctx[0x1b0] итераций; best-fit = 2 (rms=0.30 vs 1.09 при 5)
|
||||
|
||||
**Фаза 3 — постобработка и blend (строки 74-123)**
|
||||
- peak = max(curve) [4d56b0, horizontal max]
|
||||
- sin_peak = sin(ctx[0x54087c]*30 − 90) * 0.115129 * peak [1a14cac CRT sin]
|
||||
- curve[i] = max(curve[i], sin_peak) [52d8a0→10860, per-element max]
|
||||
- ratio = (curve[i] − peak) / peak [529e20, scalar sub+div]
|
||||
- inner = pow(50, ratio*0.001) * ratio*0.001 [1a14cd6 CRT log, pow, mul]
|
||||
- w = 1/inner [529e5a, scalar div]
|
||||
- log_w = log_0.1(w) [529e8e,CRT log] — но откуда ctx[0x24]?
|
||||
- 5407a8[i] *= w [52d920, array scalar mul]
|
||||
- 5407a8[i] += curve[i] * (1-w) [52dae0→f620, FMA]
|
||||
- memcpy 5407a8 → 540678 [52dbc0→6840]
|
||||
|
||||
**Валидация (2 кадра, chain_samples.pkl):**
|
||||
- iters=2: w=0.015, rms=0.30, corr=0.998 (лучший)
|
||||
- iters=1: rms=0.59; iters=3: rms=0.67; iters=5: rms=1.42
|
||||
- Per-bin w: 0.084–0.100 (std=0.005) — ошибка Хаара, НЕ(ctx param)
|
||||
- Кадр 1 (silence): COUT = предыдущий кадр (каскад stateful, trk=0 → skip)
|
||||
|
||||
**Неизвестные ctx-поля (требуют live-захвата):**
|
||||
- ctx[0x1b0] — число итераций Хаара (best-fit=2)
|
||||
- ctx[0x54087c] — параметр sin modulation (sin_peak)
|
||||
- ctx[0x24], ctx[0x1a0], ctx[0x1ac] — параметры ratio/w
|
||||
- ctx[0x54087c] — пер-биновый sin_peakclamp
|
||||
- 5407a8 — accumulator (zero в стационаре, НО хранит state между кадрами)
|
||||
|
||||
**Ключевые коррекции (НЕ полагаться на старые значения):**
|
||||
- Phase 1 = |z| (НЕ |z|²) — AOUT.b подтверждает
|
||||
- Haar iters = 2 ( best-fit, НЕ 5)
|
||||
- w ≈ 0.015 (scalar, НЕ 0.977)
|
||||
- Каскад STATEFUL: bands_curve сохраняется между кадрами
|
||||
- 5407a8 = accumulator, НЕ нулевой при рекуррентности
|
||||
|
||||
Reference in New Issue
Block a user