www.pudn.com > LPCToolbox.rar > ANALYZESND.M


% pks = analyzeSnd(snd,ncoeffs) 
% 
%  Estimate the formants F1, F2, F3 and their bandwidths for a sound  
%  'snd' using an LPC filter of order 'ncoeffs'.  
% 
%  pks: Nx3x2 matrix (N = # of analysis frames in the sound) 
%       pks(i,:,1) are the formant peak locations (F1 F2 F3) for frame i 
%       pks(i,:,2) are the corresponding bandwidths (bw1 bw2 bw3) 
% 
%  uses global variable Ap (see SETPARAMS). This should be used to 
%  tweak the analysis parameters (e.g. width of the analysis frame). 
% 
 
function  analyzeSnd 
global Ap Cs 
 
% Remove the DC bias. This trick is used in the COLEA package, and it 
% helps eliminate complaints from LPC about ill-conditioned matrices. 
                  
mysnd = Cs.snd - mean(Cs.snd); 
 
% If length of snd didn't line up with (k*context_width)+analysis_width,  
% then ILS padded the sound with zeros (I think). We simply trim the 
% sound down to (k-1)*context_width+analysis_width. 
 
ncontexts = floor((length(mysnd) - Ap.analysis_width) / Ap.context_width); 
Cs.nframes = ncontexts + 1; 
Cs.pks = zeros(Cs.nframes, 3, 2); 
 
for frnum=1:Cs.nframes, 
  ii = frame(frnum); 
  y = preham(mysnd(ii), Ap.preemph); 
 
  [a,g]=lpc(y, Cs.ncoeffs); 
  estpk = getpeaks(a, Ap.fftlen, Cs.Fs); 
  Cs.pks(frnum, :, 1) = estpk(1:3,1)';  % locations of F1,F2,F3 
  Cs.pks(frnum, :, 2) = estpk(1:3,2)';  % bandwidths  
end