Задача: Исследовать временную причинность VoiceControlState → DSP → акустические признаки
Исследовать временную причинность VoiceControlState → DSP → акустические признаки
Построить экспериментальную карту того, как изменения управляющих параметров во времени проявляются в PCM и акустических признаках с учётом лагов и памяти DSP.
Цель
Исследовать не мгновенное соответствие вида parameter[t] -> sample[t], а временную причинность в цепочке:
VoiceControlState(t) -> внутреннее DSP-состояние -> PCM -> акустические признаки на временном окне.
Нужно понять, какой управляющий параметр на что реально влияет, через какое время это влияние проявляется, как долго сохраняется и какие наблюдаемые признаки позволяют его восстановить.
Это необходимо для корректного обратного декодирования Sound -> VoiceScenario.
Контекст и проблема
Текущий VoiceScenario задаёт управляющие параметры, но выходной PCM формируется динамической системой с внутренним состоянием:
voicePhase;resonator1.low,resonator1.band;resonator2.low,resonator2.band;resonator3.low,resonator3.band;- состоянием PRNG;
- активными automation.
Поэтому даже постоянные управляющие параметры дают сложный, высокочастотный waveform.
Примеры:
- постоянный
f0Hzне означает постоянный waveform — он задаёт скорость вращенияvoicePhase; - постоянный
noiseLevelуправляет амплитудой случайного источника, который меняется каждый sample; - постоянные
resonance*управляют stateful-фильтрами, внутреннее состояние которых меняется каждый sample; - наблюдаемые признаки (
RMS,spectralFlatness,dominantFrequencyи т.д.) зависят сразу от нескольких управляющих параметров и истории DSP.
Следовательно, прямые эвристики типа:
RMS -> sourceLevel
dominantFrequency -> f0Hz
не являются корректной моделью обратного преобразования.
Основная гипотеза
Для речи и данного синтезатора нужно анализировать не отдельный sample и не отдельный лог-фрейм, а временное окно.
Вместо:
parameter[t] -> sample[t]
исследовать:
parameter trajectory[t0:t1] -> audio response[t0:t1+Δ]
где Δ — возможный лаг реакции и/или время затухания внутреннего DSP-состояния.
Рабочие масштабы окон для проверки:
- 5 ms;
- 10 ms;
- 20 ms;
- 30 ms;
- 50 ms;
- при необходимости 100 ms.
Для каждого параметра нужно определить, на каком масштабе времени его влияние наблюдается наиболее устойчиво.
Что исследовать для каждого VoiceControlState-параметра
Минимально:
sourceLevelperiodicitynoiseLevelf0HzglottalOpenPhaseglottalReturnPhaseresonance1Freqresonance1Bandwidthresonance1Gainresonance2Freqresonance2Bandwidthresonance2Gainresonance3Freqresonance3Bandwidthresonance3GainoutputLevel
Для каждого параметра определить:
- Чувствительность — насколько сильно его изменение влияет на PCM и признаки.
- Лаг — через сколько времени после изменения control это влияние становится наблюдаемым.
- Время затухания — сколько сохраняется эффект после изменения параметра.
- Локальность — влияет ли параметр в основном на конкретный диапазон спектра/временную характеристику или глобально.
- Однозначность — можно ли по наблюдаемому эффекту отличить изменение этого параметра от изменения другого.
- Взаимодействия — какие пары параметров дают неаддитивный эффект.
Эксперимент 1: одиночный parameter sweep
Для каждого параметра:
- Зафиксировать все остальные параметры в одном baseline-состоянии.
- Изменять только исследуемый параметр по сетке значений.
- Для каждого значения синтезировать одинаковый по длительности PCM.
- Собирать одновременно:
- полный
VoiceControlState(t); - внутренний DSP trace;
- PCM;
- акустические признаки по окнам.
- полный
- Сравнивать результат с baseline.
Пример для f0Hz:
- 80 Hz
- 100 Hz
- 120 Hz
- 150 Hz
- 180 Hz
- 220 Hz
- 300 Hz
Пример для resonance1Freq:
- фиксировать source и остальные резонаторы;
- двигать только
resonance1Freq; - смотреть, какой спектральный пик реально перемещается и как.
Эксперимент 2: ступенчатое изменение во времени
Проверить динамический отклик системы.
Пример:
t < 100 ms: resonance1Freq = 600
t >= 100 ms: resonance1Freq = 800
Анализировать окна:
- 60–80 ms
- 80–100 ms
- 100–120 ms
- 120–140 ms
- 140–160 ms
- 160–200 ms
Цель:
- определить момент начала наблюдаемого изменения;
- измерить лаг;
- понять форму переходного процесса;
- измерить время стабилизации.
Повторить для остальных параметров.
Эксперимент 3: импульсное/кратковременное возмущение
Для stateful-параметров особенно важно измерить память системы.
Схема:
baseline -> parameter + δ на короткий интервал -> baseline
Например:
- 100 ms baseline;
- 10–20 ms изменение;
- возврат к baseline;
- наблюдение ещё 100–200 ms.
Измерить:
- насколько быстро появляется эффект;
- сохраняется ли он после возврата параметра;
- сколько времени DSP возвращается к исходному состоянию.
Для резонаторов это должно показать реальную длительность памяти low/band состояний.
Эксперимент 4: пары параметров
После одиночных sweep проверить взаимодействия минимум для наиболее связанных пар:
sourceLevel × outputLevelperiodicity × noiseLevelf0Hz × glottalOpenPhasef0Hz × glottalReturnPhaseresonanceFreq × resonanceGainresonanceFreq × resonanceBandwidthsourceLevel × resonanceGain
Цель — понять, можно ли считать эффекты параметров независимыми или их нужно восстанавливать совместно.
Какие данные логировать
Управляющий уровень
- все значения
VoiceControlState(t); - активные automation;
- момент каждой команды
set/animate.
Внутренний DSP trace
Минимально:
voicePhase;periodicSource;noiseSource;excitation;resonator1.low/resonator1.band;resonator2.low/resonator2.band;resonator3.low/resonator3.band;- отдельный выход каждого резонатора до суммирования;
valueдо clamp;valueпосле clamp.
Акустические признаки по окнам
Минимально:
- RMS / energy;
- zero crossing rate;
- autocorrelation;
- pitch estimate;
- periodicity estimate;
- spectral centroid;
- spectral flatness;
- спектральные пики;
- энергия по диапазонам;
- формантоподобные пики / спектральная огибающая;
- при необходимости LPC.
Важно: dominantFrequency рассматривать только как один из спектральных признаков, а не как прямой f0Hz.
Временные окна и частота логирования
Нужно отдельно проверить влияние throttling.
Текущий лог может скрывать значимую временную структуру. Поэтому для исследования желательно иметь максимально частый внутренний trace, а затем уже программно агрегировать его в окна.
Рекомендуемый подход:
- DSP trace — максимально близко к sample-level либо с контролируемым decimation;
- акустические признаки — вычислять по окнам 5/10/20/30/50 ms;
- overlap окон: 50–75% для плавного временного анализа;
- не смешивать частоту сбора данных и размер аналитического окна.
Что должно получиться
Построить экспериментальную карту:
VoiceControl parameter -> observable consequences
Для каждого параметра зафиксировать:
- какие признаки реагируют;
- направление реакции;
- масштаб реакции;
- лаг;
- длительность памяти;
- зависимость от других параметров;
- насколько параметр восстанавливаем из аудио.
Желательно оформить это в таблицу вида:
| Control | Наблюдаемые признаки | Лаг | Окно | Однозначность | Комментарий |
|---|---|---|---|---|---|
| f0Hz | autocorrelation peak, harmonic spacing | ... | ... | высокая/средняя/... | ... |
| resonance1Freq | spectral envelope / peak shift | ... | ... | ... | ... |
| ... | ... | ... | ... | ... | ... |
Критерий результата
После исследования должно стать понятно:
- Какие параметры
VoiceControlStateможно восстанавливать непосредственно из аудио. - Какие можно восстанавливать только совместно с другими параметрами.
- Какие параметры текущим набором признаков вообще не наблюдаются.
- Какие дополнительные признаки нужно добавить в логгер.
- Какой временной контекст нужен decoder'у для каждого класса параметров.
- Можно ли строить decoder как аналитическое/эвристическое преобразование или нужен оптимизационный/обучаемый подход.
Главный результат — не просто новый decoder, а физически и экспериментально подтверждённая модель соответствия между управляющим пространством синтезатора и наблюдаемым звуком во времени.
Ворклоги
Промежуточные выводы по временной причинности и наблюдаемости параметров
Проведены одиночные эксперименты по VoiceControlState -> DSP -> acoustic features для всех основных управляющих параметров.
Что показали эксперименты
При одиночном sweep, когда изменяется только один control при фиксированных остальных, многие параметры дают сильную корреляцию с наблюдаемыми акустическими признаками.
Наиболее выраженные результаты:
sourceLevelсильно связан сpeak,rms, величиной спектрального пика;periodicityтакже сильно отражается вpeak/rms, но эти признаки совпадают с амплитудными controls;f0Hzхорошо проявляется через pitch-related признаки, ZCR и распределение высокочастотной энергии;resonance1Freqхорошо проявляется через положение первого спектрального пика;resonance2Freqпроявляется через rolloff/formant-related признаки;resonance*Gainхорошо наблюдаются через амплитудные признаки;outputLevelпрактически идеально отражается вpeak/rms.
При этом noiseLevel, glottal-параметры, bandwidth-параметры и resonance3Freq текущим набором признаков наблюдаются значительно хуже.
Важная коррекция интерпретации
Высокая корреляция в одиночном sweep НЕ означает прямую восстанавливаемость параметра.
Нужно различать:
- Sensitivity — меняется ли наблюдаемый признак, когда мы изменяем control.
- Identifiability — можно ли по наблюдаемому звуку понять, что изменился именно этот control, а не другой.
Например:
sourceLevel,outputLevelиresonanceGainвсе сильно меняютrms/peak;periodicityв текущем эксперименте тоже сильно влияет на те же амплитудные признаки.
Следовательно, эти controls чувствительны и наблюдаемы, но пока не доказано, что они различимы между собой в реальном сценарии, где несколько параметров изменяются одновременно.
Текущее разбиение controls по характеру наблюдаемости
1. Частотные координаты — наиболее перспективны для прямого восстановления:
f0Hz;resonance1Freq;resonance2Freq;- потенциально
resonance3Freqпосле улучшения спектрального анализа.
Они меняют не только общую энергию, но и структуру спектра.
2. Амплитудные/масштабирующие controls — наблюдаемы, но смешиваются:
sourceLevel;outputLevel;resonance1Gain;resonance2Gain;resonance3Gain;- частично
periodicity.
Для них требуется совместное восстановление или дополнительные признаки, потому что похожий эффект может достигаться разными комбинациями параметров.
3. Формообразующие controls — текущий лог видит плохо:
glottalOpenPhase;glottalReturnPhase;resonance*Bandwidth;noiseLevel;- частично
resonance3Freq.
Для них, вероятно, нужны признаки формы периода, spectral envelope, harmonic/noise structure, LPC или иные более специализированные измерения.
Временные выводы
Во всех одиночных экспериментах реакция обнаруживалась практически сразу (~0.2 ms), а окно 20 ms оказалось достаточным для текущего набора признаков. Однако одинаковый лаг для всех параметров, вероятно, отражает прежде всего разрешение методики измерения и временную привязку окон, а не реальную физическую константу DSP.
Отдельно обнаружена длительная память резонаторов (~250 ms в текущем эксперименте). Эту величину нельзя пока считать универсальной: время затухания должно зависеть от frequency/bandwidth/Q и требует отдельного sweep по параметрам резонатора.
Что стало ясно про саму задачу decoder
Сценарий и акустический лог находятся на разных уровнях представления:
VoiceControlState -> внутреннее DSP-состояние -> waveform -> spectrum/features.
Управляющие параметры могут почти не меняться во времени, но порождать сложный высокочастотный waveform. Поэтому control-график не должен быть похож на график акустических признаков.
Для восстановления параметров нужно исследовать не соответствие одного control одному feature, а отображение:
vector(features over a time window) -> vector(controls).
Следующий принципиальный эксперимент должен проверять одновременные изменения нескольких controls. Именно он покажет реальную идентифицируемость, а не только чувствительность.
Практический вывод
Одиночные sweeps уже ответили на вопрос: «реагирует ли звук на конкретный control и какими признаками это видно?».
Следующий вопрос: «можем ли мы отличить изменение одного control от другого, когда они действуют одновременно?».
Также исследования показывают, что для дальнейшей работы нужен удобный интерактивный временной редактор: не для редактирования уже найденных JSON-сценариев, а как лаборатория ручного поиска звучаний и причинных связей между временными траекториями параметров и результатом.