DECORREL.M
上传用户:sfyaiting
上传日期:2009-10-25
资源大小:320k
文件大小:3k
源码类别:

GPS编程

开发平台:

Matlab

  1. function [Q,Z,L,D,z] = decorrel (Q,a);
  2. %DECORREL: Decorrelate a (co)variance matrix of ambiguities
  3. %
  4. % This routine creates a decorrelated Q-matrix, by finding the
  5. % Z-matrix and performing the corresponding transformation.
  6. %
  7. % The method is described in:
  8. % The routine is based on Fortran routines written by Paul de Jonge (TUD)
  9. % and on Matlab-routines written by Kai Borre.
  10. % The resulting Z-matrix can be used as follows:
  11. % z = Zt * a; hat(z) = Zt * hat(a);
  12. % Q_hat(z) = Zt * Q_hat(a) * Z
  13. %
  14. % Input arguments:
  15. %   a: Original ambiguities
  16. %   Q: Variance/covariance matrux of ambiguities (original)
  17. %
  18. % Output arguments:
  19. %   Q: Decorrelated variance/covariance matrix
  20. %   Z: Z-transformation matrix
  21. %   L: L matrix (from LtDL-decomposition of Q, optional)
  22. %   D: D matrix (from LtDL-decomposition of Q, optional)
  23. %   z: Transformed ambiguities (optional)
  24. % ----------------------------------------------------------------------
  25. % Function.: decorrel
  26. % Date.....: 19-MAY-1999
  27. % Author...: Peter Joosten
  28. %            Mathematical Geodesy and Positioning
  29. %            Delft University of Technology
  30. % ----------------------------------------------------------------------
  31. % -----------------------
  32. % --- Initialisations ---
  33. % -----------------------
  34. n    = size(Q,1);
  35. Zti  = eye(n);
  36. i1   = n - 1;
  37. sw   = 1;
  38. % --------------------------
  39. % --- LtDL decomposition ---
  40. % --------------------------
  41. [L,D] = ldldecom (Q);
  42. % ------------------------------------------
  43. % --- The actual decorrelation procedure ---
  44. % ------------------------------------------
  45. while sw;
  46.    i  = n;
  47.    sw = 0;
  48.    while ( ~sw ) & (i > 1)
  49.       i = i - 1;
  50.       if (i <= i1); 
  51.       
  52.          for j = i+1:n
  53.             mu = round(L(j,i));
  54.             if mu ~= 0
  55.                L(j:n,i) = L(j:n,i) - mu * L(j:n,j);
  56.                Zti(1:n,j) = Zti(1:n,j) + mu * Zti(1:n,i);
  57.             end
  58.          end
  59.       end;
  60.       delta = D(i) + L(i+1,i)^2 * D(i+1);
  61.       if (delta < D(i+1))
  62.          lambda(3)    = D(i+1) * L(i+1,i) / delta;
  63.          eta          = D(i) / delta;
  64.          D(i)         = eta * D(i+1);
  65.          D(i+1)       = delta;
  66.          Help         = L(i+1,1:i-1) - L(i+1,i) .* L(i,1:i-1);
  67.          L(i+1,1:i-1) = lambda(3) * L(i+1,1:i-1) + eta * L(i,1:i-1);
  68.          L(i,1:i-1)   = Help;
  69.          L(i+1,i)     = lambda(3);
  70.          Help         = L(i+2:n,i);
  71.          L(i+2:n,i)   = L(i+2:n,i+1);
  72.          L(i+2:n,i+1) = Help;
  73.          
  74.          Help         = Zti(1:n,i);
  75.          Zti(1:n,i)   = Zti(1:n,i+1);
  76.          Zti(1:n,i+1) = Help;
  77.          i1           = i;
  78.          sw           = 1;
  79.       end;
  80.    end;
  81. end;
  82. % ---------------------------------------------------------------------
  83. % --- Return the transformed Q-matrix and the transformation-matrix ---
  84. % --- Return the decorrelated ambiguities, if they were supplied    ---
  85. % ---------------------------------------------------------------------
  86. Z = inv(Zti');
  87. Q = Z' * Q * Z;
  88. if nargin == 2 & nargout >= 5;
  89.   z = Z' * a; %
  90. end;
  91. % ----------------------------------------------------------------------
  92. % End of routine: decorrel
  93. % ----------------------------------------------------------------------