gpsSensor

Имитационная модель GPS-приемника

Описание

Система gpsSensor object™ вывод данных моделей от получателя Системы глобального позиционирования (GPS).

Смоделировать GPS-приемник:

  1. Создайте объект gpsSensor и установите его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

GPS = gpsSensor
GPS = gpsSensor(Name,Value)

Описание

GPS = gpsSensor возвращает Системный объект, GPS, который вычисляет получатель Системы глобального позиционирования, читающий на основе локального входного сигнала положения и скорости. Ссылочное положение по умолчанию в геодезических координатах

  • широта: 0o N

  • долгота: 0o E

  • высота: 0 м

пример

GPS = gpsSensor(Name,Value) наборы каждое свойство Name к заданному Value. Незаданные свойства имеют значения по умолчанию.

Свойства

развернуть все

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и функция release разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Частота обновления получателя в Гц, заданном как положительный действительный скаляр.

Типы данных: single | double

Ссылочное местоположение, заданное как вектор - строка с 3 элементами в геодезических координатах (широта, долгота и высота). Высота является высотой выше ссылочной модели эллипсоида, WGS84. Ссылочное местоположение находится в [метры степеней степеней]. Формат степени является десятичными градусами (DD).

Типы данных: single | double

Горизонтальная точность положения в метрах, заданных как неотрицательный действительный скаляр. Горизонтальная точность положения задает стандартное отклонение шума в горизонтальном измерении положения.

Настраиваемый: да

Типы данных: single | double

Точность вертикального положения в метрах, заданных как неотрицательный действительный скаляр. Точность вертикального положения задает стандартное отклонение шума в измерении вертикального положения.

Настраиваемый: да

Типы данных: single | double

Скоростная точность в метрах в секунду, заданный как неотрицательный действительный скаляр. Скоростная точность задает стандартное отклонение шума в скоростном измерении.

Настраиваемый: да

Типы данных: single | double

Глобальный шум положения затухает фактор, заданный как скаляр в области значений [0,1].

Фактор затухания 0 моделирует глобальный шум положения как белый шумовой процесс. Фактор затухания 1 моделирует глобальный шум положения как случайный процесс обхода.

Настраиваемый: да

Типы данных: single | double

Источник случайных чисел, заданный как вектор символов или строка:

  • 'Global stream' – Случайные числа сгенерированы с помощью текущего глобального потока случайных чисел.

  • 'mt19937ar with seed' – Случайные числа сгенерированы с помощью mt19937ar алгоритма с seed, заданным свойством Seed.

Типы данных: char | string

Начальный seed mt19937ar алгоритма генератора случайных чисел, заданного как неотрицательный целочисленный скаляр.

Зависимости

Чтобы включить это свойство, установите RandomStream на 'mt19937ar with seed'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Использование

Синтаксис

[position,velocity,groundspeed,course] = GPS(truePosition,trueVelocity)

Описание

пример

[position,velocity,groundspeed,course] = GPS(truePosition,trueVelocity) вычисляет показания получателя глобальной навигационной спутниковой системы из входных параметров положения и скорости.

Входные параметры

развернуть все

Положение GPS-приемника в локальной системе координат NED в метрах, заданных как действительный конечный N-by-3 матрица.

N является количеством выборок в текущем кадре.

Типы данных: single | double

Скорость GPS-приемника в локальной системе координат NED в метрах в секунду, заданный как действительный конечный N-by-3 матрица.

N является количеством выборок в текущем кадре.

Типы данных: single | double

Выходные аргументы

развернуть все

Положение GPS-приемника в геодезической широте, долготе, и высоте (LLA) система координат, возвратилось как действительный конечный N-by-3 массив. Широта и долгота в градусах с Севером и Востоком, являющимся положительным. Высота исчисляется в метрах.

N является количеством выборок в текущем кадре.

Типы данных: single | double

Скорость GPS-приемника в локальной системе координат NED в метрах в секунду, возвращенный как действительный конечный N-by-3 массив.

N является количеством выборок в текущем кадре.

Типы данных: single | double

Значение горизонтальной скорости GPS-приемника в локальной системе координат NED в метрах в секунду, возвращенный как действительный конечный N-by-1 вектор-столбец.

N является количеством выборок в текущем кадре.

