Производная потока

Предыдущая  Содержание  Следующая  V*D*V

Модель Клатта "natural source"

Форма описывается формулой на время открытой щели:

 

dW(t) = k1* t * t - k2 * t * t * t, при t < Topen

 

Формула для расчета:

 

dV/dt = dW(t) = sum over i=1,2,...,n of { a - (i * b) } = a * n  -  b / 2 * n * n

где:

a и b - константы, контролирующие форму и амплитуду кривой во время цикла открытой щели.

b = gain / (nopen * nopen)

a = (b * nopen) / 3

gain - требуемая амплитуда импульса. У Клатта gain = 1920000.

 

natural source

natural source

Код

 /**

  * производная объемной скорости по методу Клатта

  * @param phase - фаза

  * @param Topen - время открытой щели

  * @param gain - уровень. макс = 5.81*32768

  * @return -макс ... +макс/3

  */

 private static double m_a = 0;

 private static double m_b = 0;

 public static double getKlattPulse(int phase, int Topen, double gain)

 {

         if( phase < Topen ) {

                 if( phase == 0 ) {

                         m_b = gain / Topen / Topen;

                         m_a = m_b * Topen / 3;

                         m_wave = 0.0;

                 }

                 m_a -= m_b;

                 m_wave += m_a;

                 return m_wave;

         }

         return 0.0;

 }

Модель Клатта impulsive source

Импульс получается в результате отклика фильтра нижних частот 2-го порядка на единичный импульс. Параметры фильтра пропорциональны времени открытой щели.

 

impulsive source

impulsive source

Код

 private static double[] m_pulse = { 0.0, 13000000.0, -13000000.0 };

 private static Resonator m_resPulse;

 private static double m_wave;

 public static void setImpulsiveParam(int period, int sampleRate) {

         m_resPulse = new Resonator( 0, sampleRate / period, sampleRate, true );

         m_resPulse.a *= period * period * 0.00026;

 }

 public static double getImpulsiveSource(int phase) {

         m_wave = 0;

         if( phase < m_pulse.length ) {

                 m_wave = m_pulse[phase];

         }

         return m_resPulse.proc( m_wave );

 }

 

Комментарий И. Макарова

В физической реальности источник с разрывом (как у Клатта) никогда не встречается. Так что Клаттовская модель физически и физиологически неадекватна.

Модель без разрывов

 

Описывается формулой:

где:

dW(t) - производная объёмной скорости, см3/сек2

A1 - положительный максимум, обычно около 10 см3/сек2

A2 - отрицательный максимум, обычно около 50 см3/сек2

 

 

Вид импульса

Вид импульса

 

Физическая интерпретация параметров модели:

 

Тperiod – длительность одного цикла колебаний голосовых складок

Т3 – момент, соответствующий моменту смыкания голосовых складок.

Моменту смыкания предшествует момент, когда скорость сведения (смыкания)  голосовых складок максимальна – это Т2.

Т1 – момент, когда скорость разведения складок максимальна.

Соответственно А (с индексами) – это амплитуды, определяющие максимально возможное разведение складок.

Код

  /**

    * производная от объёмной скорости, параметрическая формула

    * @param period - период

    * @param phase - фаза

    * @param Ap - максимальная положительная амплитуда, 10 см3

    * @param Am - максимальная отрицательная амплитуда, 50 см3

    * @return +10...-50 см^3/с^2

    */

  public static double getParametricPulse(int period, int phase, double Ap, double Am)

   {

         /*

          * типичные временные параметры (t - время открытой щели):

          * t1 = t * 45 / 100

          * t2 = t * 95 / 100

          * t3 = t

          */

         //

         int t1 = period * 32 / 100;

         int t2 = period * 68 / 100;

         int t3 = period * 72 / 100;

         double dW = 0.0;

         if( phase <= t1 )

                 dW = Ap * Math.sin( Math.PI * phase / 2 / t1 );

         else if( phase <= t2 )

                 dW = (Ap + Am) * Math.cos( Math.PI * ( phase - t1 ) / ( t2 - t1 ) / 2 ) - Am;

         else if( phase <= t3 )

                 dW = -Am * ( t3 - phase ) * ( t3 - phase ) / ( t3 - t2 ) / ( t3 - t2 );

         return dW;

   }

Замечание

Данный вид модели взят из работ Сорокина, в которых он противоречит сам себе. В работе "Синтез речи" он называет эту модель моделью производной потока, в работе "Обратная задача для голосового источника" она называется моделью производной от площади голосовой щели. Что она моделирует на самом деле непонятно. Хотя, если посмотреть внимательно, формы этих функций очень похожи.

 

Комментарий И. Макарова:

На самом деле, здесь нет никакого противоречия. Дело вот в чем.

В рамках классической теории речеобразования (а формантный синтезатор базируется именно на этой теории) предполагается, что голосовые складки взаимодействуют с вокальным трактом только одним способом, а именно – порождают сигнал, возбуждающий воздушные колебания в тракте. Из этого предположения (которое – строго говоря – не является справедливым) следует вот какой вывод – графики изменения функции голосовой щели и графики соответствующей объёмной скорости имеют очень похожую форму. Как следствие этого, производная площади голосовой щели и производная объёмной скорости также имеют очень похожую форму. А раз так, то модель, изначально использованная для описания производной от объёмной скорости (как в "Синтезе речи"), может быть использована и для описания производной от голосовой щели (что и было сделано в статье).

 

Предыдущая  Содержание  Следующая