Постановка задачи

Для того чтобы определить вероятные положения летательного аппарата в окрестностях траектории необходимо использовать комплексную обработку данных полученных с различных источников, в рамках данной статьи предполагается что в основу расчета берем усредненные параметры участка траектории ЛА, известные координаты РЛС которые определяют его положение, дисперсии для каждой РЛС (в рамках данного моделирования берем две, но в произвольном случае может быть любое количество)

Подобные расчеты требуются для того чтобы определить как близко могут пролететь самолеты один относительно другого в сложных навигационных условиях (например в условиях заглушенного сигнала GPS), область вероятного положения в каждый момент времени при движении летательного аппарата будет представлять собой серию эллипсоидов, параметры данных эллипсоидов будут вычисляться с помощью скрипта на языке Engee

 Рисунок 1 - геометрический смысл решаемой задачи
Рисунок 1 - геометрический смысл решаемой задачи

Синтез траектории движения

В рамках данного расчета траекторию зададим как линейную пространственную

h = 0.1; tk = 0:h:100; t0 = tk[1]; A = [0 5 0 5 10 5 0 5 7]; X = zeros(1,length(tk)); Y = zeros(1,length(tk)); Z = zeros(1,length(tk)); G = zeros(9,9); H = zeros(length(tk),9,6) K_out = zeros(length(tk),9,9) x(t) = A[1] + A[4]*(t-t0); y(t) = A[2] + A[5]*(t-t0); z(t) = A[3] + A[6]*(t-t0); for j = 1:4 X[j] = x(tk[j]) Y[j] = y(tk[j]) Z[j] = z(tk[j]) end

Параметры РЛС

Для данного скрипта требуется задать точки в которых находятся РЛС в декартовой системе координат и дисперсии для измеряемых координат

# координаты РЛС в виде [x y z]

coord1 = [200 600 0];

coord2 = [200 200 0]; ## матрица дисперсий для измерителей в виде [погрешность линейная, погрешность угловая 1, погрешность угловая 2]

D = [1; 5/180*pi; 5/180*pi; 1; 5/180*pi; 5/180*pi];

Матрица соответствия для параметров траектории

Матрица соответствия (часто называемая матрицей чувствительности или матрицей идентификации) в контексте оценивания параметров траектории — это матрица, которая связывает небольшие изменения в параметрах модели с соответствующими изменениями в наблюдаемых или прогнозируемых величинах траектории.

# матрица соответствия F(t) = [1 0 0 (t-t0) 0 0 (t-t0)^2 0 0; 0 1 0 0 (t-t0) 0 0 (t-t0)^2 0; 0 0 1 0 0 (t-t0) 0 0 (t-t0)^2 0 0 0 1 0 0 (t-t0)*2 0 0; 0 0 0 0 1 0 0 (t-t0)*2 0; 0 0 0 0 0 1 0 0 (t-t0)*2; 0 0 0 0 0 0 2 0 0; 0 0 0 0 0 0 0 2 0; 0 0 0 0 0 0 0 0 2];

Вспомогательные функции для матрицы Якоби

радиус - вектора от РЛС до усредненных точек траектории

r1(t) = sqrt((x(t)-coord1[1])^2+(y(t)-coord1[2])^2+(z(t)-coord1[3])^2); # радиус вектор до объекта rg1(t) = sqrt((x(t)-coord1[1])^2+(z(t)-coord1[3])^2); # радиус вектор (проекция на плоскость) r2(t) = sqrt((x(t)-coord2[1])^2+(y(t)-coord2[2])^2+(z(t)-coord2[3])^2); # радиус вектор до объекта rg2(t) = sqrt((x(t)-coord2[1])^2+(z(t)-coord2[3])^2); # радиус вектор (проекция на плоскость)

Коэффициенты матрицы Якоби для первого РЛС

