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

📄 ftrack.m

📁 美国德克萨斯州大学电子工程系开发的一套进行语音分析的MATLAB程序. A MATLAB software tool for speech analysis.
💻 M
字号:
function ftrack(action)

% Show the formant track
%

% Copyright (c) 1995 by Philipos C. Loizou
%

global nChannels filename filterA filterB Srate ftrFig
global HDRSIZE S0 S1 ratePps En Be bl al WAV1 n_Secs En2 Be2
global filename2 TWOFILES n_Secs2 Srate2 TOP HDRSIZE2 fFig
global saveFmnts clsedFrm ftype ftype2 bpsa bpsa2



pos = get(0, 'screensize'); % get the screensize
sWi = pos(3);
sHe = pos(4);


WIDTH   =round(0.9375*sWi);
HEIGHT = round(0.5*sHe);
LEFT    =round(0.025*sWi);
BOTTOM  =20; 

if isempty(saveFmnts)
  saveFmnts=0;
end

if isempty(clsedFrm)
  clsedFrm=1;
end

if TWOFILES==1 & TOP==1
 fname=filename2;
 offSet=Be2*bpsa2+HDRSIZE2;
 n_samples=En2-Be2; %round(n_Secs2*Srate2)
 ftp=ftype2;
 sr=Srate2;
else
 fname=filename;
 offSet=Be*bpsa+HDRSIZE;
 n_samples=En-Be; %round(n_Secs*Srate)
 ftp=ftype;
 sr=Srate;
end

fp = fopen(fname,'r');

if fp <=0
	disp('ERROR! File not found..')
	return;
end

	
	
	st = fseek(fp,offSet,'bof');
        x=zeros(1,n_samples);
	x = fread(fp,n_samples,ftp);

	fclose(fp);
%---- Do some error checking on the signal level ---
meen=mean(x);
x= x - meen; %----------remove the DC bias---


nmF='Formant Tracks';


if isempty(ftrFig) 
	ftrFig =  figure('Units', 'Pixels', 'Position', [LEFT BOTTOM WIDTH HEIGHT],...
		'Resize','on','Name',nmF,'NumberTitle','Off');
  %'Pointer','crosshair',...

else
	figure(ftrFig);
	set(ftrFig,'Name',nmF);
end

%----Set the LPC order depending on sampling rate ------

if sr>12000 & sr < 24000
 Ncoeffs=16;
elseif sr<=12000
   Ncoeffs=14;
else % CD quality Fs= 44 KHz
   Ncoeffs=28;
end

durat=20; 		 	% -- Use a 20 msec segment
fRate=floor(durat*sr/1000);  
nFrames=floor(n_samples/fRate);
window=hamming(fRate);
	

formants=zeros(3,nFrames);


k=1;
for t=1:nFrames
		yin=x(k:k+fRate-1);
		a = lpc(window.*yin,Ncoeffs);
		[f1,f2,f3]=frmnts(a,sr);	
		formants(1,t)=f1; formants(2,t)=f2; formants(3,t)=f3;		
  	
  k=k+fRate;
    
end

if strcmp(action,'save')  %--- save F1,F2,F3 in an ASCII file
	
	formName=[fname(1:length(fname)-3) 'frm'];
	fpout=fopen(formName,'w');
	time=1:durat:nFrames*durat;
	fprintf(fpout,'t(msec)  F1(Hz)  F2(Hz)  F3(Hz)\n');
	for i=1:nFrames
	  fprintf(fpout,'%6.2f %7.3f %7.3f %7.3f\n',time(i),formants(1,i),formants(2,i),...
	 	formants(3,i));
	end
	msg=sprintf('Formant values were saved in the ASCII file ''%s'' ',lower(formName));
	errordlg(msg,'Saving file','on');
	fclose(fpout);

elseif strcmp(action,'plot') %--- Plot Formant contour  -----------



Et=nFrames*20;
xax=1:20:Et;

hold off

plot(xax,formants(1,:),'y',xax,formants(2,:),'r',xax,formants(3,:),'m');
  
ylabel('Freq. (Hz)');
xlabel('Time (msec)');
set(gca,'Xlim',[1 Et]);

%----------- Create the 'close' button'-----------------------

if clsedFrm ==1

xywh = get(ftrFig, 'Position');

% Buttons.
left = 6;
wide = 60;
top  = xywh(4) - 10;
high = 22;
inc  = high + 8;

uicontrol('Style', 'PushB', 'Callback', 'closem(''ftr'')', ...
          'HorizontalAlign','center', 'String', 'Close', ...
          'Position', [left top-high wide high]);  

uimenu('Label','Save Formants','Callback','saveparm(''formnts'')');
clsedFrm=0;
end

end

⌨️ 快捷键说明

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