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');