⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sv_ephemeris_model.m

📁 mathworks公司开发的GPS工具箱,有一定参考价值,但需要进一步完善
💻 M
字号:
%This Function use Ephemeris Data and Calculate satellite Position 
%CopyRight By Moein Mehrtash
%**************************************************************************
% Written by Moein Mehrtash, Concordia University, 3/28/2008              *
% Email: moeinmehrtash@yahoo.com                                          *
%**************************************************************************
%**************************************************************************
% Satellite Position By Ephemeris Model 
%Function's Inputs:
    % GPS_RVC_T:(Sec):
    % A:semi-major orbit axis (meter)
    % n0: Compute mean motion (rad/s)
    % tk:time from ephemeris reference epoch
    % n: corrected mean motion
    % Dealta_n:correction for mean motion
    % M0:mean Anomaly at refernce time
    % Mk:Mean anomaly
    % Ek: Keplers equation for the eccentric anomaly Ek (rad)
    % e: orbit eccentricity
    % Toe: Refernce time of ephemeris parameters
    % i0: inlination angle at reference time
    % Phik:Argument of lattitude
    % Omega0: Longitude of Ascending Node
    % omega: Argument of perigee (semicicrcle)
    % Omegadot: rate of right ascension
    % IDOT: rate of inlination angle
    % Delta_uk:Argument of lattitude correction
    % Delta_rk:Argument of radius correction
    % Delta_ik:Argument of inclination correction
    % uk:Corrcted argument of lattitude
    % rk: corrected radius
    % ik:corrected inclination
    % xpk:satellite position in orbital plane
    % ypk:satellite position in orbital plane
    % SEcond Harmonic Perturbation coefiicient
        %C_us:Amplitude of the cosine harmonic correction term to the argument
        %     of lattitude(Rad)
        %C_uc:Amplitude of the sine harmonic correction term to the argument
        %     of lattitude(Rad)
        %C_rs:Amplitude of the cosine harmonic correction term to orbit
              %radius(meter)
        %C_rc:Amplitude of the sine harmonic correction term to orbit
              %radius(meter)
        %C_is:Amplitude of the cosine harmonic correction term to the angle of
        %     inclination(Rad)
        %C_ic:Amplitude of the sine harmonic correction term to the angle of
        %     inclination(Rad)

  
%Function's Outputs:
    % xk,yk,zk: Satellite position in ECEF
    % Ek:Eccentric Anomaly
    % A:semi-major orbit axis
    % e: orbit eccentricity
    % ik: Corrected Inlination
    % Omegak: Corrected longitude of ascending node
    % Nuk:True anomaly as a function of the eccentric anomaly
    %Function's Constants:
    % Mu:WGS-84 value of the earths universal gravitational 
    %    parameter(3.986005*10^14 m4/s2)
    % Omega_dote:WGS-84 value of the earths roration rate 
    %           (7.2921151467*10^(-5)rad/s)