Типы данных: single | double

Направление горизонтальной скорости GPS-приемника в локальной системе координат NED в градусах, возвращенный как действительный конечный N-by-1 столбец значений между 0 и 360. Север соответствует 360 градусам, и Восток соответствует 90 градусам.

N является количеством выборок в текущем кадре.

Типы данных: single | double

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

развернуть все

Создайте Систему gpsSensor object™, чтобы смоделировать данные о GPS-приемнике. Примите типичную частоту дискретизации на один Гц и 1000-секундное время симуляции. Задайте ссылочное местоположение с точки зрения широты, долготы и высоты (LLA) Натика, MA (США). Задайте датчик как стационарный путем определения истинного положения и скорости с нулями.

fs = 1;
duration = 1000;
numSamples = duration*fs;

refLoc = [42.2825 -71.343 53.0352];

truePosition = zeros(numSamples,3);
trueVelocity = zeros(numSamples,3);

gps = gpsSensor('UpdateRate',fs,'ReferenceLocation',refLoc);

Вызовите gps с заданным truePosition и trueVelocity, чтобы моделировать данные о GPS получения для стационарной платформы.

position = gps(truePosition,trueVelocity);

Постройте истинное положение и показания датчика GPS для положения.

t = (0:(numSamples-1))/fs;

subplot(3, 1, 1)
plot(t, position(:,1), ...
     t, ones(numSamples)*refLoc(1))
title('GPS Sensor Readings')
ylabel('Latitude (degrees)')

subplot(3, 1, 2)
plot(t, position(:,2), ...
     t, ones(numSamples)*refLoc(2))
ylabel('Longitude (degrees)')

subplot(3, 1, 3)
plot(t, position(:,3), ...
     t, ones(numSamples)*refLoc(3))
ylabel('Altitute (m)')
xlabel('Time (s)')

Показаниям положения управляли шумом HorizontalPositionAccuracy, VerticalPositionAccuracy, VelocityAccuracy и DecayFactor. Свойство DecayFactor управляет дрейфом в шумовой модели. По умолчанию DecayFactor установлен в 0.999, который приближается к случайному процессу обхода. Наблюдать эффект свойства DecayFactor:

  1. Сбросьте объект gps.

  2. Установите DecayFactor на 0.5.

  3. Вызовите gps с переменными, задающими стационарное положение.

  4. Постройте график результатов.

Показания положения GPS теперь колеблются вокруг истинного положения.

reset(gps)
gps.DecayFactor = 0.5;
position = gps(truePosition,trueVelocity);

subplot(3, 1, 1)
plot(t, position(:,1), ...
     t, ones(numSamples)*refLoc(1))
title('GPS Sensor Readings - Decay Factor = 0.5')
ylabel('Latitude (degrees)')

subplot(3, 1, 2)
plot(t, position(:,2), ...
     t, ones(numSamples)*refLoc(2))
ylabel('Longitude (degrees)')

subplot(3, 1, 3)
plot(t, position(:,3), ...
     t, ones(numSamples)*refLoc(3))
ylabel('Altitute (m)')
xlabel('Time (s)')

GPS-приемники достигают большей точности курса как groundspeed увеличения. В этом примере вы создаете объект симуляции GPS-приемника и моделируете данные, полученные от платформы, которая ускоряется от стационарного положения.

Создайте Систему gpsSensor по умолчанию object™ к данным модели, возвращенным GPS-приемником.

GPS = gpsSensor
GPS = 

  gpsSensor with properties:

                    UpdateRate: 1                  Hz         
             ReferenceLocation: [0 0 0]            [deg deg m]
    HorizontalPositionAccuracy: 1.6                m          
      VerticalPositionAccuracy: 3                  m          
              VelocityAccuracy: 0.1                m/s        
                  RandomStream: 'Global stream'               
                   DecayFactor: 0.999                         

Создайте матрицы, чтобы описать положение и скорость платформы в системе координат NED. Платформа начинается со стационарного положения и ускоряется к в 60 м/с к северо-востоку более чем 60 секундам, затем имеет вертикальное ускорение к 2 м/с более чем 2 секунды, сопровождаемые уровнем на 2 м/с подъема в течение еще 8 секунд. Примите постоянную скорость, такую, что скорость является простой производной положения.

