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


function rcfig_draw 
global Ap Cs Handle RFDvars 
 
% if filter order is frozen, bypass the rcfig window. The 
% code below is copied from rcfig_click. 
if Ap.freezeorder > 0, 
  Cs.ncoeffs = Ap.freezeorder; 
  analyzeSnd; 
  pksfig_draw; 
  return; 
end 
 
if ~isfield(Handle, 'rcfig') | ~ishandle(Handle.rcfig), 
  rcfig_setup; 
end 
 
%--------------------------------------------  
% Pick a frame, and calculate reflection coeffs 
% from 1 to Ap.maxcoeffs 
 
% pick the middle context frame by default 
fr = ceil((length(Cs.snd) / Ap.context_width) / 2); 
 
xprhm = preham(Cs.snd(frame(fr)), Ap.preemph); 
[a,k]=parcor(xprhm, Ap.maxcoeffs); 
 
%-------------------------------------------- 
% Now pick the appropriate filter order 
 
minOrder = Ap.mincoeffs; 
maxOrder = Ap.maxcoeffs; 
cutoff = Ap.rccutoff; 
 
ka = abs(k);  
for i=minOrder:maxOrder-2, 
  if (ka(i+1) < cutoff) & (ka(i+2) < cutoff), break; end 
end 
 
if i < maxOrder-2, 
  estOrder = i;  
  style = 'r-';  
else 
  estOrder = round(Cs.rm_ncoeffs);  
  style='r-.';  
end 
 
RFDvars.estOrder = estOrder; 
%--- 
 
figure(Handle.rcfig); 
cla; 
 
plot(k,'o-'); hold on;  
set(gca, 'xtick', 1:maxOrder, ... 
         'ytick', sort([-1:0.2:1 -cutoff cutoff])); 
grid off; 
m=1; 
axis([1 maxOrder -m m]); 
 
plot([0 maxOrder], [cutoff cutoff], '--');   % horizontal lines 
plot([0 maxOrder], [-cutoff -cutoff], '--');   
 
plot([minOrder minOrder],     [-m m], 'r:');   % vertical lines 
RFDvars.vertline = plot([estOrder estOrder], [-m m], style); 
 
set(get(gca,'xlabel'), 'string', 'lag (m)'); 
set(get(gca,'ylabel'), 'string', 'k_m');  
set(get(gca,'title'),  'string', getstatusstr); 
text(-1.7, -1.2, 'Click to select filter order');