В этом примере показано, как симулировать и анализировать видимость спутника 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