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

GPS编程

开发平台:

Matlab

  1. function ddr = tropo(sinel,hsta,p,tkel,hum,hp,htkel,hhum)
  2. %TROPO  Calculation of tropospheric correction.
  3. %       The range correction ddr in m is to be subtracted from
  4. %       pseudo-ranges and carrier phases
  5. % sinel    sin of elevation angle of satellite
  6. % hsta     height of station in km
  7. % p        atmospheric pressure in mb at height hp
  8. % tkel     surface temperature in degrees Kelvin at height htkel
  9. % hum      humidity in % at height hhum
  10. % hp       height of pressure measurement in km
  11. % htkel    height of temperature measurement in km
  12. % hhum     height of humidity measurement in km
  13. % Reference
  14. % Goad, C.C. & Goodman, L. (1974) A Modified Tropospheric
  15. % Refraction Correction Model. Paper presented at the
  16. % American Geophysical Union Annual Fall Meeting, San
  17. % Francisco, December 12-17
  18. % A Matlab reimplementation of a C code from driver.
  19. % Kai Borre 06-28-95
  20. a_e = 6378.137;     % semi-major axis of earth ellipsoid
  21. b0 = 7.839257e-5;
  22. tlapse = -6.5;
  23. tkhum = tkel+tlapse*(hhum-htkel);
  24. atkel = 7.5*(tkhum-273.15)/(237.3+tkhum-273.15);
  25. e0 = 0.0611*hum*10^atkel;
  26. tksea = tkel-tlapse*htkel;
  27. em = -978.77/(2.8704e6*tlapse*1.0e-5);
  28. tkelh = tksea+tlapse*hhum;
  29. e0sea = e0*(tksea/tkelh)^(4*em);
  30. tkelp = tksea+tlapse*hp;
  31. psea = p*(tksea/tkelp)^em;
  32. if sinel < 0
  33.    sinel = 0; 
  34. end;
  35. tropo = 0;
  36. done = 'FALSE';
  37. refsea = 77.624e-6/tksea;
  38. htop = 1.1385e-5/refsea;
  39. refsea = refsea*psea;
  40. ref = refsea*((htop-hsta)/htop)^4;
  41. while 1
  42.    rtop = (a_e+htop)^2-(a_e+hsta)^2*(1-sinel^2);
  43.    if rtop < 0, rtop = 0; end;   % check to see if geometry is crazy
  44.    rtop = sqrt(rtop)-(a_e+hsta)*sinel;
  45.    a = -sinel/(htop-hsta);
  46.    b = -b0*(1-sinel^2)/(htop-hsta);
  47.    rn = zeros(8,1);
  48.    for i = 1:8
  49.       rn(i) = rtop^(i+1); 
  50.    end;
  51.    alpha = [2*a, 2*a^2+4*b/3, a*(a^2+3*b),...
  52.                a^4/5+2.4*a^2*b+1.2*b^2, 2*a*b*(a^2+3*b)/3,...
  53.                              b^2*(6*a^2+4*b)*1.428571e-1, 0, 0];
  54.    if b^2 > 1.0e-35, alpha(7) = a*b^3/2; alpha(8) = b^4/9; end;
  55.    dr = rtop;
  56.    dr = dr+alpha*rn;
  57.    tropo = tropo+dr*ref*1000;
  58.    if done == 'TRUE ', ddr = tropo; break; end;
  59.    done = 'TRUE ';
  60.    refsea = (371900.0e-6/tksea-12.92e-6)/tksea;
  61.    htop = 1.1385e-5*(1255/tksea+0.05)/refsea;
  62.    ref = refsea*e0sea*((htop-hsta)/htop)^4;
  63. end;
  64. %%%%%%%%% end tropo.m  %%%%%%%%%%%%%%%%%%%