#gps #simulation #satellite
#gps #simulation #trigonometry #satellite
Вопрос:
В настоящее время я пытаюсь смоделировать производительность пользовательской спутниковой группировки PNT, которую я разработал в программном обеспечении. Я проанализировал данные спутниковой эфемериды в формате навигационного файла RINEX и успешно ввел их в gps-sdr-sim. Однако теперь мне нужно изменить gps-sdr-sim, чтобы каким-то образом «направить» антенны «GPS» в сторону/за пределы Земли, поскольку целью созвездия PNT является обслуживание пользователей Cislunar.
Я нашел только следующую строку кода, которая предполагает, что приемник (основанный на Земле) использует угол возвышения в небе/над горизонтом для расчета соответствующего усиления на основе диаграммы направленности антенны.
ibs = (int)((90.0-rho.azel[1]*R2D)/5.0); // covert elevation to boresight ant_gain = ant_pat[ibs];
Существует также функция проверки видимости, которая просто проверяет, находится ли она над горизонтом (elvMask = 0).
int checkSatVisibility(ephem_t eph, gpstime_t g, double *xyz, double elvMask, double *azel) { double llh[3],neu[3]; double pos[3],vel[3],clk[3],los[3]; double tmat[3][3]; if (eph.vflg != 1) return (-1); // Invalid xyz2llh(xyz,llh); ltcmat(llh, tmat); satpos(eph, g, pos, vel, clk); subVect(los, pos, xyz); ecef2neu(los, tmat, neu); neu2azel(azel, neu); if (azel[1]*R2D gt; elvMask) return (1); // Visible // else return (0); // Invisible }
Я думаю, что могу изменить это, чтобы это было ПРАВДОЙ, если и только если спутник не скрыт в двух нижеприведенных случаях (сверху и сбоку).: