From b85b344e23d6f22eb7e24cd3843be7121cfc5089 Mon Sep 17 00:00:00 2001 From: Matiq Date: Tue, 25 Aug 2026 12:54:25 +0300 Subject: [PATCH] =?UTF-8?q?24ll2:=20multi6=20dataset=20=E2=80=94=20SIX=20n?= =?UTF-8?q?otches=20one=20run=20(self-consistent);=20cut=20GROWS=20with=20?= =?UTF-8?q?res=20(2.33->7.18),=20independent=20of=20am=20(first=20four=20t?= =?UTF-8?q?ones=20equal=20am!);=20rejected=20floor/power=20models;=20perfe?= =?UTF-8?q?ct=20validation=20target=20for=20cascade=20simulator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handoff/NOTES_LEVEL.md | 29 +++++++++++++++++++++++++++++ scripts/mk_multi6.py | 16 ++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 scripts/mk_multi6.py diff --git a/handoff/NOTES_LEVEL.md b/handoff/NOTES_LEVEL.md index 934ff81..057cc18 100644 --- a/handoff/NOTES_LEVEL.md +++ b/handoff/NOTES_LEVEL.md @@ -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 детектора. diff --git a/scripts/mk_multi6.py b/scripts/mk_multi6.py new file mode 100644 index 0000000..320ca86 --- /dev/null +++ b/scripts/mk_multi6.py @@ -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)