# первая строка матрицы Якоби f11(t)= (x(t)-coord1[1])/r1(t); f12(t)= (y(t)-coord1[2])/r1(t); f13(t)= (z(t)-coord1[3])/r1(t); f14(t)= ((x(t)-coord1[1])/r1(t))*(t-t0); f15(t)= ((y(t)-coord1[2])/r1(t))*(t-t0); f16(t)= ((z(t)-coord1[3])/r1(t))*(t-t0); f17(t)= ((x(t)-coord1[1])/r1(t))*(t-t0)^2; f18(t)= ((y(t)-coord1[2])/r1(t))*(t-t0)^2; f19(t)= ((z(t)-coord1[3])/r1(t))*(t-t0)^2; # вторая строка матрицы Якоби f21(t)= -(z(t)-coord1[3])/(rg1(t))^2; f22(t)= 0; f23(t)= (x(t)-coord1[1])/(rg1(t))^2; f24(t)= -(z(t)-coord1[3])/(rg1(t))^2*(t-t0); f25(t)= 0; f26(t)= (x(t)-coord1[1])/(rg1(t))^2*(t-t0); f27(t)= -(z(t)-coord1[3])/(rg1(t))^2*(t-t0)^2; f28(t)= 0; f29(t)= (x(t)-coord1[1])/(rg1(t))^2*(t-t0)^2; # третья строка матрицы Якоби f31(t)= -1/(rg1(t))*(x(t)-coord1[1])/r1(t)*(y(t)-coord1[2])/r1(t); f32(t)= rg1(t)/(r1(t)^2); f33(t)= -1/(rg1(t))*(y(t)-coord1[2])/r1(t)*(z(t)-coord1[3])/r1(t); f34(t)= -1/(rg1(t))*(x(t)-coord1[1])/r1(t)*(y(t)-coord1[2])/r1(t)*(t-t0); f35(t)= rg1(t)/(r1(t)^2)*(t-t0); f36(t)= -1/(rg1(t))*(y(t)-coord1[2])/r1(t)*(z(t)-coord1[3])/r1(t)*(t-t0); f37(t)= -1/(rg1(t))*(x(t)-coord1[1])/r1(t)*(y(t)-coord1[2])/r1(t)*(t-t0)^2; f38(t)= rg1(t)/(r1(t)^2)*(t-t0)^2; f39(t)= -1/(rg1(t))*(y(t)-coord1[2])/r1(t)*(z(t)-coord1[3])/r1(t)*(t-t0)^2;

Коэффициенты матрицы Якоби для второго РЛС

# второй измеритель # первая строка матрицы Якоби f11_2(t)= (x(t)-coord2[1])/r2(t); f12_2(t)= (y(t)-coord2[2])/r2(t); f13_2(t)= (z(t)-coord2[3])/r2(t); f14_2(t)= ((x(t)-coord2[1])/r2(t))*(t-t0); f15_2(t)= ((y(t)-coord2[2])/r2(t))*(t-t0); f16_2(t)= ((z(t)-coord2[3])/r2(t))*(t-t0); f17_2(t)= ((x(t)-coord2[1])/r2(t))*(t-t0)^2; f18_2(t)= ((y(t)-coord2[2])/r2(t))*(t-t0)^2; f19_2(t)= ((z(t)-coord2[3])/r2(t))*(t-t0)^2; # вторая строка матрицы Якоби f21_2(t)= -(z(t)-coord2[3])/(rg2(t))^2; f22_2(t)= 0; f23_2(t)= (x(t)-coord2[1])/(rg2(t))^2; f24_2(t)= -(z(t)-coord2[3])/(rg2(t))^2*(t-t0); f25_2(t)= 0; f26_2(t)= (x(t)-coord2[1])/(rg2(t))^2*(t-t0); f27_2(t)= -(z(t)-coord2[3])/(rg2(t))^2*(t-t0)^2; f28_2(t)= 0; f29_2(t)= (x(t)-coord2[1])/(rg2(t))^2*(t-t0)^2; # третья строка матрицы Якоби f31_2(t)= -1/(rg2(t))*(x(t)-coord2[1])/r2(t)*(y(t)-coord2[2])/r2(t); f32_2(t)= rg2(t)/(r2(t)^2); f33_2(t)= -1/(rg2(t))*(y(t)-coord2[2])/r2(t)*(z(t)-coord2[3])/r2(t); f34_2(t)= -1/(rg2(t))*(x(t)-coord2[1])/r2(t)*(y(t)-coord2[2])/r2(t)*(t-t0); f35_2(t)= rg2(t)/(r2(t)^2)*(t-t0); f36_2(t)= -1/(rg2(t))*(y(t)-coord2[2])/r2(t)*(z(t)-coord2[3])/r2(t)*(t-t0); f37_2(t)= -1/(rg2(t))*(x(t)-coord2[1])/r2(t)*(y(t)-coord2[2])/r2(t)*(t-t0)^2; f38_2(t)= rg2(t)/(r2(t)^2)*(t-t0)^2; f39_2(t)= -1/(rg2(t))*(y(t)-coord2[2])/r2(t)*(z(t)-coord2[3])/r2(t)*(t-t0)^2;

Матрица Якоби для двух РЛС

Матрица Якоби содержит частные производные наблюдаемых величин или выходов системы по отношению к параметрам. Она показывает, насколько сильно меняется модельная траектория при небольших изменениях параметров. Наличие полноразмерной, невырожденной матрицы Якоби свидетельствует об хорошей идентифицируемости и возможности точной оценки параметров.