%Input:(GPS_RVC_T,[C_rs Dealta_n M0 C_uc e C_us sqrt(A) Toe C_ic Omega0 C_is
%                  i0 C_rc omega Omegadot IDOT]     

%************************************************************************** 
function [Pos_xyz_Mat,Orbit_parameter]=SV_Ephemeris_Model(GPS_RVC_T,data);

[Parameter,ST_NO]=size(data);
% Constant Parameter of this function
Mu=3.986005*10^14;
Omega_dote=7.2921151467*10^(-5);

for ST_No=1:ST_NO

%Load Data 
A=data(7,ST_No)*data(7,ST_No);
t=GPS_RVC_T;
toe=data(8,ST_No);
Delta_n=data(2,ST_No);
M0=data(3,ST_No);
omega=data(14,ST_No);
C_us=data(6,ST_No);
C_uc=data(4,ST_No);
C_rs=data(1,ST_No);
C_rc=data(13,ST_No);
C_is=data(11,ST_No);
C_ic=data(9,ST_No);
i0=data(12,ST_No);
IDOT=data(16,ST_No);
Omega0=data(10,ST_No);
Omegadot=data(15,ST_No);
e=data(5,ST_No);

%************************************************************************** 
%************************************************************************** 
%Compute Time From Ephemeris Refernce Epoch
%Input:
    %t(sec):GPS Sys. Time
    %toe(sec):Reference Time Ephemeris
%Output:
    %tk(sec):Time from ephemeris reference epoch
tk=t-toe;
%************************************************************************** 
%************************************************************************** 
%Compute corrected mean motion
%Input:
    %A(meter): Semi-major axis
    %Mu(meter^3/sec^2): value of Earth's universal gravitational parameters
    %tk(sec):Time from Ephemeris Reference Epoch
    %Delta_n(semi-circle/sec):Mean Motion Diference From Computed Value
    %M0(semi-circles):
%Output:
    %n0(Rad/sec):Computed mean motion 
    %n(semi-circle/sec):Corrected mean motion
    %Mk(semi-circle):Mean anomaly
n0=sqrt(Mu/(A^3));
n=n0/pi+Delta_n;
Mk=M0+n*tk;

%************************************************************************** 
%************************************************************************** 
%Solve Kepler Eq. with Initial value Ek0=Mk
%Use Fzero Function to solve Kepler Eq.
%The fzero command is an M-file. The algorithm, which was originated by 
%T. Dekker, uses a combination of bisection, secant, and inverse quadratic
%interpolation methods. An Algol 60 version, with some improvements, is 
%given in [Brent, R., Algorithms for Minimization Without Derivatives, 
%Prentice-Hall, 1973.]
%Input:
    %Mk(semicircle): Mean Anomaly
    %e:  Eccentricity
%Output:
    %Ek(Rad):  Eccentric Anomaly
Ek=fzero(@(x) Kepler_Eq(x,Mk*pi,e),Mk*pi);
%**************************************************************************
%************************************************************************** 
%Compute True Anomaly as a Function of Eccentric Anomaly
%Input:
    %Ek(Rad):  Eccentric Anomaly
    %e      :  Eccentricity
%Output:
    %nuk(Rad): True Anomaly
Sin_nuk=sqrt(1-e^2)*sin(Ek)/(1-e*cos(Ek));
Cos_nuk=(cos(Ek)-e)/(1-e*cos(Ek));
nuk=atan2(Sin_nuk,Cos_nuk);
if nuk<0
    nuk=nuk+2*pi;
end
%**************************************************************************
%************************************************************************** 
%Compute Argumet of Lattitude and Correction
%Input:
    %nuk(Rad): True Anomaly
    %omega(semicircle):  Argument of perigee
%Output:
    %Phik(Rad):  Argument of lattitude
Phik=nuk+omega*pi;

%**************************************************************************
%************************************************************************** 
%Compute Argumet of Lattitude,Radious and Inclination Correction
%SEcond Harmonic Perturbation
%Input:
    %Phik(Rad):  Argument of lattitude
    %C_us:Amplitude of the cosine harmonic correction term to the argument
    %     of lattitude(Rad)
    %C_uc:Amplitude of the sine harmonic correction term to the argument
    %     of lattitude(Rad)
    %C_rs:Amplitude of the cosine harmonic correction term to orbit
    %radius(meter)
    %C_rc:Amplitude of the sine harmonic correction term to orbit
    %radius(meter)
    %C_is:Amplitude of the cosine harmonic correction term to the angle of
    %     inclination(Rad)
    %C_ic:Amplitude of the sine harmonic correction term to the angle of
    %     inclination(Rad)
%Output:
    % Delta_uk(Rad):Argument of lattitude correction
    % Delta_rk(meter):Argument of radius correction
    % Delta_ik(Rad):Argument of inclination correction

Delta_uk=C_us*sin(2*Phik)+C_uc*cos(2*Phik);
Delta_rk=C_rs*sin(2*Phik)+C_rc*cos(2*Phik);
Delta_ik=C_is*sin(2*Phik)+C_ic*cos(2*Phik);
%**************************************************************************
%************************************************************************** 
%Compute Corrected Value of Lattitude,Radious,Inclination and Ascendong
%node
%Input:
    % Phik(Rad):  Argument of lattitude
    % A(meter): Semi-major axis
    % Ek(Rad):  Eccentric Anomaly
    % e:  Eccentricity    
    % i0(semi-circle): inlination angle at reference time
    % Omega0(semi-circle): Refernce Longitude of Ascending Node
    % Omegadot(semi-circle/sec): rate of right ascension
    % Omega_dote(rad/sec):WGS 84 value of the earth's rotation rate
    % IDOT(semi-circle/sec): rate of inlination angle
    % Delta_uk(Rad):Argument of lattitude correction
    % Delta_rk(meter):Argument of radius correction
    % Delta_ik(Rad):Argument of inclination correction
%Output:
    % uk(Rad):Corrcted argument of lattitude
    % rk(meter): corrected radius
    % ik(Rad):corrected inclination
    % Omegak(Rad):Corrected longitude of ascending node.
uk=Phik+Delta_uk;              %Latitude
rk=A*(1-e*cos(Ek))+Delta_rk;   %Radious
ik=i0*pi+Delta_ik+IDOT*tk*pi;  %Inclination
Omegak=Omega0*pi+(Omegadot*pi-Omega_dote)*tk-Omega_dote*toe;

%**************************************************************************
%************************************************************************** 
%Compute satellite vehicle position
%Satellite position in orbital plane
x_Perk=rk*cos(uk);
y_Perk=rk*sin(uk);
%Satellite Position in ECEF
xk=x_Perk*cos(Omegak)-y_Perk*cos(ik)*sin(Omegak);
yk=x_Perk*sin(Omegak)+y_Perk*cos(ik)*cos(Omegak);
zk=y_Perk*sin(ik);
%Output:
    % xk,yk,zk(meter): Satellite Position in ECEF
    % Mk(semicircle): Mean Anomaly
    % Ek(Rad):  Eccentric Anomaly
    % nuk(Rad): True Anomaly
    % Phik(Rad):  Argument of lattitude
    % uk(Rad):Corrcted argument of lattitude
    % rk(meter): corrected radius
    % ik(Rad):corrected inclination
    % Omegak(Rad):Corrected longitude of ascending node.
    % A(meter):semi-major orbit axis
    % e: orbit eccentricity

Pos_xyz=[xk yk zk Mk Ek nuk Phik uk rk ik Omegak A e];

Pos_xyz_Mat(ST_No,1)=Pos_xyz(1);Pos_xyz_Mat(ST_No,2)=Pos_xyz(2);Pos_xyz_Mat(ST_No,3)=Pos_xyz(3);
for j=1:10
Orbit_parameter(j,ST_No)=Pos_xyz(j+3);
end
end


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -