www.gusucode.com > dsp 案例源码程序 matlab代码 > dsp/MinimizingLowpassFIRFilterLengthExample.m

    %% Minimizing Lowpass FIR Filter Length  
% This example shows how to minimize the number coefficients, by designing
% minimum-phase or minimum-order filters.   

%% Minimum-Phase Lowpass Filter Design 
% To start, set up the filter parameters and use |fdesign| to create a constructor
% for designing the filter. 
  N = 100;
  Fp = 0.38;
  Fst = 0.42;
  Ap = 0.06;
  Ast = 60;
  Hf = fdesign.lowpass('Fp,Fst,Ap,Ast',Fp,Fst,Ap,Ast);  

%% 
% So far, we have only considered linear-phase designs. Linear phase is
% desirable in many applications. Nevertheless, if linear phase is not a
% requirement, minimum-phase designs can provide significant improvements
% over linear phase counterparts. For instance, returning to the minimum
% order case, a minimum-phase/minimum-order design for the same specifications
% can be computed with: 
  Hd1 = design(Hf,'equiripple','systemobject',true);
  Hd2 = design(Hf,'equiripple','minphase',true,...
              'systemobject',true);
  hfvt = fvtool(Hd1,Hd2,'Color','White');
  legend(hfvt,'Linear-phase equiripple design',...
         'Minimum-phase equiripple design')    

%% 
% Notice that the number of coefficients has been reduced from 146 to 117.
% As a second example, consider the design with a stopband decaying in linear
% fashion. Notice the increased stopband attenuation. The passband ripple
% is also significantly smaller. 
  setspecs(Hf,'N,Fp,Fst',N,Fp,Fst);
  Hd3 = design(Hf,'equiripple','StopbandShape','linear',...
      'StopbandDecay',53.333,'systemobject',true);
  setspecs(Hf,'Fp,Fst,Ap,Ast',Fp,Fst,Ap,Ast);
  Hd4 = design(Hf,'equiripple','StopbandShape','linear',...
      'StopbandDecay',53.333,'minphase',true,'systemobject',true);
  hfvt2 = fvtool(Hd3,Hd4,'Color','White');
  legend(hfvt2,'Linear-phase equiripple design with linearly decaying stopband',...
      'Minimum-phase equiripple design with linearly decaying stopband')    

%% Minimum-Order Lowpass Filter Design Using Multistage Techniques 
% A different approach to minimizing the number of coefficients that does
% not involve minimum-phase designs is to use multistage techniques. Here
% we show an interpolated FIR (IFIR) approach. 
  Hd5 = ifir(Hf);
  hfvt3 = fvtool(Hd1,Hd5,'Color','White');
  legend(hfvt3,'Linear-phase equirriple design',...
        'Linear-phase IFIR design')   

%%
% The number of nonzero coefficients required in the IFIR case is 111. Less
% than both the equiripple linear-phase and minimum-phase designs.