Анализируйте видимость спутника GPS

В этом примере показано, как симулировать и анализировать видимость спутника GPS в заданных положениях приемника и времена. Используйте средства управления live скриптом, чтобы установить различные параметры для спутниковой симуляции.

Задайте параметры симуляции

Задайте время начала, длительность в часах и времени между выборками в секундах симуляции. Также задайте положение приемника в геодезических координатах и углу маски или минимальном угле возвышения, приемника.

dateString = "2021-04-08 00:00:00.000";
startTime = datetime (dateString, InputFormat ="yyyy-MM-dd HH:mm:ss.SSS");
numHours = 24;
dt =60; % s
широта =42.3013162; % deg
долгота = -71.3782972; % deg
высота = 50; % m
recPos = [высота долготы широты]; % [deg deg m]
maskAngle = 5; % deg

Сгенерируйте спутниковую видимость

Используя параметры, сгенерируйте спутниковую видимость как матрицу логических значений. Каждая строка в матрице соответствует временному шагу, и каждый столбец соответствует спутнику. Чтобы построить видимость, выполните итерации через временной вектор, вычисляющий спутниковые положения и углы взгляда на основе симуляции созвездия GNSS.

secondsPerHour = 3600;
timeElapsed = 0:dt:(secondsPerHour*numHours);
t = startTime + seconds(timeElapsed);

satPos = gnssconstellation(t(1));
numSats = size(satPos,1);
numSamples = numel(t);
az = zeros(numSamples,numSats);
el = zeros(numSamples,numSats);
vis = false(numSamples,numSats);
satIDs = 1:numSats;

sp = skyplot([],[]);

for ii = 1:numel(t)
    satPos = gnssconstellation(t(ii));
    [az(ii,:),el(ii,:),vis(ii,:)] = lookangles(recPos,satPos,maskAngle);
    set(sp,AzimuthData=az(ii,vis(ii,:)), ...
        ElevationData=el(ii,vis(ii,:)), ...
        LabelData=satIDs(vis(ii,:)));
    drawnow limitrate
end

Постройте результаты

Используйте логическую матрицу, чтобы сгенерировать спутниковый график видимости и построить общее количество видимых спутников на каждом временном шаге. В общем случае по крайней мере четыре спутника должны отобразиться, чтобы вычислить решение для расположения.

visPlotData = double(vis);
visPlotData(visPlotData == false) = NaN; % Hide invisible satellites.
visPlotData = visPlotData + (0:numSats-1); % Add space to satellites to be stacked.
colors = colororder;

figure
plot(t,visPlotData," .",Color=colors(1,:))
yticks(1:numSats)
yticklabels(string(satIDs))
grid on
ylabel("Satellite ID")
xlabel("Time")
title("Satellite Visibility Chart")
axis tight

numVis = sum(vis,2);
figure
area(t,numVis)
grid on
xlabel("Time")
ylabel("Number of satellites visible")
title("Number of GPS satellites visible")
axis tight