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

GPS编程

开发平台:

Matlab

  1. function satp = satpos(t,eph);
  2. %SATPOS   Calculation of X,Y,Z coordinates at time t
  3. %         for given ephemeris eph
  4. %Kai Borre 04-09-96
  5. %Copyright (c) by Kai Borre
  6. %$Revision: 1.0 $  $Date: 1997/09/26  $
  7. GM = 3.986008e14;             % earth's universal gravitational
  8. % parameter m^3/s^2
  9. Omegae_dot = 7.2921151467e-5; % earth rotation rate, rad/s
  10. %  Units are either seconds, meters, or radians
  11. %  Assigning the local variables to eph
  12. svprn   =   eph(1);
  13. af2     =   eph(2);
  14. M0      =   eph(3);
  15. roota   =   eph(4);
  16. deltan  =   eph(5);
  17. ecc     =   eph(6);
  18. omega   =   eph(7);
  19. cuc     =   eph(8);
  20. cus     =   eph(9);
  21. crc     =  eph(10);
  22. crs     =  eph(11);
  23. i0      =  eph(12);
  24. idot    =  eph(13);
  25. cic     =  eph(14);
  26. cis     =  eph(15);
  27. Omega0  =  eph(16);
  28. Omegadot=  eph(17);
  29. toe     =  eph(18);
  30. af0     =  eph(19);
  31. af1     =  eph(20);
  32. toc     =  eph(21);
  33. % Procedure for coordinate calculation
  34. A = roota*roota;
  35. tk = check_t(t-toe);
  36. n0 = sqrt(GM/A^3);
  37. n = n0+deltan;
  38. M = M0+n*tk;
  39. M = rem(M+2*pi,2*pi);
  40. E = M;
  41. for i = 1:10
  42.    E_old = E;
  43.    E = M+ecc*sin(E);
  44.    dE = rem(E-E_old,2*pi);
  45.    if abs(dE) < 1.e-12
  46.       break;
  47.    end
  48. end
  49. E = rem(E+2*pi,2*pi);
  50. v = atan2(sqrt(1-ecc^2)*sin(E), cos(E)-ecc);
  51. phi = v+omega;
  52. phi = rem(phi,2*pi);
  53. u = phi              + cuc*cos(2*phi)+cus*sin(2*phi);
  54. r = A*(1-ecc*cos(E)) + crc*cos(2*phi)+crs*sin(2*phi);
  55. i = i0+idot*tk       + cic*cos(2*phi)+cis*sin(2*phi);
  56. Omega = Omega0+(Omegadot-Omegae_dot)*tk-Omegae_dot*toe;
  57. Omega = rem(Omega+2*pi,2*pi);
  58. x1 = cos(u)*r;
  59. y1 = sin(u)*r;
  60. satp(1,1) = x1*cos(Omega)-y1*cos(i)*sin(Omega);
  61. satp(2,1) = x1*sin(Omega)+y1*cos(i)*cos(Omega);
  62. satp(3,1) = y1*sin(i);
  63. %%%%%%%%% end satpos.m %%%%%%%%%