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

波变换

开发平台:

Matlab

  1. function y = upsconv2(x,f,s,dwtARG1,dwtARG2)
  2. %UPSCONV2 Upsample and convolution.
  3. %
  4. %   Y = UPSCONV2(X,{F1_R,F2_R},S,DWTATTR) returns the size-S
  5. %   central portion of the one step dyadic interpolation 
  6. %   (upsample and convolution) of matrix X using filter F1_R 
  7. %   for rows and filter F2_R for columns. The upsample and 
  8. %   convolution attributes are described by DWTATTR.
  9. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 06-May-2003.
  10. %   Last Revision: 21-May-2003.
  11. %   Copyright 1995-2004 The MathWorks, Inc.
  12. %   $Revision: 1.1.6.2 $  $Date: 2004/03/15 22:42:01 $
  13. % Special case.
  14. if isempty(x) , y = 0; return; end
  15. % Check arguments for Extension and Shift.
  16. switch nargin
  17.     case 3 , 
  18.         perFLAG  = 0;  
  19.         dwtSHIFT = [0 0];
  20.     case 4 , % Arg4 is a STRUCT
  21.         perFLAG  = isequal(dwtARG1.extMode,'per');
  22.         dwtSHIFT = mod(dwtARG1.shift2D,2);
  23.     case 5 , 
  24.         perFLAG  = isequal(dwtARG1,'per');
  25.         dwtSHIFT = mod(dwtARG2,2);
  26. end
  27. % Define Size.
  28. sx = 2*size(x);
  29. lf = length(f{1});
  30. if isempty(s)
  31.     if ~perFLAG , s = sx-lf+2; else , s = sx; end
  32. end
  33. % Compute Upsampling and Convolution.
  34. y = x;
  35. if ~perFLAG
  36.     y = wconv2('col',dyadup(y,'row',0),f{1});
  37.     y = wconv2('row',dyadup(y,'col',0),f{2});
  38.     y = wkeep2(y,s,'c',dwtSHIFT);
  39. else
  40.     y = dyadup(y,'row',0,1);
  41.     y = wextend('addrow','per',y,lf/2);
  42.     y = wconv2('col',y,f{1});
  43.     y = y(lf:lf+s(1)-1,:);
  44.     %-------------------------------------------
  45.     y = dyadup(y,'col',0,1);
  46.     y = wextend('addcol','per',y,lf/2);
  47.     y = wconv2('row',y,f{2});
  48.     y = y(:,lf:lf+s(2)-1);
  49.     %-------------------------------------------
  50.     if dwtSHIFT(1)==1 , y = y([2:end,1],:); end
  51.     if dwtSHIFT(2)==1 , y = y(:,[2:end,1]); end
  52.     %-------------------------------------------
  53. end