📄 dfirdes.m
字号:
function flag = dfirdes
% DFIRDES
% Author: Ashok Ambardar <akambard@mtu.edu>
% Date: 2/2/96 11:32AM
% Copyright (c) 1997 by Prentice-Hall, Inc.
% Modified: AA Sep 23, 96
% obtain necessary handles
f = gcf;
ui = get(f,'userdata');
filter_uis = ui(3:4);
method_uis = ui(5:6);
window_uis = ui(7:8);
edge_edt = ui(11);
attn_edt = ui(13);
%edges_edt = ui(16);
%attns_edt = ui(18);
samp_uis = ui(19:20);
length_uis = ui(31:33);
cutoff_uis = ui(34:36);
harris_uis = ui(37:39);
beta_uis = ui(40:42);
ripple_uis = ui(43:45);
length_des = ui(62);
cutoff_des = ui(64);
harris_des = ui(66);
beta_des = ui(68);
ripple_des = ui(70);
% get the values
filter_type = get(filter_uis(2),'value');
method_type = get(method_uis(2),'value');
window_type = get(window_uis(2),'value');
flag = 1;
attn = eval(['[',get(attn_edt,'string'),']'],'[]');
attn = eval(['[',get(attn_edt,'string'),']'],'[]');
if length(attn)~=2
errordlg('Need 2 values for attenuation.','Input Error');
flag=0;return;
end
if diff(attn)<=0
errordlg('Attenuation values must be in increasing order.','Input Error');
flag=0;return;
end
attnp=attn(1);attns=attn(2);
edge = eval(['[',get(edge_edt,'string'),']'],'[]');
if any(filter_type == [1:2]),
if length(edge) ~= 2,
errordlg('LP & HP filters need 2 band edges.','Input Error');
flag=0;return;
end
else
if length(edge) ~= 4,
errordlg('BP & BS filters need 4 band edges.','Input Error');
flag=0;return;
end
end
if filter_type == 1
edgep=edge(1);edges=edge(2);ty1='lp';
elseif filter_type == 2
edgep=edge(2);edges=edge(1);ty1='hp';
elseif filter_type == 3
edgep=edge(2:3);edges=[edge(1) edge(4)];ty1='bp';
elseif filter_type == 4
edges=edge(2:3);edgep=[edge(1) edge(4)];ty1='bs';
end
sampf = str2num(get(samp_uis(2),'string'));
if method_type < 3,
if isempty(sampf)
errordlg('Sampling freq not specified.','Input Error');
set(ui(71),'value',0);
set(ui(46),'value',0);
set(ui(47),'enable','on');
flag = 0;
return;
elseif sampf<2*max([edgep edges])
errordlg('Sampling freq not high enough','Input Error');
flag = 0;
set(ui(71),'value',0);
set(ui(46),'value',0);
set(ui(47),'enable','on');
return;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%elseif sampf~=round(sampf)|sampf<0
% errordlg('Use a positive integer for sampling frequency!','Input Error');
% flag = 0;
% set(ui(71),'value',0);
% set(ui(46),'value',0);
% set(ui(47),'enable','on');
% return;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
end
if method_type > 1, % optimal
p1=[];
if window_type == 1 % hamming
aswin=53;
elseif window_type == 2 % vonHann
aswin=44;
elseif window_type == 3 % blackman
aswin=75;
elseif window_type == 4 % kaiser
aswin=attns;
elseif window_type == 5 % cheby
aswin=attns;
elseif window_type == 6
if attns<50,
p1=0;
aswin=51;
elseif attns<60,
p1=1;
aswin=61;
elseif attns<65,
p1=2;
aswin=66;
elseif attns<75,
p1=4;
aswin=76;
elseif attns<85,
p1=5;
aswin=86;
elseif attns<95,
p1=6;
aswin=96;
else,
p1=7;
aswin=103;
end
end
if aswin<attns
asw=num2str(aswin);
errordlg(['Selected window requires As < ' asw ' dB for autodesign.'],...
'Input Error');
flag=0;
set(ui(71),'value',0);
set(ui(46),'value',0);
set(ui(47),'enable','on');
% set(length_des,'string',' ');
% set(cutoff_des,'string',' ');
% set(harris_des,'string',' ');
% set(ripple_des,'string',' ');
return
end
end
set(ui([34,35,37,38,40,41,43,44,64,66,68,70]),'vis','off');
if method_type == 1, % optimal
length_n = dfirauop(filter_type,[attnp,attns],sampf,edgep,edges);
set(length_des,'string',int2str(length_n));
set(ui(32),'string',int2str(length_n));
elseif method_type == 2, % window
[length_n,cutoff,center,p1] = dfirauwi(filter_type,[attnp,attns],...
sampf,edgep,edges,window_type,p1);
set(ui([34,35,64]),'vis','on');
set(length_des,'string',int2str(length_n));
set(ui(32),'string',int2str(length_n));
set(cutoff_des,'string',num2str(cutoff));
set(ui(35),'string',num2str(cutoff));
if window_type == 4, % kaiser
set(ui(40),'vis','on');
set(beta_des,'string',num2str(p1,5),'vis','on');
set(ui(41),'string',num2str(p1,5),'vis','on');
elseif window_type == 5 % chebyshev
set(ui(43),'vis','on');
set(ripple_des,'string',num2str(p1),'vis','on');
set(ui(44),'string',num2str(p1),'vis','on');
elseif window_type == 6 % harris
set(ui(37),'vis','on');
set(harris_des,'string',num2str(p1),'vis','on');
set(ui(38),'string',num2str(p1),'vis','on');
end
elseif method_type == 3, % halfband
[length_n,cutoff,samp,center,p1] = dfirauhb(filter_type,[attnp,attns],...
edgep,edges,window_type,p1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% set(ui(20),'string',' ');
% set(ui(20),'string',num2str(samp,5));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
set(ui([34,35,64]),'vis','on');
set(length_des,'string',int2str(length_n));
set(ui(32),'string',int2str(length_n));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% set(cutoff_des,'string',' ');
set(cutoff_des,'string',num2str(cutoff,5));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
set(ui(35),'string',' ');
if window_type == 4, % kaiser
set(ui(40),'vis','on');
set(beta_des,'string',num2str(p1,5),'vis','on');
set(ui(41),'string',num2str(p1,5),'vis','on');
elseif window_type == 5 % chebyshev
set(ui(43),'vis','on');
set(ripple_des,'string',num2str(p1),'vis','on');
set(ui(44),'string',num2str(p1),'vis','on');
elseif window_type == 6 % chebyshev
set(ui(40),'vis','on');
set(harris_des,'string',num2str(p1),'vis','on');
set(ui(38),'string',num2str(p1),'vis','on');
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -