⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 analy_1b.m

📁 这是一个用于语音信号处理的工具箱
💻 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 + -