gen_shim.m

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

M
60
字号
% gen_shim.m

function [pert_para_av]=gen_shim(FG_f0,FG_t0,FG_av,FG_g0,JS_jit,JS_jfilt,JS_shm,JS_sfilt)
% Generate amplitude(av) perturbation (shimmer).

 	ptr_shm_delay=0;
%	FG_f0=1;FG_t0=2;FG_av=3;FG_g0=4;JS_jit=5;JS_jfilt=6;JS_shm=7;JS_sfilt=8;
	scale = 1.0;
	av = FG_av;
	coeff = JS_sfilt*0.01; % shimmer filter coefficient

	rnd = randgau;                  % random number for shimmer 
	max_per = av*(JS_shm/1000.0);       % multiply gain to shimmer 
	per = 2.0*rnd*max_per;                 % multiply gain to shimmer 

% if first order iir or fir filter is used, pre-scale by gain factor so
% that extent of perturbation is same as before.
 
	if (coeff > 0.0)

% filter for shimmer noise
% mod_shm(fltcoef, func, shm)
% new source model shimmer first order filter.
% value of the func pointer decides if the filter is fir or iir filter.
% equation of the form: 
% iir: y(n) = a*y(n-1) + x(n)
% fir: y(n) = a*x(n-1) + x(n)
 
	  if (JS_sfilt > 0.0) 
		  per = (1.0 - JS_sfilt/100.0) * per;
	  end        
	  [per,ptr_shm_delay] = fir_iir(ptr_shm_delay,per,JS_sfilt/100.0,1);

	elseif (coeff < 0.0) 
		
	  if (JS_sfilt > 0.0) 
		  per = (1.0 - JS_sfilt/100.0) * per;
	  end        
	  [per,ptr_shm_delay] = fir_iir(ptr_shm_delay,per, JS_sfilt/100.0,0);
	end

% highpass filter is specified. 
	if (coeff >= -1.0 & coeff < 0.0)
		scale = (1.0-coeff+(coeff*coeff))^0.5;

% lowpass filter is specified. 
	elseif (coeff < 1.0 & coeff > 0.0)
		scale = (((1.0-coeff)*(1.0-coeff))/(1.0+coeff))^0.5;
	end

	per = per/scale;
% if av is very low (only due to perturbation), then reject and
% assign the source parameter to frame parameter.
 
	pert_para_av = 0.0;
	if (av ~= 0.0)
		pert_para_av = av + per;
	end
	

⌨️ 快捷键说明

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