Анализ данных из стандартных предложений NMEA, отправленных от приемников GNSS
nmeaParser Система object™ анализирует данные из некоторых стандартных предложений NMEA (Национальная ассоциация морской электроники), которые посылаются из приемника GNSS (Глобальная навигационная спутниковая система). Предложения NMEA, требующие анализа, должны соответствовать стандарту NMEA 0183 ® версии 4.1.
Для анализа данных из предложений NMEA:
Создать nmeaParser и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
nmeaParser Системный объект выводит массив структур, соответствующих значениям, извлеченным из указанных предложений NMEA.
возвращает pnmea = nmeaParsernmeaParser Системный объект, pnmea, со свойствами по умолчанию, которые извлекают данные из этих сообщений NMEA: RMC, GGA и GSA. Порядок структурных массивов в извлеченных выходных данных также: RMC, GGA и GSA.
возвращает pnmea = nmeaParser('MessageIDs', msgID)nmeaParser Системный объект, pnmeaизвлекает данные из сообщений NMEA, указанных с помощью идентификаторов сообщений. Определить msgID как "RMC", "GGA", "GSA", "GSV", "VTG", "GLL", "GST", "ZDA", и "HDT"или сочетание этих идентификаторов (например: ["VTG","GLL","HDT"]). Порядок, в котором указываются идентификаторы сообщений, определяет порядок структурных массивов в извлеченных выходных данных. Значение по умолчанию: ["RMC","GGA","GSA"].
Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.
Если свойство настраивается, его значение можно изменить в любое время.
Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.
MessageIDs - идентификаторы сообщений предложений NMEA для извлечения данных;["RMC","GGA","GSA"] (по умолчанию) | RMC | GGA | GSA | GSV | VTG | GLL | GST | ZDA | HDTИдентификаторы сообщений предложений NMEA, соответствующие стандарту NMEA 0183, из которого требуется извлечь данные. Можно указать несколько идентификаторов сообщений как массив строк для извлечения данных из предложений NMEA.
Типы данных: char | string
[ анализирует данные и возвращает массив структур, где каждая структура соответствует одному идентификатору сообщения. Последовательность, указанная для выходных аргументов, должна совпадать с последовательностью, указанной для идентификаторов сообщений при создании rmcData,ggaData,gsaData,vtgData,gllData,gstData,gsvData,zdaData,hdtData] = pnmea(rawData)nmeaParser Системный объект.
rawData - данные NMEA, полученные от приемника GNSS;Данные NMEA, соответствующие стандарту NMEA 0183, полученные от приемника GNSS.
Типы данных: string | char
rmcData - Данные, извлеченные из предложения RMCДанные извлечены из предложения RMC. Структура вывода содержит информацию, проанализированную из предложения RMC вместе со статусом синтаксического анализа. Если во входных данных найдено несколько предложений RMC, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения RMC.
ggaData - Данные, извлеченные из предложения GGAДанные извлечены из предложения GGA. Структура вывода содержит информацию, проанализированную из предложения GGA вместе с состоянием синтаксического анализа. Если во входных данных найдено несколько предложений GGA, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения GGA.
gsaData - Данные, извлеченные из предложения GSAДанные, извлеченные из предложения GSA. Структура вывода содержит информацию, проанализированную из предложения GSA вместе со статусом синтаксического анализа. Если во входных данных найдено несколько предложений GSA, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения GSA.
vtgData - Данные, извлеченные из предложения VTGДанные, извлеченные из предложения VTG. Структура вывода содержит информацию, проанализированную из предложения VTG вместе со статусом синтаксического анализа. Если во входных данных найдено несколько предложений VTG, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения VTG.
gllData - Данные, извлеченные из предложения GLLДанные, извлеченные из предложения GLL. Структура вывода содержит информацию, проанализированную из предложения GLL вместе со статусом синтаксического анализа. Если во входных данных найдено несколько предложений GLL, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения GLL.
gstData - Данные, извлеченные из предложения GSTДанные, извлеченные из предложения GST. Структура вывода содержит информацию, проанализированную из предложения GST вместе с состоянием синтаксического анализа. Если во входных данных найдено несколько предложений GST, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения GST.
gsvData - Данные, извлеченные из предложения GSVДанные, извлеченные из предложения GSV. Структура вывода содержит информацию, проанализированную из предложения GSV вместе с состоянием синтаксического анализа. Полная спутниковая информация доступна в нескольких структурах gsvData. Каждая структура gsvData может содержать не более четырех спутниковых данных. Дополнительные сведения см. в разделе Предложения GSV.
zdaData - Данные, извлеченные из предложения ZDAДанные извлечены из предложения ZDA. Структура вывода содержит информацию, проанализированную из предложения ZDA вместе со статусом синтаксического анализа. Если во входных данных найдено несколько предложений ZDA, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения ZDA.
hdtData - Данные, извлеченные из предложения HDTДанные, извлеченные из предложения HDT. Структура вывода содержит информацию, проанализированную из предложения HDT вместе со статусом синтаксического анализа. Если во входных данных найдено несколько предложений HDT, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения HDT.
Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:
release(obj)
Извлеките данные из предложений NMEA, которые получены из приемника GNSS.
Извлечь данные из предложения RMC
Создайте системный объект nmaseParser, указав идентификатор сообщения как «RMC».
pnmea = nmeaParser("MessageID","RMC");
Предоставление предложения RMC, полученного от приемника GNSS, в качестве входных и извлекаемых данных.
unparsedRMCLine='$GNRMC,143909.00,A,5107.0020216,N,11402.3294835,W,0.036,348.3,210307,0.0,E,A*31';
rmcData = pnmea(unparsedRMCLine)rmcData = struct with fields:
TalkerID: "GN"
MessageID: "RMC"
FixStatus: 'A'
Latitude: 51.1167
Longitude: -114.0388
GroundSpeed: 0.0185
TrueCourseAngle: 348.3000
UTCDateTime: 21-Mar-2007 14:39:09.000
MagneticVariation: 0
ModeIndicator: 'A'
NavigationStatus: "NA"
Status: 0
Извлечение данных из нескольких типов сообщений NMEA
В качестве входных данных укажите предложения GGA, GSA и RMC.
unparsedGGALine = ['$GPGGA,111357.771,5231.364,N,01324.240,E,1,12,1.0,0.0,M,0.0,M,,*69']; unparsedGSALine = ['$GPGSA,A,3,01,02,03,04,05,06,07,08,09,10,11,12,1.0,1.0,1.0*30']; unparsedRMCLine = ['$GPRMC,111357.771,A,5231.364,N,01324.240,E,10903,221.5,020620,000.0,W*44'];
Создание массива строк для включения трех предложений
rawNMEAData = [unparsedGGALine ,newline, unparsedGSALine ,newline, unparsedRMCLine]
rawNMEAData =
'$GPGGA,111357.771,5231.364,N,01324.240,E,1,12,1.0,0.0,M,0.0,M,,*69
$GPGSA,A,3,01,02,03,04,05,06,07,08,09,10,11,12,1.0,1.0,1.0*30
$GPRMC,111357.771,A,5231.364,N,01324.240,E,10903,221.5,020620,000.0,W*44'
Однако учтите, что извлекать данные нужно только из предложений GGA и GSA. Создайте системный объект «» pnmea «» и укажите идентификаторы сообщений «» GGA «» и «» GSA «» как строковый массив.
pnmea=nmeaParser("MessageIDs",["GGA","GSA"]);
Укажите выходные аргументы для всех трех предложений для извлечения данных в виде структур.
[ggaData,gsaData] = pnmea(rawNMEAData)
ggaData = struct with fields:
TalkerID: "GP"
MessageID: "GGA"
UTCTime: 11:13:57.771
Latitude: 52.5227
Longitude: 13.4040
QualityIndicator: 1
NumSatellitesInUse: 12
HDOP: 1
Altitude: 0
GeoidSeparation: 0
AgeOfDifferentialData: NaN
DifferentialReferenceStationID: NaN
Status: 0
gsaData = struct with fields:
TalkerID: "GP"
MessageID: "GSA"
Mode: "A"
FixType: 3
SatellitesIDNumber: [1 2 3 4 5 6 7 8 9 10 11 12]
PDOP: 1
VDOP: 1
HDOP: 1
SystemID: NaN
Status: 0
Вышеприведенные выходные данные показывают, что только предложения GGA и GSA извлекаются на основе идентификаторов сообщений, указанных в качестве входных данных.
Предоставьте другое предложение GGA в качестве дополнительного ввода и извлеките данные. В этом случае изменять системный объект не требуется, так как идентификатор сообщения не изменился.
unparsedGGALine1='$GNGGA,001043.00,4404.14036,N,12118.85961,W,1,12,0.98,1113.0,M,-21.3,M,,*47'unparsedGGALine1 = '$GNGGA,001043.00,4404.14036,N,12118.85961,W,1,12,0.98,1113.0,M,-21.3,M,,*47'
rawNMEAData = [unparsedGGALine ,newline, unparsedGSALine ,newline, unparsedGGALine1]
rawNMEAData =
'$GPGGA,111357.771,5231.364,N,01324.240,E,1,12,1.0,0.0,M,0.0,M,,*69
$GPGSA,A,3,01,02,03,04,05,06,07,08,09,10,11,12,1.0,1.0,1.0*30
$GNGGA,001043.00,4404.14036,N,12118.85961,W,1,12,0.98,1113.0,M,-21.3,M,,*47'
[ggaData,gsaData] = pnmea(rawNMEAData)
ggaData=1×2 struct array with fields:
TalkerID
MessageID
UTCTime
Latitude
Longitude
QualityIndicator
NumSatellitesInUse
HDOP
Altitude
GeoidSeparation
AgeOfDifferentialData
DifferentialReferenceStationID
Status
gsaData = struct with fields:
TalkerID: "GP"
MessageID: "GSA"
Mode: "A"
FixType: 3
SatellitesIDNumber: [1 2 3 4 5 6 7 8 9 10 11 12]
PDOP: 1
VDOP: 1
HDOP: 1
SystemID: NaN
Status: 0
Состояние 0 указывает, что данные были успешно проанализированы.
Извлечь данные из предложения GSV
Создайте системный объект nmaseParser, указав идентификатор сообщения как «GSV».
pnmea = nmeaParser("MessageID","GSV");
Представить предложение ГСН, полученное от приемника ГНСС, в качестве входных и извлекаемых данных.
unparsedGSVLine='$GPGSV,3,3,10,32,69,205,41,46,47,215,39*79';
gsvData = pnmea(unparsedGSVLine)gsvData = struct with fields:
TalkerID: "GP"
MessageID: "GSV"
NumSentences: 3
SentenceNumber: 3
SatellitesInView: 10
SatelliteID: [32 46]
Elevation: [69 47]
Azimuth: [205 215]
SNR: [41 39]
SignalID: NaN
Status: 0
Извлечение данных из нескольких предложений GSV
В качестве входных данных укажите несколько предложений GSV.
unparsedGSVLine1 = '$GPGSV,3,1,10,01,,,31,03,28,325,40,10,,,33,12,20,047,30*70'; unparsedGSVLine2 = '$GPGSV,3,2,10,14,88,028,42,22,39,299,48,25,,,25,31,79,289,46*49'; unparsedGSVLine3 = '$GPGSV,3,3,10,32,69,205,41,46,47,215,39*79';
Создайте строковый массив для включения трех предложений.
CRLF = [char(13),newline]; unparsedGSVLines = [unparsedGSVLine1,CRLF, unparsedGSVLine2, CRLF, unparsedGSVLine3];
Создайте системный объект nmaseParser «» pnmea «», укажите идентификатор сообщения «» GSV «» и извлеките данные.
pnmea = nmeaParser("MessageIDs","GSV"); gsvData = pnmea(unparsedGSVLines)
gsvData=1×3 struct array with fields:
TalkerID
MessageID
NumSentences
SentenceNumber
SatellitesInView
SatelliteID
Elevation
Azimuth
SNR
SignalID
Status
Считывание данных из журнала NMEA
Считывайте данные из образца журнала NMEA, чтобы их можно было проанализировать с помощью системного объекта nmaseParser.
Пример файла журнала: nmeaLog.nmea, который включен в этот пример.
f = fopen('nmeaLog.nmea'); unParsedNMEAdata = fread(f); pnmea = nmeaParser("MessageIDs",["RMC","GGA"]); [rmcStruct, ggaStruct] = pnmea(unParsedNMEAdata)
rmcStruct=1×9 struct array with fields:
TalkerID
MessageID
FixStatus
Latitude
Longitude
GroundSpeed
TrueCourseAngle
UTCDateTime
MagneticVariation
ModeIndicator
NavigationStatus
Status
ggaStruct=1×9 struct array with fields:
TalkerID
MessageID
UTCTime
Latitude
Longitude
QualityIndicator
NumSatellitesInUse
HDOP
Altitude
GeoidSeparation
AgeOfDifferentialData
DifferentialReferenceStationID
Status
Поле статуса, отображаемое вместе с извлеченными значениями в каждой структуре вывода, может использоваться для определения статуса синтаксического анализа:
Status: 0 - Предложение действительно (проверка контрольной суммы успешна, а извлеченные данные соответствуют запрошенному идентификатору сообщения)
Status: 1 - Контрольная сумма предложения, подлежащего разбору, недействительна
Status: 2 - Запрошенное предложение не найдено во входных данных
Примечание
Если значение отсутствует во входном предложении, соответствующее выходное значение отображается как «NA» для строковых значений и «NaN» для числовых значений.
| Имя поля, отображаемого в структуре вывода после завершения синтаксического анализа | Описание |
|---|---|
| TalkerID | Определите тип устройства, передающего данные. Например, для приемника GPS TalterID является Тип данных: |
| MessageID | Тип сообщения NMEA - Тип данных: |
| FixStatus | Возможные значения:
Тип данных: |
| Широта | Широта в градусах. Север считается положительным. Тип данных: |
| Долгота | Долгота в градусах. Восток считается положительным. Тип данных: |
| GroundSpeed | Скорость по земле в метрах в секунду (м/с) Тип данных: |
| TrueCourseAngle | Курс над землей в градусах. Тип данных: |
| UTCDateTime | Дата и время UTC Тип данных: |
| MagneticVariation | Магнитное значение изменения. Направление W считается отрицательным Тип данных: |
| ModeIndicator | Возможные значения:
Тип данных: |
| NavigationStatus | Возможные значения:
Тип данных: |
| Имя поля, отображаемого в структуре вывода после завершения синтаксического анализа | Описание |
|---|---|
| TalkerID | Определите тип устройства, передающего данные. Например, для приемника GPS TalterID является Тип данных: |
| MessageID | Тип сообщения NMEA - Тип данных: |
| UTCTime | Время UTC ( Тип данных: |
| Широта | Широта в градусах. Север считается положительным. Тип данных: |
| Долгота | Долгота в градусах. Восток считается положительным. Тип данных: |
| QualityIndicator | Возможные значения:
Тип данных: |
| NumSatellitesInUse | Количество используемых спутников. Это может отличаться от количества спутников в поле зрения. Тип данных: |
| HDOP | Горизонтальное разбавление точности Тип данных: |
| Высота | Высота над средним уровнем моря в метрах Тип данных: |
| GeoidSeparation | Разница между эллипсоидом и средним уровнем моря в метрах Тип данных: |
| AgeOfDifferentialData | Возраст дифференциальных поправок Тип данных: |
| DifferentialReferenceStationID | Идентификатор станции, обеспечивающей дифференциальные поправки Тип данных: |
| Имя поля, отображаемого в структуре вывода после завершения синтаксического анализа | Описание |
|---|---|
| TalkerID | Определите тип устройства, передающего данные. Например, для приемника GPS TalterID является Тип данных: |
| MessageID | Тип сообщения NMEA - Тип данных: |
| Способ | Возможные значения:
Тип данных: |
| FixType | Возможные значения:
Тип данных: |
| SatellitesIDNumber | Номера спутников (массив из 12 байт). Пустые поля будут отображаться как Тип данных: |
| PDOP | Положение разбавления точности Тип данных: |
| VDOP | Вертикальное разбавление точности Тип данных: |
| HDOP | Горизонтальное разбавление точности Тип данных: |
| SystemID | Идентификатор системы ГНСС, определенный NMEA Тип данных: |
| Имя поля, отображаемого в структуре вывода после завершения синтаксического анализа | Описание |
|---|---|
| TalkerID | Определите тип устройства, передающего данные. Например, для приемника GPS TalterID является Тип данных: |
| MessageID | Тип сообщения NMEA - Тип данных: |
| NumSentences | Общее число предложений. Полная спутниковая информация доступна в нескольких предложениях GSV. В этом поле указывается общее количество Тип данных: |
| SentenceNumber | Номер предложения текущей анализируемой строки GSV Тип данных: |
| SatellitesInView | Общее число спутников в поле зрения Тип данных: |
| SatelliteID | Идентификационные номера спутников, определенные как вектор строк размера 1-by-N, где N - количество спутниковых данных, доступных в одном предложении. Максимально допустимое значение N равно 4. Тип данных: |
| Возвышение | Отметка в градусах, заданная как вектор строки размера 1-by-N, где N - количество спутниковой информации, доступной в одном предложении. Максимально допустимое значение N равно 4. Максимальное значение параметра «Отметка» - 90 градусов. Тип данных: |
| Азимут | Азимут в градусах, заданный как вектор строки размера 1-by-N, где N - количество спутниковой информации, доступной в одном предложении. Максимально допустимое значение N равно 4. Диапазон значений Азимута составляет [0-359] градусов. Тип данных: |
| SNR | Отношение сигнал/шум в дБ-Гц, определяемое как вектор строки размера 1-by-N, где N - количество спутниковой информации, доступной в одном предложении. Максимально допустимое значение N равно 4. Диапазон значений SNR составляет [0,99] дБ. Тип данных: |
| SignalID | Идентификатор сигнала, соответствующий идентификатору сигнала. Это значение отображается только в том случае, если предложения соответствуют стандарту NMEA 0183, версия 4.1. В противном случае отображается следующее значение: Тип данных: |
Возможные значения SignalID и соответствующего сигнального канала перечислены в этой таблице.
| Система | TalkerID, отображаемый в проанализированных данных | SatelliteID | SignalID | Сигнальный канал |
|---|---|---|---|---|
| GPS | GP |
| 0 | Все сигналы |
| 1 | L1 C/A | |||
| 2 | L1 P (Y) | |||
| 3 | L1 М | |||
| 4 | L2 P (Y) | |||
| 5 | L2C-M | |||
| 6 | L2C-L | |||
| 7 | L5-I | |||
| 8 | L5-Q | |||
| ГЛОНАСС | ГК |
| 0 | Все сигналы |
| 1 | G1 C/A | |||
| 2 | G1 Р | |||
| 3 | G2 C/A | |||
| 4 | ГЛОНАСС (М) G2 П | |||
| ГАЛИЛЕО | GA |
| 0 | Все сигналы |
| 1 | E5a | |||
| 2 | 5 миллиардов евро | |||
| 3 | E5a и E5b | |||
| 4 | E6-A | |||
| 5 | E6-BC | |||
| 6 | L1-A | |||
| 7 | L1-BC |
| Имя поля, отображаемого в структуре вывода после завершения синтаксического анализа | Описание |
|---|---|
| TalkerID | Определите тип устройства, передающего данные. Например, для приемника GPS TalterID является Тип данных: |
| MessageID | Тип сообщения NMEA - Тип данных: |
| UTCTime | Время UTC Тип данных: |
| UTCDay | День UTC Тип данных: |
| UTCMonth | Месяц UTC Тип данных: |
| UTCYear | Год UTC Тип данных: |
| LocalZoneHours | Часы локальной зоны в диапазоне от Тип данных: |
| LocalZoneMinutes | Локальные минуты зоны в диапазоне от Тип данных: |
| Имя поля, отображаемого в структуре вывода после завершения синтаксического анализа | Описание |
|---|---|
| TalkerID | Определите тип устройства, передающего данные. Например, для приемника GPS TalterID является Тип данных: |
| MessageID | Тип сообщения NMEA - Тип данных: |
| Широта | Широта в градусах. Север считается положительным. Тип данных: |
| Долгота | Долгота в градусах. Восток считается положительным. Тип данных: |
| UTCTime | Время UTC Тип данных: |
| DataValidity | Статус достоверности данных:
Тип данных: |
| PositioningMode | Возможные значения:
Тип данных: |
| Имя поля, отображаемого в структуре вывода после завершения синтаксического анализа | Описание |
|---|---|
| TalkerID | Определите тип устройства, передающего данные. Например, для приемника GPS TalterID является Тип данных: |
| MessageID | Тип сообщения NMEA - Тип данных: |
| TrueCourseAngle | Курс над землей (правда) в градусах Тип данных: |
| MagneticCourseAngle | Курс по земле (магнитный) в градусах Тип данных: |
| GroundSpeed | Скорость по земле в метрах в секунду (м/с) Тип данных: |
| ModeIndicator | Возможные значения:
Тип данных: |
| Имя поля, отображаемого в структуре вывода после завершения синтаксического анализа | Описание |
|---|---|
| TalkerID | Определите тип устройства, передающего данные. Например, для приемника GPS TalterID является Тип данных: |
| MessageID | Тип сообщения NMEA - Тип данных: |
| UTCTime | Время UTC Тип данных: |
| RMSStdDeviationOfRanges | Среднеквадратичное значение среднеквадратического отклонения диапазонов в метрах. Тип данных: |
| StdDeviationSemiMajorAxis | Стандартное отклонение большой полуоси в метрах Тип данных: |
| StdDeviationSemiMinorAxis | Стандартное отклонение малой полуоси в метрах Тип данных: |
| OrientationSemiMajorAxis | Ориентация большой полуоси, в градусах Тип данных: |
| StdDeviationLatitudeError | Стандартное отклонение широтной погрешности, в метрах Тип данных: |
| StdDeviationLongitudeError | Стандартное отклонение погрешности долготы в метрах Тип данных: |
| StdDeviationAltitudeError | Стандартное отклонение погрешности высоты в метрах Тип данных: |
| Имя поля, отображаемого в структуре вывода после завершения синтаксического анализа | Описание |
|---|---|
| TalkerID | Определите тип устройства, передающего данные. Например, для приемника GPS TalterID является Тип данных: |
| MessageID | Тип сообщения NMEA - Тип данных: |
| TrueHeadingAngle | Курс в градусах относительно истинного севера Тип данных: |
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.