UWBIns/Code/Matlab/lib/gnss/satellite_az_el.m

26 lines
667 B
Mathematica
Raw Permalink Normal View History

2025-04-16 20:15:33 +08:00
function [az, el] = satellite_az_el(SP, RP)
%% <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(el), <EFBFBD>ͷ<EFBFBD>λ<EFBFBD><EFBFBD>(az)
% get_satellite_az_el: computes the satellite azimuth and elevation
% given the position of the user and the satellite in ECEF
% : SP: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ECEF
% RP: <EFBFBD>û<EFBFBD>λ<EFBFBD><EFBFBD>ECEF
% Output Args:
% az: azimuth: <EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
% el: elevation<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
% <EFBFBD>ο<EFBFBD> GPS ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> л<EFBFBD><EFBFBD>
[lat, lon, ~] = ch_ECEF2LLA(RP);
C_ECEF2ENU = [-sin(lon) cos(lon) 0; -sin(lat)*cos(lon) -sin(lat)*sin(lon) cos(lat); cos(lat)*cos(lon) cos(lat)*sin(lon) sin(lat)];
enu = C_ECEF2ENU*[SP - RP];
% nroamlized line of silght vector
enu = enu / norm(enu);
az = atan2(enu(1), enu(2));
el = asin(enu(3)/norm(enu));
end