📄 morder.m
字号:
% Function for estimating the AR model order
% Author : Minkyu Lee
% Date : 20-Mar-1995
% %Modified by Karthik May 27 1997
PV=[275 100 519 240];
s2 = 'Model Order Selection';
% Open analysis window
while exist('lp_order_win_h')==1
try1 = 'get(lp_order_win_h,''position'');';
eval(try1,catch2);
if check ==0
clear lp_order_win_h;
check = 1;
break;
end
s1 = get(lp_order_win_h,'Name');
if ~strcmp(s1,s2)
clear lp_order_win_h;
break;
end
figure(lp_order_win_h);
break;
end;
if exist('lp_order_win_h')~=1;
lp_order_win_h=figure('Position',PV,...
'Resize','on',...
'Numbertitle','off',...
'Name',s2);
end
min_order=10;
step=1;
max_order=14;
speech1=SPEECH_OLD(round(LEFT):round(LEFT)+lp_frame_len-1);
Np=length(speech1);
Window = hamming(Np); % Window type
epsilon=1e-15; % A small number to test for the ill-conditioning
% of the matrix
% call Matlab function to calculate spectrogram from input signal
mode=0; % for covariance method
fpe=zeros(1,max_order);
aic=zeros(1,max_order);
cat=zeros(1,max_order);
sig2=zeros(1,max_order);
wait_counter = min_order;
wait_window = figure('Numbertitle','off',...
'Color',BACK_COLOR,...
'Name','Doing Model Order Analysis..Please wait',...
'Position',[117 248 560 150]);
pause(0.01);
wait_window_slider = uicontrol('Style','Slider',...
'Position',[50 100 410 30],...
'Max',max_order,...
'Min',min_order,...
'Value',wait_counter);
wait_window_display = uicontrol('Style','Text',...
'Position',[50 50 410 30],...
'Backgroundcolor','white',...
'Foregroundcolor','blue',...
'String','Analysing the current frame');
pause(0.01);
for k=min_order:step:max_order
[iflag A sig2(k)] = covmcov(speech1, Np, k, mode, epsilon);
fpe(k)=(Np+k)/(Np-k)*sig2(k);
aic(k)=Np*log(sig2(k))+2*k;
rho_tilda(k)=Np/(Np-k)*sig2(k);
cat(k)=0;
for i=1:k,
cat(k)=cat(k)+1/rho_tilda(k);
end
cat(k)=cat(k)/Np-1/rho_tilda(k);
wait_counter = k;
set(wait_window_slider,'Value',wait_counter);
end
set(wait_window_display,'String','Almost done...Collecting Results');
pause(0.01);
v=[min_order:step:max_order];
[Y FPE]=min(fpe(v));
[Y AIC]=min(aic(v));
[Y CAT]=min(cat(v));
FPE=(FPE-1)*step+min_order;
AIC=(AIC-1)*step+min_order;
CAT=(CAT-1)*step+min_order;
set(wait_window_display,'String','Done..Printing Results. Thanks for being Patient');
pause(0.1);
close(wait_window);
clear wait window wait_counter;
figure(lp_order_win_h);
subplot(311),plot(v,fpe(v));
title('Final prediction error (FPE)');
subplot(312),plot(v,aic(v));
title('Akaike information criterion (AIC)');
subplot(313),plot(v,cat(v));
title('Criterion autoregressive transfer function (CAT)');
xlabel('Model order');
% Set position and size of analysis window
PV=[52 265 161 62];
s2 = 'Selection of Model Order';
% Open analysis window
while exist('lp_order_con_h')==1
try1 = 'get(lp_order_con_h,''position'');';
eval(try1,catch2);
if check ==0
clear lp_order_con_h;
check = 1;
break;
end
s1 = get(lp_order_con_h,'Name');
if ~strcmp(s1,s2)
clear lp_order_con_h;
break;
end
figure(lp_order_con_h);
break;
end;
if exist('lp_order_con_h')~=1;
lp_order_con_h=figure('Position',PV,...
'Resize','on',...
'color',BACK_COLOR,...
'Numbertitle','off',...
'Name',s2);
lp_order_cancel_h=uicontrol('Style','pushbutton',...
'Position',[10 20 130 30],...
'String','Cancel',...
'Callback','mord_ok');
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -