pmf2apmf.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:2k
源码类别:

波变换

开发平台:

Matlab

  1. function [APMF_1,APMF_2] = pmf2apmf(PMF,factMode)
  2. %PMF2APMF Polyphase matrix factorization to analyzis polyphase 
  3. %         matrix factorization.
  4. %
  5. %   APMF = PMF2APMF(PMF,FACTMODE) returns the analyzis polyphase 
  6. %   matrix factorization APMF starting from the polyphase matrix 
  7. %   factorization PMF. FACTMODE indicates the type of PMF, the
  8. %   valid values for FACTMODE are: 
  9. %     'd' (dual factorization) or 'p' (primal factorization).
  10. %
  11. %   [AMPF_Dual,APMF_Primal] = PMF2APMF(PMF,'t') returns the two
  12. %   possible factorizations.
  13. %
  14. %   N.B.: PMF = pmf2apmf(pmf2apmf(PMF,FactM),FactM)).
  15. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 06-Jun-2003.
  16. %   Last Revision: 27-Jun-2003.
  17. %   Copyright 1995-2004 The MathWorks, Inc.
  18. %   $Revision: 1.1.6.3 $  $Date: 2004/04/13 00:40:02 $
  19. if isempty(PMF)
  20.     APMF_1 = [];
  21.     APMF_2 = []; 
  22.     return; 
  23. end
  24. factMode = lower(factMode(1));
  25. cellMODE = ~isa(PMF{1},'laurmat');
  26. if cellMODE
  27.     nbFACT = length(PMF);
  28.     APMF_1 = cell(1,nbFACT);
  29.     APMF_2 = cell(1,nbFACT);
  30.     for k = 1:nbFACT
  31.         [APMF_1{k},APMF_2{k}] = ONE_pmf2apmf(PMF{k},factMode);
  32.     end
  33. else
  34.     [APMF_1,APMF_2] = ONE_pmf2apmf(PMF,factMode);
  35. end
  36. %---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---%
  37. function [APMF_1,APMF_2] = ONE_pmf2apmf(PMF,factMode)
  38. APMF_1 = {};
  39. APMF_2 = {};
  40. len = length(PMF);
  41. PMF = PMF(len:-1:1);
  42. switch lower(factMode);
  43.     case 'd'    % P-Tilda matrix factorization.
  44.         APMF_1 = dualFact(PMF,len);
  45.     case 'p'    % P matrix factorization.
  46.         APMF_1 = primalFact(PMF,len);
  47.     case 't'    % P-Tilda and P matrices factorization.
  48.         APMF_1 = dualFact(PMF,len);
  49.         APMF_2 = primalFact(PMF,len);
  50. end
  51. %---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---%
  52. function dec = dualFact(dec,len)    % P-Tilda matrix factorization.
  53. for k = 1:len
  54.     dec{k} = newvar(dec{k}','1/z');
  55. end
  56. %---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---%
  57. function dec = primalFact(dec,len)  % P matrix factorization.
  58. for k = 1:len
  59.     if dec{k}{1,2}~=0
  60.         dec{k}{1,2} = -dec{k}{1,2};
  61.     elseif dec{k}{2,1}~=0
  62.         dec{k}{2,1} = -dec{k}{2,1};
  63.     else % k = 1 or k = len
  64.         tmp = dec{k}{1,1};
  65.         dec{k}{1,1} = dec{k}{2,2};
  66.         dec{k}{2,2} = tmp;
  67.     end
  68. end
  69. %---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---%