www.gusucode.com > signal 工具箱matlab源码程序 > signal/@dfilt/@dtffir/optimizestopbandfir.m
function Href = optimizestopbandfir(this,Href,wl,varargin) %#ok<INUSL> %OPTIMIZESTOPBANDFIR Optimize stopband. % This should be a private method % Author(s): R. Losada % Copyright 2009 The MathWorks, Inc. hf = getfdesign(Href); hm = getfmethod(Href); args = sboptiminpututparse(Href,varargin{:}); % make a copy of input obj so we don't change it Href.privArithmetic = 'fixed'; Href.CoeffWordLength = wl; m = measure(Href); bestk = 0; bestAstop = m.Astop; for k = 1:args.NTrials, Hns(k) = noiseshape(hf,Href,wl,args); %#ok<AGROW> m(k) = measure(Hns(k),hf); if m(k).Astop > bestAstop, bestAstop = m(k).Astop; bestk = k; end end if bestk > 0, % We found a better filter Href = Hns(bestk); Href.privArithmetic = 'fixed'; Href.CoeffWordLength = wl; % Set fdesign, fmethod so that FVTool shows specs setfdesign(Href, hf); setfmethod(Href, hm); end %-------------------------------------------------------------------------- function args = sboptiminpututparse(this,varargin) % Test if response type is supported s = iscoeffwloptimizable(this); p = inputParser; p.addParamValue('NTrials',1,@(x)(isnumeric(x)&&x>=1&&x==round(x))); p.addParamValue('noiseShapeNorm',inf,@(x)(isnumeric(x)&&(x>0))); p.parse(varargin{:}); args = p.Results; % Copy fieds of s into args f = fieldnames(s); for i=1:length(f), args.(f{i}) = s.(f{i}); end % Use reference filter in case input filter has been quantized hmethod = getfmethod(this); method = hmethod.DesignAlgorithm; args.dm = method; args.dopts = designopts(hmethod); % [EOF]