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

GPS编程

开发平台:

Matlab

  1. %ASH_DD  Arrangement and Formatting of Double Differenced Code
  2. %       and Phase Observations.
  3. %Kai Borre 04-28-96
  4. %Copyright (c) by Kai Borre
  5. %$Revision: 1.0 $  $Date: 1997/09/23  $
  6. %THIS SAMPLE CODE DOES NOT ACCOUNT FOR CYCLE SLIPS
  7. % Initial computations of constants
  8. v_light = 299792458;      % vacuum speed of light m/s
  9. f1 = 154*10.23E6;        % L1 frequency Hz
  10. f2 = 120*10.23E6;        % L2 frequency Hz
  11. lambda1 = v_light/f1;     % wavelength on L1:  .19029367  m
  12. lambda2 = v_light/f2;     % wavelength on L2:  .244210213 m
  13. alpha1 = f1^2/(f1^2-f2^2);  % parameters for ionosphere free
  14. alpha2 = -f2^2/(f1^2-f2^2); % combination
  15. omegae = 7.292115147e-5;  % rotation rate of the earth rad/s
  16. Big = 10^10;
  17. fidb = fopen('bdata.dat');
  18. [da,count] = fread(fidb,Inf,'double');
  19. rows = count/7;
  20. B = reshape(da,rows,7);
  21. clear da
  22. i1 = [];
  23. for i = 1:rows-1
  24.    if B(i+1,1) < B(i,1), i1 = [i1 i]; end; 
  25. end
  26. BR = B(1:i1,:);     % rover data
  27. BM = B(i1+1:rows,:);  % master data
  28. clear B
  29. % Further preparation of data from rover
  30. [sats,indsv] = sort(BR(:,2));
  31. [mr,nr] = size(BR);
  32. s1 = [];
  33. sats(1) = 0;
  34. for i = 2:mr
  35.    if sats(i) > sats(i-1), s1 = [s1 i]; end; 
  36. end
  37. svs1 = sats([s1]);  % satellites observed at rover
  38. [nosvs1,nr] = size(svs1);
  39. t1 = zeros(nosvs1,1);
  40. sum = zeros(nosvs1,1);
  41. for t = 1:nosvs1
  42.    for i = 1:mr
  43.      if sats(i) == svs1(t), sum(t) = sum(t)+BR(indsv(i),7);
  44.          t1(t) = t1(t)+1; 
  45.      end;
  46.   end;
  47. end;
  48. for i = 1:nosvs1
  49.    fprintf('Satellite %3.0f has average elevation %4.1fn',...
  50.                                          svs1(i), sum(i)/t1(i)); 
  51. end
  52. % Reference satellite
  53. [maxv,maxi] = max(t1); % t1 counts number of epochs for each satellite
  54. ar1 = svs1((t1-maxv) == 0);
  55. [y1,in1] = max(sum ./t1);
  56. if any(ar1-svs1(in1))
  57.     refsv = svs1(in1);  
  58. else
  59.     refsv = svs1(in1);
  60. end 
  61. % Cutoff angle set to 15 degrees; deletion of low satellites
  62. svs1(sum ./t1 < 15) = [];
  63. [ms,ns] = size(svs1);
  64. fprintf('Cutoff angle: %3.0fn', 15)
  65. fprintf('Satellites used: %3.0fn', svs1)
  66. % Arranging data epoch-by-epoch for all satellites
  67. for i = 1:ms
  68.    for tt = 1:mr
  69.       if svs1(i) == sats(tt)
  70.          datar = BR(indsv(1:tt),:); 
  71.       end;
  72.    end;
  73. end;
  74. [md,nd] = size(datar);
  75. clear BR
  76. % Deletion of data for low satellites
  77. i = 0;
  78. del_i = [];
  79. while 1
  80.    i = i+1;
  81.    if i == md, break, end;
  82.    vec = svs1-datar(i,2);
  83.    y = all(vec);
  84.    if y > 0, del_i = [del_i i]; end;
  85. end
  86. datar(del_i,:) = [];
  87. [mr,nr] = size(datar);
  88. noepochs = mr/ms;
  89. % Preparation of data from master
  90. [sats,indsv] = sort(BM(:,2));
  91. [mm,nm] = size(BM);
  92. for i = 1:ms
  93.    for tt = 1:mm
  94.       if svs1(i) == sats(tt),
  95.          datam = BM(indsv(1:tt),:); 
  96.       end;
  97.   end;
  98. end;
  99. [md,nd] = size(datam);
  100. i = 0;
  101. del_i = [];
  102. while 1
  103.    i = i+1;
  104.    if i == md, break, end;
  105.    vec = svs1-datam(i,2);
  106.    y = all(vec);
  107.    if y > 0, del_i = [del_i i]; end;
  108. end
  109. datam(del_i,:) = [];
  110. clear BM
  111. % Small manipulations around the reference satellite
  112. for i = 1:ms
  113.    if svs1(i) == refsv, break, end;
  114. end;
  115. i_refsv = i;
  116. svs1(i_refsv) = [];
  117. %  Data for the reference satellite copied to own variables; and
  118. %  deleted in original variables datar and datam. This makes life
  119. %  much easier!
  120. refstart = (i_refsv-1)*noepochs+1;
  121. refslut = i_refsv*noepochs;
  122. datarref = datar(refstart:refslut,:);
  123. datamref = datam(refstart:refslut,:);
  124. datar(refstart:refslut,:) = [];
  125. datam(refstart:refslut,:) = [];
  126. % Each row in a data-file has 7 columns with the following contents
  127. % #1      #2   #3  #4    #5   #6     #7
  128. %  epoch   sv   P1  Phi1  P2   Phi2   elevation
  129. wl = [];
  130. n1 = [];
  131. ef = 5;        % first epoch
  132. el = 90;        % last epoch
  133. fprintf('nReference Satellite: %3.0fnn', refsv)
  134. fprintf('Begin time %10.0fn', datar(ef,1))
  135. fprintf('End time   %10.0fnn', datar(el,1))
  136. fprintf('Epoch interval %4.0fnn', datar(2,1)-datar(1,1))
  137. %%%%%%% end ash_dd.m %%%%%%%%%%%%%%%%%%%%%