duration = 70;
numSamples = duration*GPS.UpdateRate;

course = 45*ones(duration,1);
groundspeed = [(1:60)';60*ones(10,1)];

Nvelocity   = groundspeed.*sind(course);
Evelocity   = groundspeed.*cosd(course);
Dvelocity   = [zeros(60,1);-1;-2*ones(9,1)];
NEDvelocity = [Nvelocity,Evelocity,Dvelocity];

Ndistance   = cumsum(Nvelocity);
Edistance   = cumsum(Evelocity);
Ddistance   = cumsum(Dvelocity);
NEDposition = [Ndistance,Edistance,Ddistance];

Образцовые данные об измерении GPS путем вызова объекта GPS с матрицами скорости и положения.

[~,~,groundspeedMeasurement,courseMeasurement] = GPS(NEDposition,NEDvelocity);

Постройте groundspeed и различие между истинным курсом и курсом, возвращенным средством моделирования GPS.

Как groundspeed увеличения, точность увеличений курса. Обратите внимание на то, что скоростное увеличение в течение прошлых десяти секунд не имеет никакого эффекта, потому что дополнительная скорость не находится в наземной плоскости.

t = (0:numSamples-1)/GPS.UpdateRate;

subplot(2,1,1)
plot(t,groundspeed);
ylabel('Speed (m/s)')
title('Relationship Between Groundspeed and Course Accuracy')

subplot(2,1,2)
courseAccuracy = courseMeasurement - course;
plot(t,courseAccuracy)
xlabel('Time (s)');
ylabel('Course Accuracy (degrees)')

Моделируйте данные о GPS, полученные во время траектории из города Натика, MA, в Бостон, MA.

Задайте широту десятичного градуса и долготу для города Натика, MA USA, и Бостона, MA USA. Для простоты, набор высота для обоих мест, чтобы обнулить.

NatickLLA = [42.27752809999999, -71.34680909999997, 0];
BostonLLA = [42.3600825, -71.05888010000001, 0];

Задайте движение, которое может взять платформу от Натика до Бостона через 20 минут. Установите источник локальной системы координат NED как Натик. Создайте объект waypointTrajectory вывести траекторию 10 выборок за один раз.

fs = 1;
duration = 60*20;

bearing = 68; % degrees
distance = 25.39e3; % meters
distanceEast = distance*sind(bearing);
distanceNorth = distance*cosd(bearing);

NatickNED = [0,0,0];
BostonNED = [distanceNorth,distanceEast,0];

trajectory = waypointTrajectory( ...
    'Waypoints', [NatickNED;BostonNED], ...
    'TimeOfArrival',[0;duration], ...
    'SamplesPerFrame',10, ...
    'SampleRate',fs);

Создайте объект gpsSensor к модели, получающей данные о GPS для платформы. Установите HorizontalPositionalAccuracy на 25 и DecayFactor к 0.25 подчеркивать шум. Установите ReferenceLocation на координаты Натика в LLA.

GPS = gpsSensor( ...
    'HorizontalPositionAccuracy',25, ...
    'DecayFactor',0.25, ...
    'UpdateRate',fs, ...
    'ReferenceLocation',NatickLLA);

Откройте фигуру и постройте положение Натика и Бостона в LLA. Проигнорируйте высоту для простоты.

В цикле вызовите объект gpsSensor с траекторией наземной истины, чтобы моделировать полученные данные о GPS. Постройте траекторию наземной истины и модель полученных данных о GPS.

figure(1)
plot(NatickLLA(1),NatickLLA(2),'ko', ...
     BostonLLA(1),BostonLLA(2),'kx')
xlabel('Latitude (degrees)')
ylabel('Longitude (degrees)')
title('GPS Sensor Data for Natick to Boston Trajectory')
hold on

while ~isDone(trajectory)
    [truePositionNED,~,trueVelocityNED] = trajectory();
    reportedPositionLLA = GPS(truePositionNED,trueVelocityNED);

    figure(1)
    plot(reportedPositionLLA(:,1),reportedPositionLLA(:,2),'r.')
end

Как лучшая практика, выпустите Системные объекты, когда завершенный.

release(GPS)
release(trajectory)

Расширенные возможности

Смотрите также

Системные объекты

Введенный в R2018b