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

GPS编程

开发平台:

Matlab

  1. function [afixed,sqnorm,Qahat,Z] = lambda2 (afloat,Qahat)
  2. %LAMBDA2: Integer ambiguity estimation using LAMBDA (basic version)
  3. %
  4. % This routine performs an integer ambiguity estimation using the 
  5. % LAMBDA-method, as developed by the Delft University of Technology, 
  6. % Mathematical Geodesy and Positioning.
  7. %
  8. % Input arguments:
  9. %    afloat: Float ambiguities (hat{a}, must be a column!)
  10. %    Qahat : Variance/covariance matrix of ambiguities (Q_hat{a})
  11. %
  12. % Output arguments:
  13. %    afixed: Estimated integers
  14. %    sqnorm: Distance between candidates and float ambiguity vector
  15. %    Qzhat : Decorrelated variance/covariance matrix
  16. %    Z     : Transformation matrix
  17. % ----------------------------------------------------------------------
  18. % File.....: lambda2.m
  19. % Date.....: 19-MAY-1999
  20. % Author...: Peter Joosten
  21. %            Mathematical Geodesy and Positioning
  22. %            Delft University of Technology
  23. % ----------------------------------------------------------------------
  24. % ----------------------------------------------------------------------
  25. % Initalise
  26. % ----------------------------------------------------------------------
  27. ncands = 2;
  28. n      = size (Qahat,1);
  29. afixed = zeros(n,ncands);
  30. sqnorm = zeros(1,ncands);
  31. % ----------------------------------------------------------------------
  32. % --- Perform tests on the input, these tests are rather extensive   ---
  33. % --- and can be switched off (by commenting-out) if necessary       ---
  34. % --- Tests: Is the Q-matrix symmetric?                              ---
  35. % ---        Is the Q-matrix positive-definite?                      ---
  36. % ---        Do the Q-matrix and ambiguity-vector have identical     ---
  37. % ---        dimensions?                                             ---
  38. % ---        Is the ambiguity vector a column?                       ---
  39. % ----------------------------------------------------------------------
  40. %%if ~isequal(Qahat-Qahat'<1E-12,ones(size(Qahat)));
  41. %%  error ('Variance/covariance matrix is not symmetric!');
  42. %%end;
  43. if sum(eig(Qahat)>0) ~= size(Qahat,1);
  44.   error ('Variance/covariance matrix is not positive definite!');
  45. end;
  46. if length(afloat) ~= size(Qahat,1);
  47.   error (['Variance/covariance matrix and vector of ambiguities do not have' ...
  48.   ' identical dimensions!']);
  49. end;
  50. if size(afloat,2) ~= 1;
  51.   error ('Ambiguity-vector should be a column-vector');
  52. end;
  53. % ----------------------------------------------------------------------
  54. % Make estimates in 'a' between -1 and +1 by subtracting an
  55. % integer number, store the increments in 'incr' (= shift the centre
  56. % of the ellipsoid over the grid by an integer translation)
  57. % ----------------------------------------------------------------------
  58. incr   = afloat - rem(afloat,1);
  59. afloat = rem(afloat,1);
  60. % ----------------------------------------------------------------------
  61. % Compute the Z-transformation based on L and D of Q, ambiguities
  62. % are transformed according to hat{z} = Z^That{a}, Q is transformed
  63. % according to Q_hat{z} = Z^T * Q_hat{a} * Z
  64. % ----------------------------------------------------------------------
  65. [Qahat,Z,L,D,afloat] = decorrel (Qahat,afloat);
  66. % ----------------------------------------------------------------------
  67. % Compute a suitable Chi^2 such that we have the requested number of 
  68. % candidates at minimum; use an 'eps' to make sure the candidates are 
  69. % inside the ellipsoid and not exactly on the border.
  70. % ----------------------------------------------------------------------
  71. Chi2 = chistart (D,L,afloat,ncands);
  72. % ----------------------------------------------------------------------
  73. % Find the requested number of candidates (search)
  74. % ----------------------------------------------------------------------
  75. [afixed,sqnorm,ierr] = lsearch (afloat,L,D,Chi2,ncands);
  76. if ierr == 1; error ('Not enough candidates were found!!'); end;
  77. % ----------------------------------------------------------------------
  78. % --- Perform the back-transformation and add the increments
  79. % ----------------------------------------------------------------------
  80. afixed = (afixed' * inv(Z))';
  81. afixed = round(afixed + repmat(incr,1,ncands));
  82. % ----------------------------------------------------------------------
  83. % End of routine: lambda2
  84. % ----------------------------------------------------------------------