Симуляция Глобальной навигационной спутниковой системы (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')
% 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')
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')
Проверьте, что геометрия спутника изменилась. Найдите индекс, где 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)))
% 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)))
Значения 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