Имитационная модель GPS-приемника
gpsSensor
Система object™ вывод данных моделей от приемника Системы глобального позиционирования (GPS).
Смоделировать GPS-приемник:
Создайте gpsSensor
объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?.
возвращает GPS
= gpsSensorgpsSensor
Системный объект, который вычисляет приемник Системы глобального позиционирования, читающий на основе локального входного сигнала положения и скорости. Ссылочное положение по умолчанию в геодезических координатах
широта: 0o N
долгота: 0o E
высота: 0 м
GPS = gpsSensor(
возвращает 'ReferenceFrame'
,RF
)gpsSensor
Системный объект, который вычисляет приемник системы глобального позиционирования, читающий относительно системы координат RF
. Задайте RF
как 'NED'
(Северо-восток вниз) или 'ENU'
(Восточный Север). Значением по умолчанию является 'NED'
.
GPS = gpsSensor(___,
наборы каждое свойство Name,Value
)Name
к заданному Value
. Незаданные свойства имеют значения по умолчанию.
Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release
функция разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.
SampleRate
— Частота обновления приемника (Гц)
(значение по умолчанию) | положительный действительный скалярЧастота обновления приемника в Гц в виде положительного действительного скаляра.
Типы данных: single
| double
ReferenceLocation
— Источник локальной системы координат навигации
(значение по умолчанию) | [метры степеней степеней]Ссылочное местоположение в виде вектора-строки с 3 элементами в геодезических координатах (широта, долгота и высота). Высота является высотой выше ссылочной модели эллипсоида, WGS84. Ссылочное местоположение находится в [метры степеней степеней]. Формат степени является десятичными градусами (DD).
Типы данных: single
| double
HorizontalPositionAccuracy
— Горизонтальная точность положения (m)
(значение по умолчанию) | неотрицательный действительный скалярГоризонтальная точность положения в метрах в виде неотрицательного действительного скаляра. Горизонтальная точность положения задает стандартное отклонение шума в горизонтальном измерении положения.
Настраиваемый: да
Типы данных: single
| double
VerticalPositionAccuracy
— Точность вертикального положения (m)
(значение по умолчанию) | неотрицательный действительный скалярТочность вертикального положения в метрах в виде неотрицательного действительного скаляра. Точность вертикального положения задает стандартное отклонение шума в измерении вертикального положения.
Настраиваемый: да
Типы данных: single
| double
VelocityAccuracy
— Скоростная точность (m/s)
(значение по умолчанию) | неотрицательный действительный скалярСкоростная точность в метрах в секунду в виде неотрицательного действительного скаляра. Скоростная точность задает стандартное отклонение шума в скоростном измерении.
Настраиваемый: да
Типы данных: single
| double
DecayFactor
— Глобальный шум положения затухает фактор
(значение по умолчанию) | скаляр в области значений [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
— Начальный seed
(значение по умолчанию) | неотрицательный целочисленный скалярНачальный seed mt19937ar алгоритма генератора случайных чисел в виде неотрицательного целочисленного скаляра.
Чтобы включить это свойство, установите RandomStream
к 'mt19937ar with seed'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
[
вычисляет показания приемника глобальной навигационной спутниковой системы из входных параметров положения и скорости.position
,velocity
,groundspeed
,course
] = GPS(truePosition
,trueVelocity
)
truePosition
— Положение GPS-приемника в локальной системе координат навигации (m)Положение GPS-приемника в локальной системе координат навигации в метрах в виде действительного конечного N-by-3 матрица.
N является количеством выборок в текущей системе координат.
Типы данных: single
| double
trueVelocity
— Скорость GPS-приемника в локальной системе координат навигации (m/s)Скорость GPS-приемника в локальной системе координат навигации в метрах в секунду в виде действительного конечного N-by-3 матрица.
N является количеством выборок в текущей системе координат.
Типы данных: single
| double
position
— Положение в системе координат LLAПоложение GPS-приемника в геодезической широте, долготе, и высоте (LLA) система координат, возвратилось как действительный конечный N-by-3 массив. Широта и долгота в градусах с Севером и Востоком, являющимся положительным. Высота исчисляется в метрах.
N является количеством выборок в текущей системе координат.
Типы данных: single
| double
velocity
— Скорость в локальной системе координат навигации (m/s)Скорость GPS-приемника в локальной системе координат навигации в метрах в секунду, возвращенный как действительный конечный N-by-3 массив.
N является количеством выборок в текущей системе координат.
Типы данных: single
| double
groundspeed
— Величина горизонтальной скорости в локальной системе координат навигации (m/s)Величина горизонтальной скорости GPS-приемника в локальной системе координат навигации в метрах в секунду, возвращенный как действительный конечный N-by-1 вектор-столбец.
N является количеством выборок в текущей системе координат.
Типы данных: single
| double
course
— Направление горизонтальной скорости в локальной системе координат навигации (°)Направление горизонтальной скорости GPS-приемника в локальной системе координат навигации в градусах, возвращенный как действительный конечный 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('SampleRate',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
свойство:
Сбросьте 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('Altitude (m)') xlabel('Time (s)')
GPS-приемники достигают большей точности курса как groundspeed увеличения. В этом примере вы создаете объект симуляции GPS-приемника и симулируете данные, полученные от платформы, которая ускоряется от стационарного положения.
Создайте gpsSensor
по умолчанию Система object™ к данным модели, возвращенным GPS-приемником.
GPS = gpsSensor
GPS = gpsSensor with properties: SampleRate: 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.SampleRate; 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.SampleRate; 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, ... 'SampleRate',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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.