www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/pmf2apmf.m
function [APMF_1,APMF_2] = pmf2apmf(PMF,factMode) %PMF2APMF Polyphase matrix factorization to analyzis polyphase % matrix factorization. % % APMF = PMF2APMF(PMF,FACTMODE) returns the analyzis polyphase % matrix factorization APMF starting from the polyphase matrix % factorization PMF. FACTMODE indicates the type of PMF, the % valid values for FACTMODE are: % 'd' (dual factorization) or 'p' (primal factorization). % % [AMPF_Dual,APMF_Primal] = PMF2APMF(PMF,'t') returns the two % possible factorizations. % % N.B.: PMF = pmf2apmf(pmf2apmf(PMF,FactM),FactM)). % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 06-Jun-2003. % Last Revision: 27-Jun-2003. % Copyright 1995-2004 The MathWorks, Inc. if isempty(PMF) APMF_1 = []; APMF_2 = []; return; end factMode = lower(factMode(1)); cellMODE = ~isa(PMF{1},'laurmat'); if cellMODE nbFACT = length(PMF); APMF_1 = cell(1,nbFACT); APMF_2 = cell(1,nbFACT); for k = 1:nbFACT [APMF_1{k},APMF_2{k}] = ONE_pmf2apmf(PMF{k},factMode); end else [APMF_1,APMF_2] = ONE_pmf2apmf(PMF,factMode); end %---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---% function [APMF_1,APMF_2] = ONE_pmf2apmf(PMF,factMode) APMF_1 = {}; APMF_2 = {}; len = length(PMF); PMF = PMF(len:-1:1); switch lower(factMode); case 'd' % P-Tilda matrix factorization. APMF_1 = dualFact(PMF,len); case 'p' % P matrix factorization. APMF_1 = primalFact(PMF,len); case 't' % P-Tilda and P matrices factorization. APMF_1 = dualFact(PMF,len); APMF_2 = primalFact(PMF,len); end %---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---% function dec = dualFact(dec,len) % P-Tilda matrix factorization. for k = 1:len dec{k} = newvar(dec{k}','1/z'); end %---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---% function dec = primalFact(dec,len) % P matrix factorization. for k = 1:len if dec{k}{1,2}~=0 dec{k}{1,2} = -dec{k}{1,2}; elseif dec{k}{2,1}~=0 dec{k}{2,1} = -dec{k}{2,1}; else % k = 1 or k = len tmp = dec{k}{1,1}; dec{k}{1,1} = dec{k}{2,2}; dec{k}{2,2} = tmp; end end %---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---%