24ll2: multi6 dataset — SIX notches one run (self-consistent); cut GROWS with res (2.33->7.18), independent of am (first four tones equal am!); rejected floor/power models; perfect validation target for cascade simulator
This commit is contained in:
@@ -3803,3 +3803,32 @@ m-тест: pk2-закон = pk1-закон(уровень×11.6±0.1) — ко
|
||||
campaign.py (ячейка семейства); tt_series.py (рецепт двухтоновой серии);
|
||||
все датасеты sc_*/tract_*/*pkl сохранены. Следующая сессия: декод шагов
|
||||
9–19 до конца (dataflow готов) + захват A/B/γ объектов банд → замыкание.
|
||||
|
||||
## ============ ДОПОЛНЕНИЕ 24ll2: мультитон-6 датасет — шесть нотчей один прогон ============
|
||||
|
||||
### multi6 (тоны 200/500/1000/2000/4000/8000 Гц, amp 0.30, fc500/q0.5/s12):
|
||||
```
|
||||
тон бин am res lvl cut_дБ
|
||||
200 19 0.0029 0.441 -0.09 0.02 (пик-детект сломан на слабом)
|
||||
500 43 0.2103 0.1172 6.006 2.33
|
||||
1000 85 0.2124 0.3737 1.897 3.52
|
||||
2000 171 0.2159 0.8389 0.862 4.42
|
||||
4000 342 0.1703 1.4006 0.493 7.18
|
||||
8000 684 0.0605 1.8114 0.010 5.58
|
||||
```
|
||||
Шесть нотчей ОДНИМ прогоном = самосогласованный датасет для каскада!
|
||||
|
||||
### Наблюдения:
|
||||
1. cut РАСТЁТ с res почти монотонно (2.33→7.18), падение только @8000.
|
||||
2. Первые ЧЕТЫРЕ тона имеют ОДИНАКОВЫЙ am≈0.21, но каты различаются вдвое
|
||||
⇒ cut зависит от res ОТДЕЛЬНО от am (наш lvl=am/res даёт обратную
|
||||
монотонность ✗) — закон входа содержит res ПОЛОЖИТЕЛЬНО!
|
||||
3. 8000Гц выпадает (am ниже из-за окна анализа + кат ниже тренда).
|
||||
4. Отвергнуты на этом датасете: floor-модель res (rms 1.88),
|
||||
β∝res^p (rms 1.08), exp-формы.
|
||||
|
||||
### Ценность для симулятора
|
||||
multi6 = идеальный валидатор каскадного симулятора шагов 9–19: один прогон,
|
||||
шесть пиков с разными (am,res) комбинациями, самосогласованные B=exp(scratch).
|
||||
После оп-за-оп транскрипции симулятор ОБЯЗАН воспроизвести эти пять глубин
|
||||
из am/res тракта — это и есть критерий bit-exact детектора.
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env python3
|
||||
"""mk_multi6.py — 6-tone multitone input + rpp clone."""
|
||||
import wave, numpy as np, re
|
||||
sr=44100; T=4.0; n=int(sr*T); t=np.arange(n)/sr
|
||||
tones=(200.,500.,1000.,2000.,4000.,8000.)
|
||||
ph=np.random.default_rng(51).uniform(0,2*np.pi,len(tones))
|
||||
A=0.30 # per-tone amplitude (avoid clip: sum ~0.9 worst case)
|
||||
y=sum(A*np.sin(2*np.pi*f*t+p) for f,p in zip(tones,ph))
|
||||
y=np.clip(y,-0.999,0.999)
|
||||
w=wave.open('/tmp/opencode/multi6_in.wav','wb'); w.setnchannels(1); w.setsampwidth(2); w.setframerate(sr)
|
||||
w.writeframes((y*32767).astype(np.int16).tobytes()); w.close()
|
||||
src=open('/tmp/opencode/t1k_base.rpp').read() # band1 freq will be patched to 500
|
||||
src=re.sub(r'RENDER_FILE "[^"]*"','RENDER_FILE "/tmp/opencode/multi6_ref.wav"',src)
|
||||
src=src.replace('FILE "/home/m/soothe-bt/tone1k.wav"','FILE "/tmp/opencode/multi6_in.wav"')
|
||||
open('/tmp/opencode/multi6.rpp','w').write(src)
|
||||
print('multi6 ready: tones',tones,'amp',A)
|
||||
Reference in New Issue
Block a user