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

Симуляция Глобальной навигационной спутниковой системы (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')

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

Симуляция с помощью 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')

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

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

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')

Проверьте, что спутниковая геометрия изменилась. Найдите индекс, где уменьшенные 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);
exampleHelper_skyplot(satAz, satEl);
title(sprintf('Satellites in View: %d\nHDOP: %.4f', ...
    numSats, hdops(satChangeIdx)))

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

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
Для просмотра документации необходимо авторизоваться на сайте