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

波变换

开发平台:

Matlab

  1. function y = lsupdate(option,x,F,DF,S,LStype)
  2. %LSUPDATE Compute lifting scheme update.
  3. %   For a vector X, Y = LSUPDATE('v',X,F,DF,SY) returns 
  4. %   a vector Y which length is SY. X is filtered by the
  5. %   vector F with a delay of DF.
  6. %   
  7. %   For a matrix X, Y = LSUPDATE('r',X,...) computes the "update"
  8. %   of X rowwise, like in the vector option. Y = LSUPDATE('c',X,...)
  9. %   computes the "update" of X columnwise. In that cases, SY is
  10. %   the size of the matrix Y.
  11. %
  12. %   Y = LSUPDATE(...,INT_FLAG) returns integer values (fix). 
  13. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 23-May-2001.
  14. %   Last Revision: 26-Jun-2003.
  15. %   Copyright 1995-2004 The MathWorks, Inc.
  16. %   $Revision: 1.1.6.3 $  $Date: 2004/04/13 00:39:56 $
  17. lF = length(F);
  18. sx = size(x);
  19. y  = zeros(sx);
  20. switch option
  21.   case 'v'
  22.       lx = length(x);
  23.       for j=1:lF
  24.           t = F(j)*x;
  25.           k = DF-j+1; 
  26.           if     k>0 , t = t(1+k:end); t(end+k)= 0;
  27.           elseif k<0 , t(1-k:end) = t(1:end+k); t(1:-k) = 0;
  28.           end
  29.           y = y + t(1:lx);
  30.       end
  31.       d = S-lx;
  32.       if d>0 , y(end+d) = 0; elseif d<0 , y = y(1:S); end
  33.     
  34.   case 'r'
  35.       for j=1:lF
  36.           k = DF-j+1; 
  37.           t = F(j)*x;
  38.           if     k>0 , t = t(:,1+k:end); t(:,end+k)= 0;
  39.           elseif k<0 , t(:,1-k:end) = t(:,1:end+k); t(:,1:-k) = 0;
  40.           end
  41.           y = y + t(:,1:sx(2));
  42.       end
  43.       d = S(2)-sx(2);
  44.       if d>0 , y(:,end+d) = 0; elseif d<0 , y = y(:,1:S(2)); end
  45.   case 'c'
  46.       for j=1:lF
  47.           k = DF-j+1; 
  48.           t = F(j)*x;
  49.           if     k>0 , t = t(1+k:end,:); t(end+k,:)= 0;
  50.           elseif k<0 , t(1-k:end,:) = t(1:end+k,:); t(1:-k,:) = 0;
  51.           end
  52.           y = y + t(1:sx(1),:);
  53.       end
  54.       d = S(1)-sx(1);
  55.       if d>0 , y(end+d,:) = 0; elseif d<0 , y = y(1:S(1),:); end
  56. end
  57. if ~isempty(LStype) , y = fix(y); end