gen_src.m

来自「这是一个用于语音信号处理的工具箱」· M 代码 · 共 95 行

M
95
字号
% gen_src.m

% ****************** FUNCTION and VARIABLE DECLARATIONS *****************
% UNITY_CNST=14.49198910817;
% NUM_NOISE_TRMS=16;
% INTG(A,B,C)     (A + (C*B))
% NO=0;


% Main function for source waveform generation.

% int gen_syn_src()
%FG_f0=99;FG_t0=101;FG_av=60;FG_g0=1;JS_jit=60;JS_jfilt=0;JS_shm=60;JS_sfilt=0;
%LF_ee=60;LF_tp=41;LF_te=55;LF_tc=58;LF_ta=4;An_ah=60;An_afilt=0;exc_inc_value=0;
%sftime=0;sfdur=1;

%       float   fbegt, fdurt, fendt, ftimep, ftimestep;
%       int     sampf, value;

	sfno;
	samp_rate = 10000.0;
	value = jsaspsg(sfno);  % refer to excapply.m %
	
%       LF_set = (LF_par *)get_LFpar(); /* get parameters from slider panels */
%       FG_set = (FG *)get_FGpar();
%       if (value & 01)
%               JS_set = (JS *)get_JSpar();
%       if ((value >> 1) & 01)
%               An_set = (Aspi *)get_aspi();
%       else {
%               free(noisesamp);
%               noisesamp = (double *)NULL;
%       }

	fend(sfno) = ftime(sfno) + fdur(sfno);

%       if (fdurt <= 0) {
%               ftime_notice();
%               return;
%       }
	
	if (value==1 | value==3 | value==5 | value==7)

% generate amplitude(av) perturbation first 

pert_para_av=gen_shim(FG_f0(sfno),FG_t0(sfno),FG_av(sfno),FG_g0(sfno),JS_jit(sfno),JS_jfilt(sfno),JS_shm(sfno),JS_sfilt(sfno));

% generate pitch(T0, actually F0) perturbation 
	pert_para_f0=gen_jitt(FG_f0(sfno),FG_t0(sfno),FG_av(sfno),FG_g0(sfno),JS_jit(sfno),JS_jfilt(sfno),JS_shm(sfno),JS_sfilt(sfno));
	
	else
		pert_para_av = FG_av(sfno);
		pert_para_f0 = 10000.0/FG_t0(sfno);
	end

% generate voicing source by LF model 

	sampf = round(samp_rate/pert_para_f0);
	clear pulsesamp dpulsesamp noisesamp sourcesamp sourcepsd;
	if (exist('pulsesamp') == 0)
		pulsesamp = zeros(1,sampf);
	end
	if (exist('dpulsesamp') == 0)
		dpulsesamp = zeros(1,sampf);
	end
	if (exist('noisesamp') == 0)
		noisesamp = zeros(1,sampf);
	end
	if (exist('sourcesamp') == 0)
		sourcesamp = zeros(1,sampf);
	end
	[pulsesamp,dpulsesamp]=genlfsrc(LF_ee(sfno),LF_tp(sfno),LF_te(sfno),...
		LF_tc(sfno),LF_ta(sfno),sampf);

% generate aspiration noise 

	if (value==2 | value==3 | value==6 | value==7)
		noisesamp=gen_aspi(An_ah(sfno), An_afilt(sfno), sampf);
	end

% Generate the actual source excitation by combining additional gain and
% include subglottal and source-tract interaction.

	for j=1:sampf,
		pulsesamp(j) = pulsesamp(j)*pert_para_av;
		sourcesamp(j) = (noisesamp(j) + pulsesamp(j)) * FG_g0(sfno);
	end

%       return(sampf);
	
	sourcepsd=fftpsd(sourcesamp,sampf);



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?