(20190520)计算卫星高度角&方位角

function [Ele,Azi]= Cal_EA(rec_x,rec_y,rec_z,sat_x,sat_y,sat_z)
[b,l]=XYZtoBLH(rec_x,rec_y,rec_z);
T=[-sin(b)*cos(l) -sin(b)*sin(l) cos(b);
    -sin(l)               cos(l)         0;
    cos(b)*cos(l) cos(b)*sin(l)  sin(b)];%(XYZ to NEU)
d_xyz=[sat_x,sat_y,sat_z]-[rec_x,rec_y,rec_z];
NEU=T*(d_xyz)';
Ele=atan(NEU(3)/sqrt(NEU(1)*NEU(1)+NEU(2)*NEU(2)));
Azi=atan(abs(NEU(2)/NEU(1)));
if NEU(1)>0
    if NEU(2)>0
    else
        Azi=2*pi-Azi;
    end
else
    if NEU(2)>0
        Azi=pi-Azi;
    else
        Azi=pi+Azi;
    end 
end
end

补充XYZ2BLH:

function [B,L] = XYZtoBLH(X,Y,Z)
a=6378137;
e2=0.0066943799013;
L=atan(abs(Y/X));
if Y>0
    if X>0
    else
        L=pi-L;
    end
else
    if X>0
        L=2*pi-L;
    else
        L=pi+L;
    end
end
B0=atan(Z/sqrt(X^2+Y^2));
while (1)
    N=a/sqrt(1-e2*sin(B0)*sin(B0));
    H=Z/sin(B0)-N*(1-e2);
    B=atan(Z*(N+H)/(sqrt(X^2+Y^2)*(N*(1-e2)+H)));
    if abs(B-B0)<1e-6;break;end
    B0=B;
end
N=a/sqrt(1-e2*sin(B)*sin(B));
end

 

你可能感兴趣的:(GNSS,matlab)