www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/@laurpoly/eucfacttab.m
function [FactorTAB,minmaxTAB] = eucfacttab(A,B,flagConstREM) %EUCFACTAB Euclidean factor table for Euclidean division algorithm. % [FacTAB,MinMaxTAB] = EUCFACTTAB(A,B) % % EUCFACTTAB(...,flagConstREM) % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 25-Apr-2001. % Last Revision 08-May-2012. % Copyright 1995-2012 The MathWorks, Inc. if nargin<3 , flagConstREM = 1; end [EuclideTAB,first] = euclidedivtab(A,B); FactorTAB = {}; idxFactorise = 0; for k=first:size(EuclideTAB,1) add = EuclideTAB(k,1); idx = k; while idx>1 add{end+1} = EuclideTAB{idx,3}; idx = EuclideTAB{idx,5}; end if flagConstREM addDEC = isconst(add{1}); else addDEC = 1; end if addDEC idxFactorise = idxFactorise+1; if ~isempty(FactorTAB) dFact = size(FactorTAB,2)-length(add); if dFact ~= 0 FactorTAB = modifyFactorTAB(FactorTAB,idxFactorise); end end FactorTAB(idxFactorise,:) = fliplr(add); end end [nbDec,nbFact] = size(FactorTAB); minmaxTAB = zeros(nbDec,2); minmaxTAB(:,1) = Inf; for i=1:nbDec for j=1:nbFact C = abs(get(FactorTAB{i,j},'coefs')); mi = min(C); if mi<minmaxTAB(i,1) , minmaxTAB(i,1) = mi; end ma = max(C); if ma>minmaxTAB(i,2) , minmaxTAB(i,2) = ma; end end end %-------------------------------------------------------------------% function FTnew = modifyFactorTAB(FT,idx) disp(getWavMSG('Wavelet:moreMSGRF:Modif_FactorTAB',idx)) N = size(FT,1); P = laurpoly(0,0); TMP = cell(N,1); for k = 1:N , TMP{k} = P; end FTnew = [FT(:,1:end-1) , cell(N,1) , FT(:,end)]; %-------------------------------------------------------------------%