Обзор симуляции GNSS

Симуляция Глобальной навигационной спутниковой системы (GNSS) генерирует оценки положения приемника. Эти оценки положения приемника получены из моделей GPS и GNSS как gpsSensor и gnssSensor объекты. Отслеживайте состояние оценки положения в gnssSensor использование разбавления выходных выходов точности и сравнение количества доступных спутников.

Параметры симуляции

Укажите параметры, которые будут использоваться в симуляции GNSS:

  • Частота дискретизации приемника

  • Локальная навигационная опорная система координат

  • Расположение на Земле в координатах широты, долготы и высоты (LLA)

  • Количество выборок для моделирования

Fs = 1;
refFrame = "NED";
lla0 = [42.2825 -71.343 53.0352];
N = 100;

Создайте траекторию для стационарного датчика.

pos = zeros(N, 3);
vel = zeros(N, 3);
time = (0:N-1) ./ Fs;

Создание модели датчика

Создайте объекты симуляции GNSS, gpsSensor и gnssSensor использование одинаковых начальных параметров для каждого.

gps = gpsSensor("SampleRate", Fs, "ReferenceLocation", lla0, ...
    "ReferenceFrame", refFrame);

gnss = gnssSensor("SampleRate", Fs, "ReferenceLocation", lla0, ...
    "ReferenceFrame", refFrame);

Симуляция с использованием gpsSensor

Сгенерируйте выходы от стационарного приемника с помощью GPS-датчика. Визуализируйте положение в координатах LLA и скорость в каждом направлении.

% Generate outputs.
[llaGPS, velGPS] = gps(pos, vel);

% Visualize positon.
figure
subplot(3, 1, 1)
plot(time, llaGPS(:,1))
title('Latitude')
ylabel('degrees')
xlabel('s')
subplot(3, 1, 2)
plot(time, llaGPS(:,2))
title('Longitude')
ylabel('degrees')
xlabel('s')
subplot(3, 1, 3)
plot(time, llaGPS(:,3))
title('Altitude')
ylabel('m')
xlabel('s')

Figure contains 3 axes. Axes 1 with title Latitude contains an object of type line. Axes 2 with title Longitude contains an object of type line. Axes 3 with title Altitude contains an object of type line.

% Visualize velocity.
figure
plot(time, velGPS)
title('Velocity')
legend('X', 'Y', 'Z')
ylabel('m/s')
xlabel('s')

Figure contains an axes. The axes with title Velocity contains 3 objects of type line. These objects represent X, Y, Z.

Симуляция с использованием gnssSensor

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

% Generate outputs.
[llaGNSS, velGNSS] = gnss(pos, vel);

% Visualize positon.
figure
subplot(3, 1, 1)
plot(time, llaGNSS(:,1))
title('Latitude')
ylabel('degrees')
xlabel('s')
subplot(3, 1, 2)
plot(time, llaGNSS(:,2))
title('Longitude')
ylabel('degrees')
xlabel('s')
subplot(3, 1, 3)
plot(time, llaGNSS(:,3))
title('Altitude')
ylabel('m')
xlabel('s')

Figure contains 3 axes. Axes 1 with title Latitude contains an object of type line. Axes 2 with title Longitude contains an object of type line. Axes 3 with title Altitude contains an object of type line.

% Visualize velocity.
figure
plot(time, velGNSS)
title('Velocity')
legend('X', 'Y', 'Z')
ylabel('m/s')
xlabel('s')

Figure contains an axes. The axes with title Velocity contains 3 objects of type line. These objects represent X, Y, Z.

Разбавление точности

The gnssSensor объект имеет более высокую точность симуляции по сравнению с gpsSensor. Для примера, gnssSensor объект использует имитированные спутниковые положения, чтобы оценить положение приемника. Это означает, что горизонтальное разведение точности (HDOP) и вертикальное разведение точности (VDOP) могут быть сообщены вместе с оценкой положения. Эти значения показывают, насколько точно оценка положения основана на геометрии спутника. Меньшие значения указывают на более точную оценку.

% Set the RNG seed to reproduce results. 
rng('default')

% Specify the start time of the simulation.
initTime = datetime(2020, 4, 20, 18, 10, 0, "TimeZone", "America/New_York");

% Create the GNSS receiver model.
gnss = gnssSensor("SampleRate", Fs, "ReferenceLocation", lla0, ...
    "ReferenceFrame", refFrame, "InitialTime", initTime);

% Obtain the receiver status. 
[~, ~, status] = gnss(pos, vel);
disp(status(1))
      SatelliteAzimuth: [7x1 double]
    SatelliteElevation: [7x1 double]
                  HDOP: 1.1290
                  VDOP: 1.9035

Просмотрите HDOP на протяжении всей симуляции. Происходит уменьшение HDOP. Это означает, что геометрия спутника изменилась.

hdops = vertcat(status.HDOP);

figure
plot(time, vertcat(status.HDOP))
title('HDOP')
ylabel('m')
xlabel('s')

Figure contains an axes. The axes with title HDOP contains an object of type line.

Проверьте, что геометрия спутника изменилась. Найдите индекс, где HDOP уменьшился, и посмотрите, соответствует ли это изменению в количестве рассматриваемых спутников. The numSats переменная увеличивается с 7 до 8.

% Find expected sample index for a change in the
% number of satellites in view.
[~, satChangeIdx] = max(abs(diff(hdops)));

% Visualize the satellite geometry before the
% change in HDOP.
satAz = status(satChangeIdx).SatelliteAzimuth;
satEl = status(satChangeIdx).SatelliteElevation;
numSats = numel(satAz);
skyplot(satAz, satEl);
title(sprintf('Satellites in View: %d\nHDOP: %.4f', ...
    numSats, hdops(satChangeIdx)))

Figure contains an object of type skyplot.

% Visualize the satellite geometry after the
% change in HDOP.
satAz = status(satChangeIdx+1).SatelliteAzimuth;
satEl = status(satChangeIdx+1).SatelliteElevation;
numSats = numel(satAz);
skyplot(satAz, satEl);
title(sprintf('Satellites in View: %d\nHDOP: %.4f', ...
    numSats, hdops(satChangeIdx+1)))

Figure contains an object of type skyplot.

Значения HDOP и VDOP могут использоваться в качестве диагональных элементов в ковариационных матрицах измерения при объединении оценок положения приемника GNSS с другими измерениями датчика с использованием фильтра Калмана.

% Convert HDOP and VDOP to a measurement covariance matrix.
hdop = status(1).HDOP;
vdop = status(1).VDOP;
measCov = diag([hdop.^2/2, hdop.^2/2, vdop.^2]);
disp(measCov)
    0.6373         0         0
         0    0.6373         0
         0         0    3.6233