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

GPS编程

开发平台:

Matlab

  1. function [H, Qaj] = unidecor(example)
  2. %UNIDECOR Computes a decorrelating transformation as described in
  3. %           Liu et al. (1999) A new approach to GPS ambiguity 
  4. %           decorrelation, Journal of Geodesy, vol 73: 478-490
  5. % Qa......: ambiguity covarinace matrix
  6. % dim.....: dimension of ambiguity covariance matrix
  7. % H.......: decorrelating transformation
  8. % Qaj.....: ambiguity correlation matrix in iteration j
  9. % Hj......: decorrelating transformation in iteration j
  10. % Lj......: permutation matrix
  11. % Kj......: lower diagonal matrix, with one column
  12. % of coefficients of the L-matrix of the
  13. % LDL'-decomposition
  14. % Final transformation and decorrelated covariance matrix are
  15. % stored in H and Qaj
  16. % Three examples of ambiguity covariance
  17. % matrices, mentioned in the paper
  18. % specify covariance matrix by using the "example"-variable
  19. %Written by Niels Jonkman
  20. %November 1999
  21. if example == 1
  22.    Qa = [80.0 9.75 27.8;
  23.       9.75 1.25 3.45;
  24.       27.8 3.45 10.0];
  25. elseif example == 2
  26.    Qa = [81.708 34.09 75.934 78.342 94.720 146.448;
  27.       34.090 19.611 31.422 34.344 49.839 64.905;
  28.       75.934 31.422 70.641 72.615 87.351 135.801;
  29.       78.342 34.344 72.615 76.029 94.675 141.869;
  30.       94.720 49.839 87.351 94.675 131.472 177.552;
  31.       146.448 64.905 135.801 141.869 177.552 265.416];
  32. else
  33.    Qa = [35.366 40.078 32.142 43.475 42.154 31.859 36.369 39.035 42.985 41.515 45.805 40.521;
  34.       40.078 45.830 36.807 49.742 47.882 36.161 40.784 44.697 48.435 46.933 52.121 45.521; 
  35.       32.142 36.807 30.163 40.284 39.284 29.866 32.807 36.167 38.885 37.503 41.834 36.410;
  36.       43.475 49.742 40.284 56.096 53.512 39.783 44.399 48.693 52.019 51.001 56.903 49.695;
  37.       42.154 47.882 39.284 53.512 53.400 39.476 44.710 46.956 51.463 49.903 55.093 48.131;
  38.       31.859 36.161 29.866 39.783 39.476 30.295 33.573 35.344 38.779 37.203 42.310 36.344;
  39.       36.369 40.784 32.807 44.399 44.710 33.573 41.148 38.815 44.450 42.904 46.782 41.726;
  40.       39.035 44.697 36.167 48.693 46.956 35.344 38.815 44.307 47.326 45.624 50.415 44.099; 
  41.       42.985 48.435 38.885 52.019 51.463 38.779 44.450 47.326 53.096 50.840 55.776 49.417;
  42.       41.515 46.933 37.503 51.001 49.903 37.203 42.904 45.624 50.840 49.216 53.950 47.831;
  43.       45.805 52.121 41.834 56.903 55.093 42.310 46.782 50.415 55.776 53.950 64.832 52.595;
  44.       40.521 45.521 36.410 49.695 48.131 36.344 41.726 44.099 49.417 47.831 52.595 47.218];
  45. end
  46. t = cputime;
  47. %%for q = 1:1000
  48.    % initialization
  49.    % Hj is intialized as a matrix of ones rather than as
  50.    % a unit matrix, in order to get the iteration going
  51.    dim = length(Qa);
  52.    H = eye(dim);
  53.    Hj = ones(dim);
  54.    Qaj = Qa;
  55.    % iterate the HL-processes until the
  56.    % Hj-matrix equals a unit matrix
  57.    while ~isempty(find(Hj-eye(dim)))
  58.       % initialization
  59.       Hj = eye(dim);
  60.       % HL-process
  61.       for i = 1:1:dim-1
  62.          % initialization
  63.          Lj = eye(dim);
  64.          Kj = eye(dim);
  65.          % determine the index of the largest
  66.          % diagonal element of the vc-matrix
  67.          swapindex = find(diag(Qaj) == min(diag(Qaj(i:dim,i:dim))));
  68.          % build permutation matrix
  69.          Lj(i,i) = 0;
  70.          Lj(swapindex,swapindex) = 0;
  71.          Lj(i,swapindex) = 1;
  72.          Lj(swapindex,i) = 1;
  73.          % permutate covariance matrix
  74.          Qaj = Lj*Qaj*Lj';
  75.          % determine column i of L-matrix in
  76.          % LDL'-decomposition and store in matrix Kj
  77.          Kj(i+1:dim,i) = -Qaj(i+1:dim,i)/Qaj(i,i);
  78.          % apply transformation
  79.          Qaj = Kj*Qaj*Kj';
  80.          % determine "float" transformation matrix
  81.          Hj = Kj*Lj*Hj;
  82.       end;
  83.       % round the "float" transformation matrix
  84.       Hj = round(Hj);
  85.       % determine transformation matrix after iteration j
  86.       H = Hj*H;
  87.       % apply transformation
  88.       Qaj = H*Qa*H';
  89.    end;
  90. %% end
  91. cputime-t
  92. %%%%%%%%%%%%%%%%%%%% end unidecor.m  %%%%%%%%%%%%%