TROPO.M
资源名称:easy.zip [点击查看]
上传用户:sfyaiting
上传日期:2009-10-25
资源大小:320k
文件大小:2k
源码类别:
GPS编程
开发平台:
Matlab
- function ddr = tropo(sinel,hsta,p,tkel,hum,hp,htkel,hhum)
- %TROPO Calculation of tropospheric correction.
- % The range correction ddr in m is to be subtracted from
- % pseudo-ranges and carrier phases
- % sinel sin of elevation angle of satellite
- % hsta height of station in km
- % p atmospheric pressure in mb at height hp
- % tkel surface temperature in degrees Kelvin at height htkel
- % hum humidity in % at height hhum
- % hp height of pressure measurement in km
- % htkel height of temperature measurement in km
- % hhum height of humidity measurement in km
- % Reference
- % Goad, C.C. & Goodman, L. (1974) A Modified Tropospheric
- % Refraction Correction Model. Paper presented at the
- % American Geophysical Union Annual Fall Meeting, San
- % Francisco, December 12-17
- % A Matlab reimplementation of a C code from driver.
- % Kai Borre 06-28-95
- a_e = 6378.137; % semi-major axis of earth ellipsoid
- b0 = 7.839257e-5;
- tlapse = -6.5;
- tkhum = tkel+tlapse*(hhum-htkel);
- atkel = 7.5*(tkhum-273.15)/(237.3+tkhum-273.15);
- e0 = 0.0611*hum*10^atkel;
- tksea = tkel-tlapse*htkel;
- em = -978.77/(2.8704e6*tlapse*1.0e-5);
- tkelh = tksea+tlapse*hhum;
- e0sea = e0*(tksea/tkelh)^(4*em);
- tkelp = tksea+tlapse*hp;
- psea = p*(tksea/tkelp)^em;
- if sinel < 0
- sinel = 0;
- end;
- tropo = 0;
- done = 'FALSE';
- refsea = 77.624e-6/tksea;
- htop = 1.1385e-5/refsea;
- refsea = refsea*psea;
- ref = refsea*((htop-hsta)/htop)^4;
- while 1
- rtop = (a_e+htop)^2-(a_e+hsta)^2*(1-sinel^2);
- if rtop < 0, rtop = 0; end; % check to see if geometry is crazy
- rtop = sqrt(rtop)-(a_e+hsta)*sinel;
- a = -sinel/(htop-hsta);
- b = -b0*(1-sinel^2)/(htop-hsta);
- rn = zeros(8,1);
- for i = 1:8
- rn(i) = rtop^(i+1);
- end;
- alpha = [2*a, 2*a^2+4*b/3, a*(a^2+3*b),...
- a^4/5+2.4*a^2*b+1.2*b^2, 2*a*b*(a^2+3*b)/3,...
- b^2*(6*a^2+4*b)*1.428571e-1, 0, 0];
- if b^2 > 1.0e-35, alpha(7) = a*b^3/2; alpha(8) = b^4/9; end;
- dr = rtop;
- dr = dr+alpha*rn;
- tropo = tropo+dr*ref*1000;
- if done == 'TRUE ', ddr = tropo; break; end;
- done = 'TRUE ';
- refsea = (371900.0e-6/tksea-12.92e-6)/tksea;
- htop = 1.1385e-5*(1255/tksea+0.05)/refsea;
- ref = refsea*e0sea*((htop-hsta)/htop)^4;
- end;
- %%%%%%%%% end tropo.m %%%%%%%%%%%%%%%%%%%