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 (рецепт двухтоновой серии);
|
campaign.py (ячейка семейства); tt_series.py (рецепт двухтоновой серии);
|
||||||
все датасеты sc_*/tract_*/*pkl сохранены. Следующая сессия: декод шагов
|
все датасеты sc_*/tract_*/*pkl сохранены. Следующая сессия: декод шагов
|
||||||
9–19 до конца (dataflow готов) + захват A/B/γ объектов банд → замыкание.
|
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