Модель GPS: погрешности траектории
Моделирование шума датчика GPS
В этом примере показано, как использовать блок GPS для моделирования шума, который датчик ГНСС добавляет к входным сигналам положения и скорости.
Описание модели
Эта модель задает траекторию, генерируя значения по координатам X, Y, Z (как положение, так и скорость) в виде отдельных синусоидальных сигналов и объединяет их с помощью блоков Mux.
Поскольку блок ГНСС (GPS) требует дискретных сигналов, векторы положения и скорости проходят через блоки Rate Transition и только затем попадают на входы портов положение (Position) и скорость (Velocity) блока GPS. Все параметры блока GPS оставлены неизменными кроме параметра Vertical position accuracy (Погрешность положения по вертикали), которая установлена на 1.5 м чтобы соответствовать масштабу траектории.
Откроем эту модель:
cd(@__DIR__) # Переход в папку с примером
engee.open("simulate-gps-sensor-noise.engee");

В модели есть блок Engee Function, в котором реализован код для преобразования параметров истинного положения из топоцентрической системы координат в геодезическую.
Запустим модель:
data = engee.run("simulate-gps-sensor-noise");
И сравним выходные сигналы блока GPS с истинными значениями сигналов.
plot(
plot( data["Истин.Шир/Дол"].time,
[first.(data["Истин.Шир/Дол"].value) last.(data["Истин.Шир/Дол"].value) first.(data["ГНСС Шир/Дол"].value) last.(data["ГНСС Шир/Дол"].value)],
lw=2, titlefont=font(11), guidesfont=font(8),
xlabel="Время, с", ylabel="Градусы", title="Широта и долгота (Истинная и по ГНСС)"),
plot( data["Истин.Высота"].time, [data["Истин.Высота"].value first.(data["ГНСС Высота"].value)],
lw=2, titlefont=font(11), guidesfont=font(8),
xlabel="Время, с", ylabel="Высота, м", title="Высота (Истинная и по ГНСС)" ),
layout=(1,2), size=(900,400), leg=false
)
Также изучим измерения скорости:
plot(
plot(data["Курс"].time, first.(data["Курс"].value), title="Курс по GPS", lw=2, titlefont=font(11), guidesfont=font(8), xlabel="Время, с", ylabel="Градусы"),
plot(data["Скорость"].time, [reduce(vcat, data["Скорость"].value) reduce(vcat, data["Истин.Скорость"].value)], title="Скорость (истинная и по ГНСС)", lw=2, titlefont=font(11), guidesfont=font(8), xlabel="Время, с", ylabel="Метры в секунду"),
plot(data["Путевая скорость"].time, first.(data["Путевая скорость"].value), title="Путевая скорость по ГНСС", lw=2, titlefont=font(11), guidesfont=font(8), xlabel="Время, с", ylabel="Метры в секунду"),
layout=(1,3), size=(900,300), leg=false
)
Заключение
Мы проверили работу блока GPS и убедились в возможности добавления в модель сложных моделей погрешности и расчета зашумленных показателей траектории.