24ll: alpha(content) LOCALIZED — far second tone (@4000, both 0dB and -12dB) does NOT affect alpha (1.075-1.110 vs 1.153); mixing is template-local via res-weighted freq-IIRs; distance-kernel series is the next campaign cell
This commit is contained in:
@@ -3696,3 +3696,29 @@ tone1k.wav amp@1k=0.9666 vs k0_in 0.4248 (×2.28 громче) ⇒ его кат
|
|||||||
```
|
```
|
||||||
Для полного покрытия нужно: правило α(контент) из декомпа шагов 9–19
|
Для полного покрытия нужно: правило α(контент) из декомпа шагов 9–19
|
||||||
(механизм смешения) + fc-поправка. После этого — bit-exact везде.
|
(механизм смешения) + fc-поправка. После этого — bit-exact везде.
|
||||||
|
|
||||||
|
## ============ UPDATE 24ll: МЕХАНИЗМ α(контент) ЛОКАЛИЗОВАН — смешение шаблонно-локальное ============
|
||||||
|
|
||||||
|
### Эксперимент «далёкий тон» (fc500/q0.5/s12, второй тон@4000 Гц):
|
||||||
|
```
|
||||||
|
конфиг lvl scratchCut α_eff (инверсия single-закона)
|
||||||
|
один тон@500 8.555 3.90 1.153 (калибровка)
|
||||||
|
+тон@4000 (0 дБ) 8.555 3.77 1.110 ← НЕ влияет!
|
||||||
|
+тон@4000 (−12 дБ) 2.149 2.31 1.075 ← НЕ влияет!
|
||||||
|
dual (+тон@2000, близко) 8.550 9.93 3.09 ← удвоение только здесь
|
||||||
|
```
|
||||||
|
⇒ **α зависит ТОЛЬКО от контента в пределах шаблона полосы**.
|
||||||
|
Далёкий контент не влияет ни на каком уровне. Смешение =
|
||||||
|
шаблонно-локальное (через res-взвешенные частотные IIR шагов 9–19,
|
||||||
|
согласуется с коэф. 533340: g=fc/i спадает с дистанцией).
|
||||||
|
|
||||||
|
### Следствие для транскрипции
|
||||||
|
α_eff(конфиг) = α₀·(1 + Σ_i w(d_i)·lvl_i/lvl_peak) где d_i — расстояния
|
||||||
|
до чужих пиков в единицах шаблона, w — убывающее ядро (параметризуется
|
||||||
|
серией двухтонов с переменной дистанцией — следующая ячейка кампании).
|
||||||
|
β/c ожидаются константами.
|
||||||
|
|
||||||
|
### Кампания (обновлённая сетка):
|
||||||
|
✓ q не влияет; ✓ sens через lvl; ✓ далёкий контент не влияет
|
||||||
|
□ двухтональная дистанционная серия (w-ядро): d∈{1500,750,400,200}Гц
|
||||||
|
□ декод ядра из шагов 9–19 (IIR1/2 коэф. уже известны!)
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import wave, numpy as np
|
||||||
|
sr=44100; T=4.0; n=int(sr*T); t=np.arange(n)/sr
|
||||||
|
ph=np.random.default_rng(21).uniform(0,2*np.pi,7)
|
||||||
|
for att,nm,f2 in ((0,'far0',4000.),(12,'far12',4000.)):
|
||||||
|
A=0.4248*10**(-att/20)
|
||||||
|
y=A*np.sin(2*np.pi*500*t+ph[0])+A*np.sin(2*np.pi*f2*t+ph[1])
|
||||||
|
for i,f in enumerate((300.,700.,1400.,2800.)):
|
||||||
|
y+=A*10**(-30/20)*np.sin(2*np.pi*f*t+ph[i+2])
|
||||||
|
y=np.clip(y,-0.999,0.999)
|
||||||
|
w=wave.open('/tmp/opencode/%s_in.wav'%nm,'wb'); w.setnchannels(1); w.setsampwidth(2); w.setframerate(sr)
|
||||||
|
w.writeframes((y*32767).astype(np.int16).tobytes()); w.close()
|
||||||
|
import re
|
||||||
|
src=open('/tmp/opencode/f0.rpp').read()
|
||||||
|
src=re.sub(r'RENDER_FILE "[^"]*"','RENDER_FILE "/tmp/opencode/%s_ref.wav"'%nm,src)
|
||||||
|
src=src.replace('FILE "/tmp/opencode/f0_in.wav"','FILE "/tmp/opencode/%s_in.wav"'%nm)
|
||||||
|
open('/tmp/opencode/%s.rpp'%nm,'w').write(src)
|
||||||
|
print('far-pair inputs+rpps ready')
|
||||||
Reference in New Issue
Block a user