📄 syncaltf.m
字号:
a21 = -1/tmp;
a22 = a11;
An = a11*Anold + a12*Cnold;
Bn = a11*Bnold + a12*Dnold;
Cn = a21*Anold + a22*Cnold;
Dn = a21*Bnold + a22*Dnold;
Anold = An;
Bnold = Bn;
Cnold = Cn;
Dnold = Dn;
end
end
Znr = (0.0 + w*RNr*LNr*i)/(RNr + w*LNr*i);
Hnum = Bn - Dn*Znr;
Hdem = Cn*Znr - An;
Zn = Hnum / Hdem;
% combine all parts together %
Zno = (Zn*Zo)/(Zn+Zo);
Hnum = Bvp - Dvp*Zno;
Hdem = Cvp*Zno - Avp;
Zp = Hnum / Hdem;
a11 = 1.0 + 0.0*i;
a12 = 0.0 + 0.0*i;
a21 = -1/Zn;
a22 = a11;
Ai = a11*Avp + a12*Cvp;
Bi = a11*Bvp + a12*Dvp;
Ci = a21*Avp + a22*Cvp;
Di = a21*Bvp + a22*Dvp;
Aiold = Ai;
Biold = Bi;
Ciold = Ci;
Diold = Di;
Ai = Ao*Aiold + Bo*Ciold;
Bi = Ao*Biold + Bo*Diold;
Ci = Co*Aiold + Do*Ciold;
Di = Co*Biold + Do*Diold;
Hnum = (Bi*Ci) - (Ai*Di);
Hdem = (Ci*Zor) - Ai;
if glotoc == 1
Hv = Hnum/Hdem;
else
Zsubf(l) = Zsubf(l)/(Zp + Zsubf(l));
Hv = Zsubf(l)*(Hnum/Hdem);
end
a11 = 1.0 + 0.0*i;
a12 = 0.0 + 0.0*i;
a21 = -1/Zo;
a22 = a11;
Ai = a11*Avp + a12*Cvp;
Bi = a11*Bvp + a12*Dvp;
Ci = a21*Avp + a22*Cvp;
Di = a21*Bvp + a22*Dvp;
Aiold = Ai;
Biold = Bi;
Ciold = Ci;
Diold = Di;
Ai = An*Aiold + Bn*Ciold;
Bi = An*Biold + Bn*Diold;
Ci = Cn*Aiold + Dn*Ciold;
Di = Cn*Biold + Dn*Diold;
Hnum = (Bi*Ci) - (Ai*Di);
Hdem = (Ci*Znr) - Ai;
if glotoc == 1
Hn = Hnum / Hdem;
else
Hn = Zsubf(l)*(Hnum/Hdem);
end
% TF(l) = Hn + Hv;
tmp = Hn + Hv;
TF(l) = 20.0*log10(abs(tmp));
l = l + 1;
w = w + df;
end
elseif exloc > 0 & exloc == NTS
% When excitation located at the velopharyngeal port.
% TFcaseC(tfra, glotoc, exloc, Nfft);
df = 2*pi*5000.0/Nfft;
w = df;
l = 1;
while l <= Nfft
%from glottis to excitation location, the velopharyngeal port. %
Avpold = 1 + 0*i;
Bvpold = 0 + 0*i;
Cvpold = 0 + 0*i;
Dvpold = 1 + 0*i;
for j=1:exloc,
z = Rs(j) + w*Ls(j)*i;
wa = Rw(j) + w*Lw(j)*i;
Zwall = Gp(j) + w*Cp(j)*i;
y = Zwall + 1/wa;
Z0 = (z/y)^0.5;
r = (z*y)^0.5;
Za = Z0*tanh(leng(j)/2.0*r);
Zb = Z0/sinh(leng(j)*r);
a11 = 1.0 + Za/Zb;
a12 = 2.0*Za + Za*(Za/Zb);
a21 = 1/Zb;
a22 = a11;
Avp = a11*Avpold + a12*Cvpold;
Bvp = a11*Bvpold + a12*Dvpold;
Cvp = a21*Avpold + a22*Cvpold;
Dvp = a21*Bvpold + a22*Dvpold;
Avpold = Avp;
Bvpold = Bvp;
Cvpold = Cvp;
Dvpold = Dvp;
end
if glotoc == 1
Zsubf(l) = Bvp/Dvp;
else
Hnum = Avp*Zsubf(l) + Bvp;
Hdem = Cvp*Zsubf(l) + Dvp;
Zsubf(l) = Hnum/Hdem;
end
%from velopharyngeal port to lips %
Aoold = 1 + 0*i;
Boold = 0 + 0*i;
Coold = 0 + 0*i;
Doold = 1 + 0*i;
for j=exloc+1:NING,
z = Rs(j) + w*Ls(j)*i;
wa = Rw(j) + w*Lw(j)*i;
Zwall = Gp(j) + w*Cp(j)*i;
y = Zwall + 1/wa;
Z0 = (z/y)^0.5;
r = (z*y)^0.5;
Za = Z0*tanh(leng(j)/2.0*r);
Zb = Z0/sinh(leng(j)*r);
a11 = 1.0 + Za/Zb;
a12 = -(2.0*Za + Za*(Za/Zb));
a21 = -1/Zb;
a22 = a11;
Ao = a11*Aoold + a12*Coold;
Bo = a11*Boold + a12*Doold;
Co = a21*Aoold + a22*Coold;
Do = a21*Boold + a22*Doold;
Aoold = Ao;
Boold = Bo;
Coold = Co;
Doold = Do;
end
Zor = (0.0 + w*Rr*Lr*i)/(Rr + w*Lr*i);
Hnum = Bo - Do*Zor;
Hdem = Co*Zor - Ao;
Zo = Hnum / Hdem;
%from velopharyngeal port to nostrils %
Anold = 1.0 + 0.0*i;
Bnold = 0.0 + 0.0*i;
Cnold = 0.0 + 0.0*i;
Dnold = 1.0 + 0.0*i;
for j=1:NTsno,
z = RNs(j) + w*LNs(j)*i;
wa = RNw(j) + w*LNw(j)*i;
Zwall = GNp(j) + w*CNp(j)*i;
y = Zwall + 1/wa;
Z0 = (z/y)^0.5;
r = (z*y)^0.5;
Za = Z0*tanh(NTslen/2.0*r);
Zb = Z0/sinh(NTslen*r);
a11 = 1.0 + Za/Zb;
a12 = -(2.0*Za + Za*(Za/Zb));
a21 = -(1/Zb);
a22 = a11;
An = a11*Anold + a12*Cnold;
Bn = a11*Bnold + a12*Dnold;
Cn = a21*Anold + a22*Cnold;
Dn = a21*Bnold + a22*Dnold;
Anold = An;
Bnold = Bn;
Cnold = Cn;
Dnold = Dn;
if NSIN > 0 & (j == Nsin(1) | j == Nsin(2))
if j == Nsin(1)
k = 1;
end
if j == Nsin(2)
k = 2;
end
tmp = Rsin(k) + w*Lsin(k)*i;
tmp = tmp + 1/(0.0 + w*Csin(k)*i);
a11 = 1.0 + 0.0*i;
a12 = 0.0 + 0.0*i;
a21 = -1/tmp;
a22 = a11;
An = a11*Anold + a12*Cnold;
Bn = a11*Bnold + a12*Dnold;
Cn = a21*Anold + a22*Cnold;
Dn = a21*Bnold + a22*Dnold;
Anold = An;
Bnold = Bn;
Cnold = Cn;
Dnold = Dn;
end
end
Znr = (0.0 + w*RNr*LNr*i)/(RNr + w*LNr*i);
Hnum = Bn - Dn*Znr;
Hdem = Cn*Znr - An;
Zn = Hnum / Hdem;
%combine all parts together %
Zno = (Zn*Zo) / (Zn+Zo);
a11 = 1.0 + 0.0*i;
a12 = 0.0 + 0.0*i;
a21 = -1/Zn;
a22 = a11;
Ai = Ao*a11 + Bo*a21;
Bi = Ao*a12 + Bo*a22;
Ci = Co*a11 + Do*a21;
Di = Co*a12 + Do*a22;
Hnum = Bi*Ci - Ai*Di;
Hdem = Ci*Zor - Ai;
if glotoc == 1
Hv = Hnum / Hdem;
else
Hv = Zsubf(l) * (Hnum/Hdem);
end
a11 = 1.0 + 0.0*i;
a12 = 0.0 * 0.0*i;
a21 = -1/Zo;
a22 = a11;
Ai = An*a11 + Bn*a21;
Bi = An*a12 + Bn*a22;
Ci = Cn*a11 + Dn*a21;
Di = Cn*a12 + Dn*a22;
Hnum = Bi*Ci - Ai*Di;
Hdem = Ci*Znr - Ai;
if glotoc == 1
Hn = Hnum / Hdem;
else
Hn = Zsubf(l) * (Hnum / Hdem);
end
% TF(l) = Hn + Hv;
tmp = Hn + Hv;
TF(l) = 20.0*log10(abs(tmp));
l = l + 1;
w = w + df;
end
elseif exloc > NTS
% When excitation located in the oral tract.
% TFcaseD(tfra, glotoc, exloc, Nfft);
df = 2*pi*5000.0/Nfft;
w = df;
l = 1;
while l <= Nfft,
%from glottis to velopharyngeal port %
Avpold = 1 + 0*i;
Bvpold = 0 + 0*i;
Cvpold = 0 + 0*i;
Dvpold = 1 + 0*i;
for j=1:NTS,
z = Rs(j) + w*Ls(j)*i;
wa = Rw(j) + w*Lw(j)*i;
Zwall = Gp(j) + w*Cp(j)*i;
y = Zwall + 1/wa;
Z0 = (z/y)^0.5;
r = (z*y)^0.5;
Za = Z0*tanh(leng(j)/2.0*r);
Zb = Z0/sinh(leng(j)*r);
a11 = 1.0 + Za/Zb;
a12 = 2.0*Za + Za*(Za/Zb);
a21 = 1/Zb;
a22 = a11;
Avp = a11*Avpold + a12*Cvpold;
Bvp = a11*Bvpold + a12*Dvpold;
Cvp = a21*Avpold + a22*Cvpold;
Dvp = a21*Bvpold + a22*Dvpold;
Avpold = Avp;
Bvpold = Bvp;
Cvpold = Cvp;
Dvpold = Dvp;
end
if glotoc == 1
Zsubf(l) = Bvp/Dvp;
else
Hnum = Avp*Zsubf(l) + Bvp;
Hdem = Cvp*Zsubf(l) + Dvp;
Zsubf(l) = Hnum/Hdem;
end
%from velopharyngeal port to excitation location %
Aolold = 1.0 + 0.0*i;
Bolold = 0.0 + 0.0*i;
Colold = 0.0 + 0.0*i;
Dolold = 1.0 + 0.0*i;
for j=NTS+1:exloc,
z = Rs(j) + w*Ls(j)*i;
wa = Rw(j) + w*Lw(j)*i;
Zwall = Gp(j) + w*Cp(j)*i;
y = Zwall + 1/wa;
Z0 = (z/y)^0.5;
r = (z*y)^0.5;
Za = Z0*tanh(leng(j)/2.0*r);
Zb = Z0/sinh(leng(j)*r);
a11 = 1.0 + Za/Zb;
a12 = 2.0*Za + Za*(Za/Zb);
a21 = 1/Zb;
a22 = a11;
Aol = a11*Aolold + a12*Colold;
Bol = a11*Bolold + a12*Dolold;
Col = a21*Aolold + a22*Colold;
Dol = a21*Bolold + a22*Dolold;
Aolold = Aol;
Bolold = Bol;
Colold = Col;
Dolold = Dol;
end
%from excitation location to lips %
Aouold = 1 + 0*i;
Bouold = 0 + 0*i;
Couold = 0 + 0*i;
Douold = 1 + 0*i;
for j=exloc+1:NING,
z = Rs(j) + w*Ls(j)*i;
wa = Rw(j) + w*Lw(j)*i;
Zwall = Gp(j) + w*Cp(j)*i;
y = Zwall + 1/wa;
Z0 = (z/y)^0.5;
r = (z*y)^0.5;
Za = Z0*tanh(leng(j)/2.0*r);
Zb = Z0/sinh(leng(j)*r);
a11 = 1.0 + Za/Zb;
a12 = -(2.0*Za + Za*(Za/Zb));
a21 = -1/Zb;
a22 = a11;
Aou = a11*Aouold + a12*Couold;
Bou = a11*Bouold + a12*Douold;
Cou = a21*Aouold + a22*Couold;
Dou = a21*Bouold + a22*Douold;
Aouold = Aou;
Bouold = Bou;
Couold = Cou;
Douold = Dou;
end
Zor = (0.0 + w*Rr*Lr*i)/(Rr + w*Lr*i);
Hnum = Bou - Dou*Zor;
Hdem = Cou*Zor - Aou;
Zo = Hnum / Hdem;
%from velopharyngeal port to nostrils %
Anold = 1.0 + 0.0*i;
Bnold = 0.0 + 0.0*i;
Cnold = 0.0 + 0.0*i;
Dnold = 1.0 + 0.0*i;
for j=1:NTsno,
z = RNs(j) + w*LNs(j)*i;
wa = RNw(j) + w*LNw(j)*i;
Zwall = GNp(j) + w*CNp(j)*i;
y = Zwall + 1/wa;
Z0 = (z/y)^0.5;
r = (z*y)^0.5;
Za = Z0*tanh(NTslen/2.0*r);
Zb = Z0/sinh(NTslen*r);
a11 = 1.0 + Za/Zb;
a12 = -(2.0*Za + Za*(Za/Zb));
a21 = -(1/Zb);
a22 = a11;
An = a11*Anold + a12*Cnold;
Bn = a11*Bnold + a12*Dnold;
Cn = a21*Anold + a22*Cnold;
Dn = a21*Bnold + a22*Dnold;
Anold = An;
Bnold = Bn;
Cnold = Cn;
Dnold = Dn;
if NSIN > 0 & (j == Nsin(1) | j == Nsin(2))
if j == Nsin(1)
k = 1;
end
if j == Nsin(2)
k = 2;
end
tmp = Rsin(k) + w*Lsin(k)*i;
tmp = tmp + 1/(0.0 + w*Csin(k)*i);
a11 = 1.0 + 0.0*i;
a12 = 0.0 + 0.0*i;
a21 = -1/tmp;
a22 = a11;
An = a11*Anold + a12*Cnold;
Bn = a11*Bnold + a12*Dnold;
Cn = a21*Anold + a22*Cnold;
Dn = a21*Bnold + a22*Dnold;
Anold = An;
Bnold = Bn;
Cnold = Cn;
Dnold = Dn;
end
end
Znr = (0.0 + w*RNr*LNr*i)/(RNr + w*LNr*i);
Hnum = Bn - Dn*Znr;
Hdem = Cn*Znr - An;
Zn = Hnum / Hdem;
%combine all parts together %
tmp = (Zsubf(l)*Zn) / (Zsubf(l)+Zn);
Hnum = Aol*tmp + Bol;
Hdem = Col*tmp + Dol;
Zp = Hnum / Hdem;
tmp = Zp / (Zp+Zo);
Hnum = Bou*Cou - Aou*Dou;
Hdem = Cou*Zor - Aou;
Hv = tmp*(Hnum/Hdem);
tmp = Zo/(Zp+Zo);
a11 = 1.0+0.0*i;
a12 = 0.0+0.0*i;
a21 = -1/Zsubf(l);
a22 = a11;
Ai = a11*Aol + a12*Col;
Bi = a11*Bol + a12*Dol;
Ci = a21*Aol + a22*Col;
Di = a21*Bol + a22*Dol;
Aiold = Ai;
Biold = Bi;
Ciold = Ci;
Diold = Di;
Ai = An*Aiold + Bn*Ciold;
Bi = An*Biold + Bn*Diold;
Ci = Cn*Aiold + Dn*Ciold;
Di = Cn*Biold + Dn*Diold;
Hnum = Bi*Ci - Ai*Di;
Hdem = Ci*Znr - Ai;
Hn = tmp * (Hnum/Hdem);
% TF(l) = Hn + Hv;
tmp = Hn + Hv;
TF(l) = 20.0*log10(abs(tmp));
l = l + 1;
w = w + df;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -