diff --git a/handoff/NOTES_LEVEL.md b/handoff/NOTES_LEVEL.md index 085d0c0..dff1b93 100644 --- a/handoff/NOTES_LEVEL.md +++ b/handoff/NOTES_LEVEL.md @@ -2381,3 +2381,10 @@ bands[] и DESIGN — искать его адрес в цепи до 52b550. полная форма G=log-домена: scr = c0 + ka·ln(am) + f(res). 2. Декод читателя 0x540668 (источник ×1.805) + детекторного IIR перед DESIGN. 3. RT_FIRCONV=1 транскрипция: G аппроксимировать таблично по этой серии. + +### 23g (короткое): am-серия пока неинтерпретируема +t_{-24,-12,0,+24}.rpp (тон@1000, бин 85): scr85 = −1.0071 / −0.2276 / −0.4399 / +−1.0071 — НЕмонотонно по уровню; вероятная причина — steady() хватало разные +фазы (attack/стационар) или в t_* конфигах другая полоса. Данные в логе прогона; +повторить с контролем стабильности (несколько последних фаз подряд равны). +Скрипты qseries.py/amseries.py закоммичены. diff --git a/scripts/amseries.py b/scripts/amseries.py new file mode 100644 index 0000000..7eccff2 --- /dev/null +++ b/scripts/amseries.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +"""amseries.py — amplitude sweep via rendersnap: scratch vs input level. +Gives ka = d(scr)/d(ln am) of the log-domain law.""" +import glob +import subprocess +import sys + +import numpy as np + +CASES = [('t_-24', -24.0), ('t_-12', -12.0), ('t_0', 0.0), ('t_24', 24.0)] + + +def steady(tag): + fs = sorted(glob.glob('/tmp/opencode/rendersnap/phase*.npz')) + for f in fs[::-1]: + z = np.load(f) + sc = z['0x540628'] + if sc[85] < -1e-4: + return float(sc[85]), float(sc[85]) + return None + + +def main(): + out = [] + for tag, db in CASES: + rpp = f'/tmp/opencode/{tag}.rpp' + subprocess.run(['timeout', '100', 'python3', + '/home/m/re-tools/scripts/rendersnap.py', rpp], + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + st = steady(tag) + if st: + out.append((db, st)) + print(tag, db, 'scr43=%.4f scr171=%.4f' % st, flush=True) + else: + print(tag, 'NO STEADY', flush=True) + if len(out) >= 2: + (d1, s1), (d2, s2) = out[0], out[-1] + ka = (s2[0] - s1[0]) / ((d2 - d1) * np.log(10) / 20) + ka171 = (s2[1] - s1[1]) / ((d2 - d1) * np.log(10) / 20) + print('ka(d scr/d ln am) @85: %.4f' % ka) + pass + + +if __name__ == '__main__': + main()