www.gusucode.com > signal 工具箱matlab源码程序 > signal/@dfilt/@df1tsos/lclcscalefactors.m
function c = lclcscalefactors(Hd,c,nb,opts) %LCLCSCALEFACTORS Local cumulative scale factor computation. % Author(s): Dr. Guenter Dehner, R. Losada % Copyright 2003-2006 The MathWorks, Inc. over = opts.over; smax = opts.smax; pnorm = opts.pnorm; svm = opts.ScaleValueConstraint; soc = Hd.sosMatrix; c=zeros(2,nb+1); bb = 1; aa = 1; for i= 1:nb, Hdpartial = cumsec(Hd,i,false); q2 = norm(Hdpartial,pnorm); Hdpartial = cumsec(Hd,i,true); % Make sure to do this last, since Hdpartial is used later on q1 = norm(Hdpartial,pnorm); switch over case {'wrap' } c(1,i) = smax/q1; if ~strcmpi(svm,'unit') || i==nb, c(2,i) = smax/q2; end case {'saturate'} Hdpartial.sosMatrix(1,1:2) = [-soc(i,5) -soc(i,6)]; q3 = norm(Hdpartial,pnorm); Hdpartial.sosMatrix(1,1:2) = [soc(i,2) soc(i,3)]; q4 = norm(Hdpartial,pnorm); q5 = abs(soc(i,3))*q1; sp1 = [q1,q3]; maxsp1 = max(sp1); c(1,i) = smax/maxsp1; if strcmpi(svm,'unit'), sp2 = [q4,q5]; else sp2 = [q2,q4,q5]; end maxsp2 = max(sp2); c(2,i) = smax/maxsp2; case {'satall'} aa = conv(aa,soc(i,4:6)); b2 = conv(bb,soc(i,1:3)); b3 = conv(bb,[-soc(i,5) -soc(i,6) 0 ]); q3 = norm(dfilt.df1t(b3,aa),pnorm); sp1 = [q1,abs(soc(i,5))*q1,abs(soc(i,6))*q1,q3,soc(i,4)*q1]; maxsp1 = max(sp1); c(1,i) = smax/maxsp1; q2 = norm(dfilt.df1t(b2,aa),pnorm); q0 = max([1,abs(soc(i,2)),abs(soc(i,3))])*q1; b4 = conv(bb,[soc(i,2) soc(i,3) 0 ]); q4 = norm(dfilt.df1t(b4,aa),pnorm); sp2 = [q2,q1,abs(soc(i,2))*q1,abs(soc(i,3))*q1,q4]; maxsp2 = max(sp2); c(2,i) = smax/maxsp2; bb = b2; end end if strcmpi(svm,'unit') && ~strcmpi(over,'wrap') for i=2:nb, c(1,i) = min([c(1,i),c(2,i-1)]); c(2,i-1)=0; end end % [EOF]