source_apply.m
来自「这是一个用于语音信号处理的工具箱」· M 代码 · 共 116 行
M
116 行
%Callback function for the apply button from the
%Source Modification window
%
%Author Karthik
%Used functions originally written by Albert Hsiao for
%creating the excitation waveforms
%Modified by D. G. Childers 2/25/98 to clean it up and remove time varying features
Lens = Lens_array(segment_no); %Lens_array=Pitch
start_point = (segment_no*Lens) - (Lens -1);
end_point = start_point + Lens-1;
if exist ('Nframe1')
Nframe = Nframe1;
end
if file_flag == 1 % excitation1 waveform is from file
%Read constant values from the source modification window
if uvindicate(segment_no) == 1
Vgain(segment_no) = eval(get(src_gain_edit,'String'));
gm=Vgain(segment_no)-Ngain(segment_no)-Ncof(segment_no,1);
if Vgain(segment_no)==0
amp=0;
else
amp=sqrt(gm*Lens/sum(temp_excitation.^2));
end
excitation1(start_point:end_point) = amp.*excitation1(start_point:end_point);
else
excitation1(start_point:end_point) = 0;
end
if get(src_noise_checkbox,'Value') == 1
Ncof1(segment_no,1) = eval(get(src_asgain_edit,'String'));
Ncof1(segment_no,2) = eval(get(src_amp1_edit,'String'));
Ncof1(segment_no,3) = eval(get(src_offset_edit,'String'));
Ncof1(segment_no,4) = eval(get(src_amp2_edit,'String'));
Ncof1(segment_no,5) = eval(get(src_dur_edit,'String'));
Ngain1(segment_no) = eval(get(src_ngain_edit,'String'));
% 2. calculate the noise excitation
Aspgain=Ncof1(segment_no,1); % aspiration noise gain
Amp1=Ncof1(segment_no,2);
Offset=Ncof1(segment_no,3);
Amp2=Ncof1(segment_no,4);
Duration=Ncof1(segment_no,5);
Fgain=Ngain1(segment_no); % fricative noise gain
noise_excitation = nspuls(Amp1,Offset,Amp2,Duration,Lens,Aspgain,Fgain);
noise_excitation = (1/10).*noise_excitation;
else
noise_excitation = zeros(1,Lens);
end
% 3. plot the combined the excitation1 waveform (voiced+unvoiced)
excitation1(start_point:end_point) = excitation1(start_point:end_point) + noise_excitation;
elseif file_flag == 0
if uvindicate(segment_no) == 1 %Voiced segment
Lcof1(segment_no,1)= 1000*eval(get(src_ee_edit,'String'));
Lcof1(segment_no,2)= eval(get(src_tp_edit,'String'));
Lcof1(segment_no,3)=eval(get(src_te_edit,'String'));
Lcof1(segment_no,4)=eval(get(src_ta_edit,'String'));
Lcof1(segment_no,5)=eval(get(src_tc_edit,'String'));
Ee = Lcof1(segment_no,1);
Tp = Lcof1(segment_no,2);
Te = Lcof1(segment_no,3);
Ta = Lcof1(segment_no,4);
Tc = Lcof1(segment_no,5);
Lens=eval(get(src_pp_edit,'String'));
temp_excitation = lfpuls(Tp,Te,Ta,Tc,Ee,Lens);
Vgain(segment_no) = eval(get(src_gain_edit,'String'));
gm=Vgain(segment_no)-Ngain(segment_no)-Ncof(segment_no,1);
if Vgain(segment_no)==0
amp=0;
else
amp=sqrt(gm.*Lens/sum(temp_excitation.^2));
end
temp_excitation = amp.*temp_excitation;
else
temp_excitation(start_point:end_point) = 0;
end
if get(src_noise_checkbox,'Value') == 1
Ncof1(segment_no,1) = eval(get(src_asgain_edit,'String'));
Ncof1(segment_no,2) = eval(get(src_amp1_edit,'String'));
Ncof1(segment_no,3) = eval(get(src_offset_edit,'String'));
Ncof1(segment_no,4) = eval(get(src_amp2_edit,'String'));
Ncof1(segment_no,5) = eval(get(src_dur_edit,'String'));
Ngain1(segment_no) = eval(get(src_ngain_edit,'String'));
Aspgain=Ncof1(segment_no,1); % aspiration noise gain
Amp1=Ncof1(segment_no,2);
Offset=Ncof1(segment_no,3);
Amp2=Ncof1(segment_no,4);
Duration=Ncof1(segment_no,5);
Fgain=Ngain1(segment_no); % fricative noise gain
noise_excitation = nspuls(Amp1,Offset,Amp2,Duration,Lens,Aspgain,Fgain);
temp_noise_excitation = (1/10).*noise_excitation;
else
temp_noise_excitation = zeros(1,Lens);
end
temp_excitation = temp_excitation + temp_noise_excitation;
%Time invariant section; the time varying section used to follow and was removed
%Replicate this array to produce the excitation
for i = 1:Nframe
start_point = (i*Lens) - (Lens-1);
end_point = start_point + Lens - 1;
excitation1(start_point:end_point) = temp_excitation;
end
Pitch1=Lens*ones(Nframe,1);
% The time varying section used to be here
end
if file_flag == 0
Lens_array = Pitch1;
end
plot_excitation;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?