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

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

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

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

  • Частота дискретизации приемника 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 objects. Axes object 1 with title Latitude contains an object of type line. Axes object 2 with title Longitude contains an object of type line. Axes object 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 object. The axes object 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 objects. Axes object 1 with title Latitude contains an object of type line. Axes object 2 with title Longitude contains an object of type line. Axes object 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 object. The axes object with title Velocity contains 3 objects of type line. These objects represent X, Y, Z.

Растворение точности

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 object. The axes object with title HDOP contains an object of type line.

Проверьте, что спутниковая геометрия изменилась. Найдите индекс, где уменьшенные HDOP и видят, соответствует ли это изменению в количестве спутников в поле зрения. 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