www.gusucode.com > dsp 案例源码程序 matlab代码 > dsp/ControllingDesignSpecificationsinLowpassFIRDesignExample.m
%% Controlling Design Specifications in Lowpass FIR Design % This example shows how to control the filter order, passband ripple, stopband % attenuation, and transition region width of a lowpass FIR filter. %% Controlling the Filter Order and Passband Ripples and Stopband Attenuation % When targeting custom hardware, it is common to find cases where the number % of coefficients is constrained to a set number. In these cases, minimum % order designs are not useful because there is no control over the resulting % filter order. As an example, suppose that only 101 coefficients could % be used and the passband ripple/stopband attenuation specifications need % to be met. We can still use equiripple designs for these specifications. % However, we lose control over the transition width which will increase. % This is the price to pay for reducing the order while maintaining the % passband ripple/stopband attenuation specifications. % % Consider a simple design of a lowpass filter with a cutoff frequency of % 0.4*pi radians per sample: Ap = 0.06; Ast = 60; Fp = 0.38; Fst = 0.42; Hf=fdesign.lowpass('Fp,Fst,Ap,Ast',Fp,Fst,Ap,Ast); %% % Design an equiripple filter: Hd1 = design(Hf,'equiripple','systemobject',true); %% % Set the number of coefficients to 101, which means setting the order to 100: N = 100; Fc = 0.4; setspecs(Hf,'N,Fc,Ap,Ast',N,Fc,Ap,Ast); %% % Design a second equiripple filter with the given constraint: Hd2 = design(Hf,'equiripple','systemobject',true); %% % Measure the filter variables of the second equiripple filter, and compare % the graphs of the first and second filters: measure(Hd2) hfvt = fvtool(Hd1,Hd2,'Color','White'); legend(hfvt,'Equiripple design, 146 coeffcients', ... 'Equiripple design, 101 coefficients') %% % Notice that the transition has increased by almost 50%. This is not surprising % given the almost 50% difference between 101 coefficients and 146 coefficients. %% Controlling the Transition Region Width % Another option when the number of coefficients is set is to maintain the % transition width at the expense of control over the passband ripple/stopband % attenuation. setspecs(Hf,'N,Fp,Fst',N,Fp,Fst); Hd3 = design(Hf,'equiripple','systemobject',true); measure(Hd3) hfvt2 = fvtool(Hd1,Hd3,'Color','White'); legend(hfvt2,'Equiripple design, 146 coefficients',... 'Equiripple design, 101 coefficients') %% % Note that in this case, the differences between using 146 coefficients % and using 101 coefficients is reflected in a larger passband ripple and % a smaller stopband attenuation. %% % It is possible to increase the attenuation in the stopband while keeping % the same filter order and transition width by the use of weights. Weights % are a way of specifying the relative importance of the passband ripple % versus the stopband attenuation. By default, passband and stopband are % equally weighted (a weight of one is assigned to each). If we increase % the stopband weight, we can increase the stopband attenuation at the expense % of increasing the stopband ripple as well. Hd4 = design(Hf,'equiripple','Wstop',5,'systemobject',true); measure(Hd4) hfvt3 = fvtool(Hd3,Hd4,'Color','White'); legend(hfvt3,'Passband weight = 1, Stopband weight = 1',... 'Passband weight = 1, Stopband weight = 5') %% % Another possibility is to specify the exact stopband attenuation desired % and lose control over the passband ripple. This is a powerful and very % desirable specification. One has control over most parameters of interest. setspecs(Hf,'N,Fp,Fst,Ast',N,Fp,Fst,Ast); Hd5 = design(Hf,'equiripple','systemobject',true); hfvt4 = fvtool(Hd4,Hd5,'Color','White'); legend(hfvt4,'Equiripple design using weights',... 'Equiripple design constraining the stopband')