⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dfirdes.m

📁 ADSP TOOLBOX: Version 2.0 and gui m-files
💻 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 + -