Моделирование Глобальной навигационной спутниковой системы (ГНСС) позволяет получать оценки положения приемника. Эти оценки положения приемника получены из моделей GPS и GNSS-датчиков в виде gpsSensor и gnssSensor объекты. Контролировать статус оценки позиции в gnssSensor использование разбавления прецизионных выходных данных и сравнение количества имеющихся спутников.
Укажите параметры, которые будут использоваться при моделировании ГНСС:
Частота дискретизации приемника ГНСС
Локальная навигационная опорная система
Местоположение на Земле в координатах широты, долготы и высоты (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;
создание объектов моделирования ГНСС; 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); 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