Имитационная модель GPS-приемника
Система gpsSensor
object™ вывод данных моделей от получателя Системы глобального позиционирования (GPS).
Смоделировать GPS-приемник:
Создайте объект gpsSensor
и установите его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.
GPS = gpsSensor
GPS = gpsSensor(Name,Value)
возвращает Системный объект, GPS
= gpsSensorGPS
, который вычисляет получатель Системы глобального позиционирования, читающий на основе локального входного сигнала положения и скорости. Ссылочное положение по умолчанию в геодезических координатах
широта: 0o N
долгота: 0o E
высота: 0 м
GPS = gpsSensor(
наборы каждое свойство Name,Value
)Name
к заданному Value
. Незаданные свойства имеют значения по умолчанию.
Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и функция release
разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).
UpdateRate
— Частота обновления получателя (Гц)1
(значение по умолчанию) | положительный действительный скалярЧастота обновления получателя в Гц, заданном как положительный действительный скаляр.
Типы данных: single | double
ReferenceLocation
— Источник локального ссылочного кадра NED[0 0 0]
(значение по умолчанию) | [метры степеней степеней]Ссылочное местоположение, заданное как вектор - строка с 3 элементами в геодезических координатах (широта, долгота и высота). Высота является высотой выше ссылочной модели эллипсоида, WGS84. Ссылочное местоположение находится в [метры степеней степеней]. Формат степени является десятичными градусами (DD).
Типы данных: single | double
HorizontalPositionAccuracy
— Горизонтальная точность положения (m)1.6
(значение по умолчанию) | неотрицательный действительный скалярГоризонтальная точность положения в метрах, заданных как неотрицательный действительный скаляр. Горизонтальная точность положения задает стандартное отклонение шума в горизонтальном измерении положения.
Настраиваемый: да
Типы данных: single | double
VerticalPositionAccuracy
— Точность вертикального положения (m)3
(значение по умолчанию) | неотрицательный действительный скалярТочность вертикального положения в метрах, заданных как неотрицательный действительный скаляр. Точность вертикального положения задает стандартное отклонение шума в измерении вертикального положения.
Настраиваемый: да
Типы данных: single | double
VelocityAccuracy
— Скоростная точность (m/s)0.1
(значение по умолчанию) | неотрицательный действительный скалярСкоростная точность в метрах в секунду, заданный как неотрицательный действительный скаляр. Скоростная точность задает стандартное отклонение шума в скоростном измерении.
Настраиваемый: да
Типы данных: single | double
DecayFactor
— Глобальный шум положения затухает фактор0.999
(значение по умолчанию) | скаляр в области значений [0,1]Глобальный шум положения затухает фактор, заданный как скаляр в области значений [0,1].
Фактор затухания 0 моделирует глобальный шум положения как белый шумовой процесс. Фактор затухания 1 моделирует глобальный шум положения как случайный процесс обхода.
Настраиваемый: да
Типы данных: single | double
RandomStream
— Источник случайных чисел'Global stream'
(значение по умолчанию) | 'mt19937ar with seed'
Источник случайных чисел, заданный как вектор символов или строка:
'Global stream'
– Случайные числа сгенерированы с помощью текущего глобального потока случайных чисел.
'mt19937ar with seed'
– Случайные числа сгенерированы с помощью mt19937ar алгоритма с seed, заданным свойством Seed
.
Типы данных: char | string
Seed
— Начальный seed67
(значение по умолчанию) | неотрицательный целочисленный скалярНачальный 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
)
truePosition
— Положение GPS-приемника в локальной системе координат NED (m)Положение GPS-приемника в локальной системе координат NED в метрах, заданных как действительный конечный N-by-3 матрица.
N является количеством выборок в текущем кадре.
Типы данных: single | double
trueVelocity
— Скорость GPS-приемника в локальной системе координат NED (m/s)Скорость GPS-приемника в локальной системе координат NED в метрах в секунду, заданный как действительный конечный N-by-3 матрица.
N является количеством выборок в текущем кадре.
Типы данных: single | double
position
— Положение в системе координат LLAПоложение GPS-приемника в геодезической широте, долготе, и высоте (LLA) система координат, возвратилось как действительный конечный N-by-3 массив. Широта и долгота в градусах с Севером и Востоком, являющимся положительным. Высота исчисляется в метрах.
N является количеством выборок в текущем кадре.
Типы данных: single | double
velocity
— Скорость в локальной системе координат NED (m/s)Скорость GPS-приемника в локальной системе координат NED в метрах в секунду, возвращенный как действительный конечный N-by-3 массив.
N является количеством выборок в текущем кадре.
Типы данных: single | double
groundspeed
— Значение горизонтальной скорости в локальной системе координат NED (m/s)Значение горизонтальной скорости GPS-приемника в локальной системе координат NED в метрах в секунду, возвращенный как действительный конечный N-by-1 вектор-столбец.
N является количеством выборок в текущем кадре.
Типы данных: single | double
course
— Направление горизонтальной скорости в локальной системе координат NED (°)Направление горизонтальной скорости GPS-приемника в локальной системе координат NED в градусах, возвращенный как действительный конечный N-by-1 столбец значений между 0 и 360. Север соответствует 360 градусам, и Восток соответствует 90 градусам.
N является количеством выборок в текущем кадре.
Типы данных: single | double
Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj
, используйте этот синтаксис:
release(obj)
Создайте Систему 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
:
Сбросьте объект gps
.
Установите DecayFactor
на 0.5
.
Вызовите gps
с переменными, задающими стационарное положение.
Постройте график результатов.
Показания положения 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)
Указания и ограничения по применению:
Смотрите системные объекты в Генерации кода MATLAB (MATLAB Coder).
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.