## матрица частных производных (Якоби) H0(t)= [f11(t) f12(t) f13(t) f14(t) f15(t) f16(t) f17(t) f18(t) f19(t); f21(t) f22(t) f23(t) f24(t) f25(t) f26(t) f27(t) f28(t) f29(t); f31(t) f32(t) f33(t) f34(t) f35(t) f36(t) f37(t) f38(t) f39(t); f11_2(t) f12_2(t) f13_2(t) f14_2(t) f15_2(t) f16_2(t) f17_2(t) f18_2(t) f19_2(t); f21_2(t) f22_2(t) f23_2(t) f24_2(t) f25_2(t) f26_2(t) f27_2(t) f28_2(t) f29_2(t); f31_2(t) f32_2(t) f33_2(t) f34_2(t) f35_2(t) f36_2(t) f37_2(t) f38_2(t) f39_2(t)];

Далее необходимо для каждого момента времени рассчитать значения матрицы Якоби, таким образом получаем трехмерную матрицу

for i = 1:length(tk) H[i,1,1] = f11(tk[i]) H[i,2,1] = f12(tk[i]); H[i,3,1] = f13(tk[i]); H[i,4,1] = f14(tk[i]); H[i,5,1] = f15(tk[i]); H[i,6,1] = f16(tk[i]); H[i,7,1] = f17(tk[i]); H[i,8,1] = f18(tk[i]); H[i,9,1] = f19(tk[i]); H[i,1,2] = f21(tk[i]); H[i,2,2] = f22(tk[i]); H[i,3,2] = f23(tk[i]); H[i,4,2] = f24(tk[i]); H[i,5,2] = f25(tk[i]); H[i,6,2] = f26(tk[i]); H[i,7,2] = f27(tk[i]); H[i,8,2] = f28(tk[i]); H[i,9,2] = f29(tk[i]); H[i,1,3] = f31(tk[i]); H[i,2,3] = f32(tk[i]); H[i,3,3] = f33(tk[i]); H[i,4,3] = f34(tk[i]); H[i,5,3] = f35(tk[i]); H[i,6,3] = f36(tk[i]); H[i,7,3] = f37(tk[i]); H[i,8,3] = f38(tk[i]); H[i,9,3] = f39(tk[i]); H[i,1,4] = f11_2(tk[i]); H[i,2,4] = f12_2(tk[i]); H[i,3,4] = f13_2(tk[i]); H[i,4,4] = f14_2(tk[i]); H[i,5,4] = f15_2(tk[i]); H[i,6,4] = f16_2(tk[i]); H[i,7,4] = f17_2(tk[i]); H[i,8,4] = f18_2(tk[i]); H[i,9,4] = f19_2(tk[i]); H[i,1,5] = f21_2(tk[i]); H[i,2,5] = f22_2(tk[i]); H[i,3,5] = f23_2(tk[i]); H[i,4,5] = f24_2(tk[i]); H[i,5,5] = f25_2(tk[i]); H[i,6,5] = f26_2(tk[i]); H[i,7,5] = f27_2(tk[i]); H[i,8,5] = f28_2(tk[i]); H[i,9,5] = f29_2(tk[i]); H[i,1,6] = f31_2(tk[i]); H[i,2,6] = f32_2(tk[i]); H[i,3,6] = f33_2(tk[i]); H[i,4,6] = f34_2(tk[i]); H[i,5,6] = f35_2(tk[i]); H[i,6,6] = f36_2(tk[i]); H[i,7,6] = f37_2(tk[i]); H[i,8,6] = f38_2(tk[i]); H[i,9,6] = f39_2(tk[i]); end

Информационная матрица Фишера

На основании трехмерной матрицы Якоби с помощью двойной сумму формируем информационную матрицу Фишера. Информационная матрица Фишера играет ключевую роль в оценивании параметров траектории в задачах статистического моделирования, особенно когда речь идет о оценке параметров в динамических системах или процессах.

# расчет информационной матрицы Фишера for L = 1:9 # перебор координат матрицы Фишера for J = 1:9 # перебор координат матрицы Фишера G[L,J] = 0; # очистка суммы for i = 1:6 # перебор функций для каждого измерителя S0 = 0; # очистка суммы for j = 1:length(tk) S0 = S0+ H[j,J,i]*(1/D[i])*H[j,L,i]; # вторая сумма end G[L,J] = G[L,J]+S0; #первая сумма end end end

Корреляционная матрица

Корреляционная матрица вычисляется как обратная для матрицы Фишера.

# расчет корреляционной матрицы Ka = G^-1;

 Рисунок 2 - устройство корреляционной матрицы (по диагонали дисперсии характеризующие проекции размеров эллипсоида на оси)
Рисунок 2 - устройство корреляционной матрицы (по диагонали дисперсии характеризующие проекции размеров эллипсоида на оси)

