gpsSensor

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

Описание

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

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

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

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

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

Создание

Описание

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

  • широта: 0o N

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

  • высота: 0 м

GPS = gpsSensor('ReferenceFrame',RF) возвращает gpsSensorСистемный объект, который вычисляет получатель системы глобального позиционирования, читающий относительно системы координат RF. Задайте RF как 'NED' (Северо-восток вниз) или 'ENU'(Восточный Север). Значением по умолчанию является 'NED'.

пример

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Направление горизонтальной скорости GPS-приемника в локальной системе координат навигации в градусах, возвращенный как действительный конечный 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('Altitude (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('Altitude (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