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

波变换

开发平台:

Matlab

  1. function [LoD,HiD,LoR,HiR] = lp2filters(Ha,Ga,Hs,Gs,signFLAG)
  2. %LP2FILTERS Laurent polynomials to filters.
  3. %   [LoD,HiD,LoR,HiR] = LP2FILTERS(Ha,Ga,Hs,Gs) returns the
  4. %   filters associated to the Laurent polynomials (Ha,Ga,Hs,Gs).
  5. %
  6. %   [LoD,HiD,LoR,HiR] = LP2FILTERS(...,signFLAG) changes the
  7. %   sign of the two high-pass filters (HiD,HiR). 
  8. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 24-Jun-2003.
  9. %   Last Revision: 02-Sep-2003.
  10. %   Copyright 1995-2004 The MathWorks, Inc.
  11. %   $Revision: 1.1.6.1 $ $Date: 2004/03/15 22:36:35 $ 
  12. if nargin>4  , IncPOW = 1; else , IncPOW = 0; end
  13. isORTH = (Ha==Hs);
  14. Ha = reflect(Ha);
  15. Ga = reflect(Ga);
  16. [LoD,HiD] = getFilters('a',Ha,Ga,isORTH,IncPOW);
  17. [LoR,HiR] = getFilters('s',Hs,Gs,isORTH,IncPOW);
  18. %--------------------------------------------------------
  19. function [Lo,Hi] = getFilters(typeFILT,H,G,isORTH,IncPOW)
  20. Lo = H.coefs;
  21. Hi = G.coefs;
  22. lenLo = length(Lo);
  23. lenHi = length(Hi);
  24. powHi = powers(G);
  25. if lenLo==lenHi  % Orthogonal case in necessary here.
  26.     switch typeFILT
  27.         case 'a' , AddPOW = 0;
  28.         case 's' , AddPOW = 1;
  29.     end
  30. else            % Part of biorthogonal case.
  31.     [long,idx] = max([lenLo,lenHi]);
  32.     add = fix(abs((lenLo-lenHi)/2));
  33.     switch idx
  34.         case 1 , Hi = extend_Filter(Hi,lenHi,long);
  35.         case 2 , Lo = extend_Filter(Lo,lenLo,long);
  36.     end
  37.     switch typeFILT
  38.         case 'a' , AddPOW = 1 + add;
  39.         case 's' , AddPOW = 1;
  40.     end
  41. end
  42. AddPOW = AddPOW + IncPOW;
  43. powMUL = powHi(end) + AddPOW;
  44. Hi = ((-1)^powMUL)*Hi;
  45. % %----------------------------------------------------
  46. % powLo = powers(H);
  47. % disp('------------------------------------------')
  48. % if lenLo~=lenHi
  49. %     disp(['typeFILT: ' typeFILT]);
  50. %     disp(['   add: ' sprintf('%3.0f',add) , ...
  51. %           '  - idx: ' sprintf('%3.0f',idx)]);
  52. % end
  53. % disp(['AddPOW: ' sprintf('%3.0f',AddPOW)]);
  54. % disp([' powHi: ' sprintf('%3.0f',powHi) ...
  55. %         '  (len: ' sprintf('%2.0f',lenHi),')']);
  56. % disp([' powLo: ' sprintf('%3.0f',powLo) ...
  57. %         '  (len: ' sprintf('%2.0f',lenLo),')']);
  58. % disp(['powMUL: ' sprintf('%3.0f',powMUL)]);
  59. % disp(['dLenM4: ' sprintf('%3.0f',mod(lenHi-lenLo,4))]);
  60. % if lenLo~=lenHi && idx==1
  61. %     disp(['lenHiExt: ' sprintf('%3.0f',length(Hi)-lenHi)]);
  62. % end
  63. % disp('------------------------------------------')
  64. % %----------------------------------------------------
  65. %--------------------------------------------
  66. function G = extend_Filter(F,len,long)
  67. d = (long-len)/2;
  68. G = [zeros(1,floor(d)) F zeros(1,ceil(d))];
  69. %--------------------------------------------