turnoise.m
来自「这是一个用于语音信号处理的工具箱」· M 代码 · 共 172 行
M
172 行
% generate unvoiced source data, i.e., turbulence noise source
% gen_exgltu(sp, timex)
% smpfrq = 20000;
% TNCRN = 27;
% TNturbg = 20;
[minarea,inlet]=min(area(vfno,60:-1:1));
inlet=61-inlet;
outlet=inlet+1;
clear Uvvn;
if TN_place(sfno)==1
% case 1: /* At the Center of the Maximal Constriction */
tnnum = 1;
Uvvn = zeros(tnnum);
mod2 = rem(outlet-inlet,2);
if (mod2)
tnloc = ceil((inlet+outlet)/2.0) + 1;
Uvvc = Uv(tnloc);
% Uvvn(1) = turbonoise(sp, Uvvc);
%function [Uturbn]=turnoise(Uvvc,smpfrq)
% turbulence noise generation
Fg = 500.0; %Uvvca = 0.0;
rho = 1.14e-3;
mu = 1.86e-4;
Coef = 2*pi*Fg/smpfrq;
Uvvca = Uvvca + (Uvvc - Uvvca)*Coef;
Reynum = 4.0*rho*rho*Uvvca*Uvvca/(pi*mu*mu*minarea*minarea);
Rturbon = 0.5*rho*abs(Uvvca)/(minarea*minarea);
randnumber = rand(1)-0.5;
gennoise = Reynum - (TN_CRN(sfno)*100.0);
if (gennoise > 0.0)
Ppn = TN_turbg(sfno)*0.0000001*gennoise*randnumber;
Uturbn = Ppn/Rturbon;
else
Uturbn = 0.0;
end
Uvvn(1) = Uturbn;
else
tnloc = (inlet + outlet ) / 2 + 1;
Uvvc = Uv(tnloc);
% Uvvn(1) = turbonoise(sp, Uvvc);
%function [Uturbn]=turnoise(Uvvc,smpfrq)
% turbulence noise generation
Fg = 500.0; %Uvvca = 0.0;
rho = 1.14e-3;
mu = 1.86e-4;
Coef = 2*pi*Fg/smpfrq;
Uvvca = Uvvca + (Uvvc - Uvvca)*Coef;
Reynum = 4.0*rho*rho*Uvvca*Uvvca/(pi*mu*mu*minarea*minarea);
Rturbon = 0.5*rho*abs(Uvvca)/(minarea*minarea);
randnumber = rand(1)-0.5;
gennoise = Reynum - (TN_CRN(sfno)*100.0);
if (gennoise > 0.0)
Ppn = TN_turbg(sfno)*0.0000001*gennoise*randnumber;
Uturbn = Ppn/Rturbon;
else
Uturbn = 0.0;
end
Uvvn(1) = Uturbn;
end
elseif TN_place(sfno)==2
% case 2: /* Downstream from the Maximal Constriction */
tnnum = 1;
tnloc = outlet + 3;
Uvvn = zeros(tnnum);
Uvvc = Uv(tnloc);
% Uvvn(1) = turbonoise(sp, Uvvc);
%function [Uturbn]=turnoise(Uvvc,smpfrq)
% turbulence noise generation
Fg = 500.0; %Uvvca = 0.0;
rho = 1.14e-3;
mu = 1.86e-4;
Coef = 2*pi*Fg/smpfrq;
Uvvca = Uvvca + (Uvvc - Uvvca)*Coef;
Reynum = 4.0*rho*rho*Uvvca*Uvvca/(pi*mu*mu*minarea*minarea);
Rturbon = 0.5*rho*abs(Uvvca)/(minarea*minarea);
randnumber = rand(1)-0.5;
gennoise = Reynum - (TN_CRN(sfno)*100.0);
if (gennoise > 0.0)
Ppn = TN_turbg(sfno)*0.0000001*gennoise*randnumber;
Uturbn = Ppn/Rturbon;
else
Uturbn = 0.0;
end
Uvvn(1) = Uturbn;
elseif TN_place(sfno)==3
% case 3: /* Upstream from the Maximal Constriction */
tnnum = 1;
tnloc = inlet + 1;
Uvvn = zeros(tnnum);
Uvvc = Uv(tnloc);
% Uvvn(1) = turbonoise(sp, Uvvc);
%function [Uturbn]=turnoise(Uvvc,smpfrq)
% turbulence noise generation
Fg = 500.0; %Uvvca = 0.0;
rho = 1.14e-3;
mu = 1.86e-4;
Coef = 2*pi*Fg/smpfrq;
Uvvca = Uvvca + (Uvvc - Uvvca)*Coef;
Reynum = 4.0*rho*rho*Uvvca*Uvvca/(pi*mu*mu*minarea*minarea);
Rturbon = 0.5*rho*abs(Uvvca)/(minarea*minarea);
randnumber = rand(1)-0.5;
gennoise = Reynum - (TN_CRN(sfno)*100.0);
if (gennoise > 0.0)
Ppn = TN_turbg(sfno)*0.0000001*gennoise*randnumber;
Uturbn = Ppn/Rturbon;
else
Uturbn = 0.0;
end
Uvvn(1) = Uturbn;
elseif TN_place(sfno)==4
% case 4: /* Distributed along the Constriction Region */
tnnum = outlet - inlet + 1;
tnloc = inlet + 1;
Uvvn = zeros(tnnum);
for k=inlet:outlet,
Uvvc = Uv(k+1);
% Uvvn(k+1-inlet) = turbonoise(sp, Uvvc);
% function [Uturbn]=turnoise(Uvvc,smpfrq)
% turbulence noise generation
Fg = 500.0; %Uvvca = 0.0;
rho = 1.14e-3;
mu = 1.86e-4;
Coef = 2*pi*Fg/smpfrq;
Uvvca = Uvvca + (Uvvc - Uvvca)*Coef;
Reynum = 4.0*rho*rho*Uvvca*Uvvca/(pi*mu*mu*minarea*minarea);
Rturbon = 0.5*rho*abs(Uvvca)/(minarea*minarea);
randnumber = rand(1)-0.5;
gennoise = Reynum - (TN_CRN(sfno)*100.0);
if (gennoise > 0.0)
Ppn = TN_turbg(sfno)*0.0000001*gennoise*randnumber;
Uturbn = Ppn/Rturbon;
else
Uturbn = 0.0;
end
Uvvn(k+1-inlet) = Uturbn;
end
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?