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

波变换

开发平台:

Matlab

  1. function [t,rec] = nodejoin(t,nodes)
  2. %NODEJOIN Recompose node(s).
  3. %   T = NODEJOIN(T,N) returns the modified tree T
  4. %   corresponding to a recomposition of the nodes N.
  5. %
  6. %   The nodes are numbered from left to right and
  7. %   from top to bottom. The root index is 0.
  8. %
  9. %   T = NODEJOIN(T) is equivalent to T = NODEJOIN(T,0).
  10. %
  11. %   See also NODESPLT.
  12. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  13. %   Last Revision: 23-May-2003.
  14. %   Copyright 1995-2004 The MathWorks, Inc.
  15. %   $Revision: 1.4.4.2 $  $Date: 2004/03/15 22:38:25 $
  16. if nargin == 1, nodes = 0; end
  17. %--------------------------------
  18. order = t.order;
  19. nodes = depo2ind(order,nodes);
  20. rec = [];
  21. % Elimination of terminal nodes and irrelevant nodes.
  22. %----------------------------------------------------
  23. nbNodes = length(nodes);
  24. if nbNodes>1
  25.     tn = t.tn;
  26.     nodes = nodes(~ismember(nodes,tn));
  27.     nodes = nodes(isnode(t,nodes));
  28.     if isempty(nodes) , return; end
  29. else
  30.     r = oknode(t,nodes,'ntn');
  31.     if r==false , return; end
  32.     tn = t.tn;
  33. end
  34. depth = t.depth;
  35. % Find new terminal nodes and new depth.
  36. %---------------------------------------
  37. tab = zeros(length(tn),depth+1);
  38. tab(:,1) = tn;
  39. for j = 1:depth
  40.     tab(:,j+1) = floor((tab(:,j)-1)/order);
  41. end
  42. for k = 1:length(nodes)
  43.     node_k = nodes(k);
  44.     [row,col] = find(tab==node_k);
  45.     tab(row(1),1) = node_k;
  46.     tab(row(2:end),1) = NaN;
  47.     if nargout==2
  48.         rec = [rec ; recnodes(tab,row,col,node_k)];
  49.     end
  50. end
  51. tn = tab(~isnan(tab(:,1)),1);
  52. switch order
  53.   case 1    , depth = max(tn);
  54.   otherwise , depth = floor(log((order-1)*max(tn)+1)/log(order));
  55. end
  56. t = set(t,'depth',depth,'tn',tn);
  57. % rec = wrev(unique(rec));
  58. if nargout==2 && ~isempty(rec)
  59.     rec = sort(rec);
  60.     d = diff(rec);
  61.     J = 1 + find(d>0);
  62.     K = [J(end:-1:1) ; 1];
  63.     rec = rec(K);
  64. end
  65. %--------------------------------------------
  66. function rec = recnodes(tab,row,col,node)
  67. %RECNODES Find nodes to be reconstructed.
  68. %
  69. beg_col = 2;
  70. icol    = find(col>beg_col);
  71. end_col = max(col(icol))-1;
  72. rec     = tab(row(icol),beg_col:end_col);
  73. rec     = rec(:);
  74. rec     = [node;rec(rec>node)];
  75. %--------------------------------------------