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

波变换

开发平台:

Matlab

  1. function n = depo2ind(order,node)
  2. %DEPO2IND Node depth-position to node index.
  3. %   For a tree of order ORD, N = DEPO2IND(ORD,[D P])
  4. %   computes the indices N of the nodes whose
  5. %   depths and positions are encoded within [D,P].
  6. %   The nodes are numbered from left to right and
  7. %   from top to bottom. The root index is 0.
  8. %
  9. %   D (depths) and P (positions) are column vectors.
  10. %   such that:
  11. %     0 <= D and 0 <= P <= ORD^D-1.
  12. %   Output indices N is a column vector of integers such that:
  13. %     0 <= N < ((ORD^(max(D)+1))-1)/(ORD-1).
  14. %
  15. %   Note: for a column vector X, DEPO2IND(ORD,X) = X.
  16. %
  17. %   See also IND2DEPO.
  18. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  19. %   Last Revision: 17-Dec-2003.
  20. %   Copyright 1995-2004 The MathWorks, Inc.
  21. % $Revision: 1.11.4.2 $
  22. % At depth d, the index of the first (left)
  23. % node is ind = (order^d-1)/(order-1)
  24. % All indices at depth d are:
  25. %     ip = (order^d-1)/(order-1) + p
  26. %     with 0 <= p <= (order^d-1)
  27. [r,c] = size(node);
  28. switch c
  29.     case {0,1} , opt = 'ind';
  30.     case 2     , opt = 'depo';
  31.     otherwise  ,  if r <2 , opt = 'ind'; else , opt = 'error'; end
  32. end
  33. switch opt
  34.     case 'ind' , n = node;
  35.     case 'depo';
  36.         n = zeros(r,1);
  37.         K = node(:,1)>0;
  38.         switch order
  39.           case 1 ,    n(K) = node(K,1);
  40.           otherwise , n(K) = (order.^node(K,1)-1)/(order-1)+node(K,2);
  41.         end
  42.     case 'error' , error('Invalid argument value.');
  43. end