Функция для расчета параметров всех эллипсоидов

function ellipsoid5(x0,y0,z0,K) # радиусы эллипсоида a = 1; b = 1; c = 1; # изменения углов teta = 0:0.05:pi; fi = 0:0.05:(2*pi); x = zeros(1,length(teta)*length(fi)) y = zeros(1,length(teta)*length(fi)) z = zeros(1,length(teta)*length(fi)) x2 = zeros(1,length(teta)*length(fi)) y2 = zeros(1,length(teta)*length(fi)) z2 = zeros(1,length(teta)*length(fi)) k = 1; for i = 1:length(teta) for j = 1:length(fi) x[k] = a*sin(teta[i])*cos(fi[j]); y[k] = b*sin(teta[i])*sin(fi[j]); z[k] = c*cos(teta[i]); k = k+1; end end for i = 1:length(x) A = [x[i] y[i] z[i] 0 0 0 0 0 0]*K; x2[i] = A[1]; y2[i] = A[2]; z2[i] = A[3]; end X = vec(x2+x0*ones(1,length(teta)*length(fi))) Y = vec(y2+y0*ones(1,length(teta)*length(fi))) Z = vec(z2+z0*ones(1,length(teta)*length(fi))) return X, Y, Z end

# расчет матрицы ошибок траектории gr() K(t)= F(t)*Ka*(F(t)'); # построение зависимости от времени для матрицы ошибок for i = 1:length(tk) K_out[i,:, :] = K(tk[i]) end #figure эллипсоиды = plot3d([], [], [], legend=false) for i = 1:10:length(tk) Kx_f = [K_out[i,1,1] K_out[i,1,2] K_out[i,1,3] K_out[i,1,4] K_out[i,1,5] K_out[i,1,6] K_out[i,1,7] K_out[i,1,8] K_out[i,1,9]; K_out[i,2,1] K_out[i,2,2] K_out[i,2,3] K_out[i,2,4] K_out[i,2,5] K_out[i,2,6] K_out[i,2,7] K_out[i,2,8] K_out[i,2,9]; K_out[i,3,1] K_out[i,3,2] K_out[i,3,3] K_out[i,3,4] K_out[i,3,5] K_out[i,3,6] K_out[i,3,7] K_out[i,3,8] K_out[i,3,9]; K_out[i,4,1] K_out[i,4,2] K_out[i,4,3] K_out[i,4,4] K_out[i,4,5] K_out[i,4,6] K_out[i,4,7] K_out[i,4,8] K_out[i,4,9]; K_out[i,5,1] K_out[i,5,2] K_out[i,5,3] K_out[i,5,4] K_out[i,5,5] K_out[i,5,6] K_out[i,5,7] K_out[i,5,8] K_out[i,5,9]; K_out[i,6,1] K_out[i,6,2] K_out[i,6,3] K_out[i,6,4] K_out[i,6,5] K_out[i,6,6] K_out[i,6,7] K_out[i,6,8] K_out[i,6,9]; K_out[i,7,1] K_out[i,7,2] K_out[i,7,3] K_out[i,7,4] K_out[i,7,5] K_out[i,7,6] K_out[i,7,7] K_out[i,7,8] K_out[i,7,9]; K_out[i,8,1] K_out[i,8,2] K_out[i,8,3] K_out[i,8,4] K_out[i,8,5] K_out[i,8,6] K_out[i,8,7] K_out[i,8,8] K_out[i,8,9]; K_out[i,9,1] K_out[i,9,2] K_out[i,9,3] K_out[i,9,4] K_out[i,9,5] K_out[i,9,6] K_out[i,9,7] K_out[i,9,8] K_out[i,9,9]]; X, Y, Z = ellipsoid5(x(tk[i]),y(tk[i]),z(tk[i]),Kx_f) plot3d!(эллипсоиды, X, Y, Z) #hold on end scatter!(эллипсоиды, [coord1[1]], [coord1[2]], [coord1[3]], markershape=:dtriangle, markercolor=:red, markersize=2) scatter!(эллипсоиды, [coord2[1]], [coord2[2]], [coord2[3]], markershape=:dtriangle, markercolor=:red, markersize=2) display(эллипсоиды)

Рисунок 3 - визуализация областей вероятного положения ЛА
Рисунок 3 - визуализация областей вероятного положения ЛА

Дисперсии РЛС выбраны для наилучшего отображения эллипсоидов, для реальных локаторов они могут быть меньше и размер эллипсоидов будет меньше, также для более длинных участков траектории размер информационной матрицы Фишера будет больше. Соответственно значения корреляционной матрицы будет тем меньше чем большее количество точек траектории анализируется.