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