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 + -
显示快捷键?