📄 analy_1b.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% analy_1b.m
%
% jmw and Dr. Hu
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp(' ');
disp('SCRIPT: analy_1b.m ***********************************************');
file_string=sprintf('./temp/%s.mat',name);
s=sprintf('loading %s from hard disk ...',file_string);
disp(s);
s=sprintf('load %s',file_string);
eval(s);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
signal=eval(name);
signal=signal(:)';
s=sprintf('clear %s',name);
eval(s);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Normalize the amplitude of the analyzing signal
signal=14000/max(abs(signal))*signal;
% Remove components around d.c.
signal=filtfilt([1 -1],[1 -.99],signal);
% Segmentize the underlying signal
ntotal=length(signal);
old_ntotal = ntotal; % bug fix by Hu and JW 4/22/93
nframe=floor(ntotal/200);
if ntotal-nframe*200-13 > 0
nframe=nframe+1;
end;
ntotal=nframe*200+13;
signal(ntotal)=0;
for i=old_ntotal+1:ntotal,
signal(i)=rand(1) - 0.5;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cofa=zeros(nframe,14);
curmaxp=zeros(1,nframe);
compa=1e7;
disp('Performing LP analysis using the covariance method.')
disp(' (this will take a while ...)');
%%%%%
% create message window and write message in that window also
message_win3_f=figure('Unit','normalized',...
'Position',[0.05 0.2 0.5 0.2],...
'Resize','off',...
'Color',BACK_COLOR,...
'Numbertitle','off',...
'Name','Message');
axis('off');
ss=sprintf('Performing LP analysis using the covariance method.');
text(-0.05,1,ss,'color',[0 0 1],'FontSize',10);
ss=sprintf('This will take a while ...');
text(-0.05,5/6,ss,'color',[0 0 1],'FontSize',10);
pause(0.01);
%%%%%
t_start = clock;
% Calculate the lpc coefficients and get residue;
% Please see "lpc_1a.m" for the I/O arguments.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% do for FIRST segment
sso=signal(1:250+13);
[cofa1,emp(1),energy(1),residue1]=lpc_1a(sso);
residue1=sqrt(energy(1)/(residue1*residue1'))*residue1;
cofa(1,:)=cofa1;
residue(14:250+13)=residue1;
ss1=residue1(201:250);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% do for middle segments
for k=2:nframe-1
sso=signal((k-1)*200+1:k*200+13+50);
[cofa1,emp(k),energy(k),residue1]=lpc_1a(sso);
residue1=sqrt(energy(k)/(residue1*residue1'))*residue1;
energy1=sso(1+13:100+13)*sso(1+13:100+13)';
energy2=sso(101+13:200+13)*sso(101+13:200+13)';
energyidx(k)=sqrt(energy1*energy2);
ss2=residue1(1:50);
ss=(ss1.*(50:-1:1)+ss2.*(1:50))/51;
residue((k-1)*200+14:k*200+50+13)=[ss residue1(51:250)];
ss1=residue1(201:250);
cofa(k,1:length(cofa1))=cofa1;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% do for LAST segment
k=nframe;
sso=signal((k-1)*200+1:k*200+13);
[cofa1,emp(k),energy(k),residue1]=lpc_1a(sso);
residue1=sqrt(energy(k)/(residue1*residue1'))*residue1;
energy1=sso(1+13:100+13)*sso(1+13:100+13)';
energy2=sso(101+14:200+13)*sso(101+14:200+13)';
energyidx(k)=sqrt(energy1*energy2);
ss2=residue1(1:50);
ss=(ss1.*(50:-1:1)+ss2.*(1:50))/51;
residue((k-1)*200+14:k*200+13)=[ss residue1(51:200)];
cofa(k,1:length(cofa1))=cofa1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% V/U classification
voicetype(1)=0;
for kf=2:nframe-1
if emp(kf)>.2 & energyidx(kf)>3*compa
%if emp(kf)>.4 & energyidx(kf)>3*compa % hu's fix to elim false V detection
voicetype(kf)=1;
else
voicetype(kf)=0;
end;
end;
voicetype(nframe)=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% eliminate UVU and VUV possibilities
for k=2:nframe-1
if sum(voicetype(k-1:k+1)) > 1
voicetype(k)=1;
else
voicetype(k)=0;
end;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp(sprintf('time required: %f sec', etime(clock,t_start)));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp('saving variables to ./temp.mat file on hard disk ...');
save temp/temp cofa energy residue emp voicetype nframe ntotal;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% clean up time
clear cofa cofa1 compa curmaxp emp energy energy1 energy2 energyidx k
clear kf nframe ntotal residue residue1 signal ss ss1 ss2 sso t_start voicetype
clear old_ntotal i s file_string
close (message_win3_f);
clear message_win3_f;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -