⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syncaltf.m

📁 这是一个用于语音信号处理的工具箱
💻 M
📖 第 1 页 / 共 2 页
字号:
				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 + -