Скорость потока |
Предыдущая Содержание Следующая |
|
Описывается следующим разностным уравнением:
Так как вид формул параметров, входящих в данное уравнение, в разных публикациях описан по-разному (однако при элементарной проверке оказывается неверным), приводится решение основанное на здравом смысле, которое не претендует на верное, однако дает результат очень похожий на приводимый в тех же публикациях. где: Cx - коэффициент динамического сопротивления, ~1.4 r - плотность воздуха, 0.00114 г/см3 m - коэффициент вязкости воздуха, 0.000186 г/(см*сек) W(t) - скорость потока в предыдущем периоде времени дискретизации Dp(t + Dt) - перепад давления над голосовой щелью, ~1500 Pa S(t + Dt) - площадь голосовой щели, обычно, 0 ... 0,4 см2 a = 1 - e^( -12 * μ / S(t + Δt) / ρ * dT ), требуется устранить неопределенность деления на ноль dT - период времени дискретизации, сек
Замечание Разные авторы указывают на необходимость учета влияния сужения щели. Корректировать предлагается увеличением эффективной длины голосовой щели. В работе Сорокина "Синтез речи" приводятся 2 формулы: и где для 2-ой формулы, S - площадь трахеи, 3 см2 Sg - площадь сужения, в пределах < 0,16 * S
Однако, если приглядеться к формулам, то можно заметить в 1-ой формуле неадекватность - при увеличении площади растёт длина, хотя должно быть наоборот. Вторая формула смущает тем, что при любом Sg происходит удлинение. Формула 1 приведена в "Ф. Морз. Колебания и звук", стр. 261, однако вывод её, чтобы проверить откуда она берётся, я не нашел. Комментарий И. Макарова На аэродинамику это очень мало влияет. Кодprivate int m_dP;// = 1500;//Pa private double m_k1; private double m_H;// = 12 * 0.000186 * 1.5;//12*u*h private double m_Wt = 0;//объемная скорость на предыдущем шаге private double m_W = 0;//объемная скорость в текущем шаге /** * h - см, глубина голосовой щели * dP - Pa, перепад давления ~1500 Pa */ public VoicingSource(int sampleRate, double h, int dP) { m_k1 = -12 * 0.000186 / 0.00114 / sampleRate; m_dP = dP; m_H = 12 * 0.000186 * h; } /** * расчет скорость воздушного потока по площади голосовой щели * вызывать только один раз за период! * @param S - площадь голосовой щели, 0-0.2 см^2 * @return объемная скорость воздушного потока, 0...200 sm^3/s */ public double calculateSpeed(double S) {// S = 0 ... 0,2 sm^2, площадь голосовой щели /* * Ro = 0.00114 g/sm^3 плотность воздуха * u = 0.000186 g/(sm*s) коэффициент вязкости воздуха * h = 1.5 sm глубина голосовой щели * dP = 1500.0 Pa перепад давления над голосовой щелью * Cx = 1.4 коэффициент динамического сопротивления * * alpha = 1 - Math.pow(Math.E, -12*u/Ro/sampleRate/(S<0.0001?0.0001:S)); * k1 = 12 * u * h; * k2 = alpha / k1 * Cx * Ro; * W = 0...180 скорость воздушного потока sm^3 * W = (Math.sqrt(1.0-2*k2*(alpha*(Wt-dP*S*S/k1)-Wt))-1.0)/k2; */ double alpha = 1.0 - Math.exp( m_k1 / (S<0.0001?0.0001:S) ); double k1 = m_H;//здесь можно учесть удлинение щели при уменьшении площади double k2 = alpha / k1 * 0.001596; m_Wt = m_W; m_W = (Math.sqrt(1.0-2.0*k2*(alpha*(m_Wt-m_dP*S*S/k1)-m_Wt))-1.0)/k2;
return m_W; } /** * левая производная от скорости, +10...-50 sm^3/s */ public double getPulse() { return m_W - m_Wt; }
|
Предыдущая Содержание Следующая |