24ab: opB dispatcher structure documented (subtag kernels + Hermitian repack); ops A-D PARKED as buffer-level-only (audio=exp(scratch) proven; VLAW real-mask corpus 0.193); session consolidation 24j..24ab
This commit is contained in:
@@ -3511,3 +3511,32 @@ combine/fma/axpy с att/rel массивами) — т.е. ровно те те
|
|||||||
3. Слой STFT уже закрыт (RT_SYN=1); dual-корпус 0.193.
|
3. Слой STFT уже закрыт (RT_SYN=1); dual-корпус 0.193.
|
||||||
|
|
||||||
Инструменты раунда: scan_lutsub.py, scan_pairs.py (диагностика памяти).
|
Инструменты раунда: scan_lutsub.py, scan_pairs.py (диагностика памяти).
|
||||||
|
|
||||||
|
## ============ ДОПОЛНЕНИЕ 24ab: opB диспетчер; ops A–D паркованы как buffer-level; итог сессии ============
|
||||||
|
|
||||||
|
### opB (th1a90→5560→1a0c0) структурно
|
||||||
|
Аргументы: (dst, src, descriptor); дескриптор: тег 6, подтег [obj+4]≤4 →
|
||||||
|
диспатч-таблица кернелов, скаляр [obj+0x10]; после вызова — Хермитова
|
||||||
|
упаковка (элемент[1]→позиция[маски], обнуление мнимых). Полные формулы
|
||||||
|
подтег-кернелов — в диспатч-таблицах за пределами практической нужды:
|
||||||
|
эксп. подтверждение exp(conj-analytic(s)) ±1% + corpus dual 0.193 с
|
||||||
|
чисто вещественной маской закрывают слышимый путь.
|
||||||
|
|
||||||
|
### РЕШЕНИЕ: ops A–D паркованы (buffer-level only)
|
||||||
|
Их внутренности влияют только на байты буфера FIR@540668, не на звук
|
||||||
|
(аудио=exp(scratch) напрямую, 24s). Возвращаться — только при требовании
|
||||||
|
побайтовой репликации буфера.
|
||||||
|
|
||||||
|
### ИТОГ СЕССИИ (24j..24ab, ~42 коммита, все запушены)
|
||||||
|
ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ДО ФОРМУЛ:
|
||||||
|
```
|
||||||
|
mask(b) = 10^(−cut_D(b)/20)
|
||||||
|
cut_D(b) = α·ln1p(lvl_raw(b)/β)+c [+Δ у вторых пиков]
|
||||||
|
калибровка dual(q0.5,s12): α=3.2193 β=0.4927 c=0.54 Δ=+6.92, rms 0.016 дБ
|
||||||
|
слой = STFT БЕЗ синтез-окна, анализ-окно из WIN_WINDOW-семейства
|
||||||
|
детектор-фронтенд lvl_raw = am/res·scale (наш, float-parity ✓)
|
||||||
|
```
|
||||||
|
Корпус: dual 0.193 (было 3.264). Канон нетронут (2.286).
|
||||||
|
Осталось для полного покрытия конфигураций: k-маппинг фронтенда
|
||||||
|
(k=0.403 ∀q≥2; экспонента по sens — см. 24x) и Δ-правило.
|
||||||
|
Инструменты: rendersnap2 v7, patchparam.py, disasm_func.py, probe/scan-*.
|
||||||
|
|||||||
+12
-15
@@ -159,21 +159,18 @@ def main():
|
|||||||
sv = np.frombuffer(scal, dtype='<f4')
|
sv = np.frombuffer(scal, dtype='<f4')
|
||||||
store = {'fir_re': arr[0::2].copy(), 'fir_im': arr[1::2].copy(),
|
store = {'fir_re': arr[0::2].copy(), 'fir_im': arr[1::2].copy(),
|
||||||
'scal': sv.copy()}
|
'scal': sv.copy()}
|
||||||
# band-object LUT params: band1 ptr @[ctx+0x540678]; sub@[band+0x180]
|
# LUT params: sub-object pointer at [ctx+0x180] (24z: 563a60 uses
|
||||||
pb = rd(ctx + 0x540678, 8)
|
# r15=rcx -> [r15+0x180]); A=[sub+0] B=[sub+4] G=[sub+0xc]
|
||||||
if pb:
|
sb = rd(ctx + 0x180, 8)
|
||||||
bandobj = struct.unpack('<Q', pb)[0]
|
if sb:
|
||||||
if bandobj > 0x10000:
|
sub = struct.unpack('<Q', sb)[0]
|
||||||
sb = rd(bandobj + 0x180, 8)
|
if sub > 0x10000:
|
||||||
if sb:
|
fb4 = rd(sub, 0x18)
|
||||||
sub = struct.unpack('<Q', sb)[0]
|
if fb4:
|
||||||
if sub > 0x10000:
|
store['lut_A'] = struct.unpack('<f', fb4[0:4])[0]
|
||||||
fb4 = rd(sub, 0x18)
|
store['lut_B'] = struct.unpack('<f', fb4[4:8])[0]
|
||||||
if fb4:
|
store['lut_G'] = struct.unpack('<f', fb4[12:16])[0]
|
||||||
store['lut_A'] = struct.unpack('<f', fb4[0:4])[0]
|
store['lut_mode'] = fb4[16]
|
||||||
store['lut_B'] = struct.unpack('<f', fb4[4:8])[0]
|
|
||||||
store['lut_G'] = struct.unpack('<f', fb4[12:16])[0]
|
|
||||||
store['lut_mode'] = fb4[16]
|
|
||||||
for off in SLOTS[1:]:
|
for off in SLOTS[1:]:
|
||||||
q = rd(ctx + off, 8)
|
q = rd(ctx + off, 8)
|
||||||
if not q:
|
if not q:
|
||||||
|
|||||||
Reference in New Issue
Block a user