问题1
根据题目信息,可以将机会信号分为五类,分别是达到时间信息(TOA)、到达时间差信息(TDOA)、多普勒频率差信息(DFD)、到达角度信息(AOA)和接收强度指标信息(RSSI)。每一类机会信号都可以用数学表达式来表示,通过建立数学模型,可以推导出每一类信号所需的最少信号个数。
(1)达到时间信息 TOA:
根据题目信息,信号传输时间可以表示为:
T
=
T
O
A
=
T
0
+
L
c
T=TOA=T_{0}+\frac{L}{c}
T=TOA=T0+cL,其中
T
0
T_{0}
T0 为信号发射时间,L为信号传播距离,c为信号传播速度。
设飞行器位置为
(
x
0
,
y
0
,
z
0
)
(x_{0},y_{0},z_{0})
(x0,y0,z0),发射源位置为
(
x
1
,
y
1
,
z
1
)
(x_{1},y_{1},z_{1})
(x1,y1,z1),接收时间为
t
0
t_{0}
t0,则有:
T 0 = t 0 − ( x 0 − x 1 ) 2 + ( y 0 − y 1 ) 2 + ( z 0 − z 1 ) 2 T_{0}=t_{0}-\sqrt{(x_{0}-x_{1})^{2}+(y_{0}-y_{1})^{2}+(z_{0}-z_{1})^{2}} T0=t0−(x0−x1)2+(y0−y1)2+(z0−z1)2
信号传播距离L为:
L = ( x 0 − x 1 ) 2 + ( y 0 − y 1 ) 2 + ( z 0 − z 1 ) 2 L=\sqrt{(x_{0}-x_{1})^{2}+(y_{0}-y_{1})^{2}+(z_{0}-z_{1})^{2}} L=(x0−x1)2+(y0−y1)2+(z0−z1)2
因此,达到时间信息TOA可以表示为:
T O A = t 0 − 1 c ( x 0 − x 1 ) 2 + ( y 0 − y 1 ) 2 + ( z 0 − z 1 ) 2 TOA=t_{0}-\frac{1}{c}\sqrt{(x_{0}-x_{1})^{2}+(y_{0}-y_{1})^{2}+(z_{0}-z_{1})^{2}} TOA=t0−c1(x0−x1)2+(y0−y1)2+(z0−z1)2
(2)到达时间差信息 TDOA:
同一信号从两个发射源(同时发射)到达接收端的时间差可以表示为:
t 1 − t 2 = L 1 − L 2 c t_{1}-t_{2}=\frac{L_{1}-L_{2}}{c} t1−t2=cL1−L2
其中, t 1 t_{1} t1、 t 2 t_{2} t2分别为信号到达两个发射源的时间, L 1 L_{1} L1、 L 2 L_{2} L2分别为信号从发射源到接收端的距离。
设发射源1位置为 ( x 1 , y 1 , z 1 ) (x_{1},y_{1},z_{1}) (x1,y1,z1),发射源2位置为 ( x 2 , y 2 , z 2 ) (x_{2},y_{2},z_{2}) (x2,y2,z2),接收时间为 t 0 t_{0} t0,则有:
t 1 = t 0 − ( x 0 − x 1 ) 2 + ( y 0 − y 1 ) 2 + ( z 0 − z 1 ) 2 t_{1}=t_{0}-\sqrt{(x_{0}-x_{1})^{2}+(y_{0}-y_{1})^{2}+(z_{0}-z_{1})^{2}} t1=t0−(x0−x1)2+(y0−y1)2+(z0−z1)2
t 2 = t 0 − ( x 0 − x 2 ) 2 + ( y 0 − y 2 ) 2 + ( z 0 − z 2 ) 2 t_{2}=t_{0}-\sqrt{(x_{0}-x_{2})^{2}+(y_{0}-y_{2})^{2}+(z_{0}-z_{2})^{2}} t2=t0−(x0−x2)2+(y0−y2)2+(z0−z2)2
因此,到达时间差信息TDOA可以表示为:
T D O A = ( x 0 − x 1 ) 2 + ( y 0 − y 1 ) 2 + ( z 0 − z 1 ) 2 − ( x 0 − x 2 ) 2 + ( y 0 − y 2 ) 2 + ( z 0 − z 2 ) 2 c TDOA=\frac{\sqrt{(x_{0}-x_{1})^{2}+(y_{0}-y_{1})^{2}+(z_{0}-z_{1})^{2}}-\sqrt{(x_{0}-x_{2})^{2}+(y_{0}-y_{2})^{2}+(z_{0}-z_{2})^{2}}}{c} TDOA=c(x0−x1)2+(y0−y1)2+(z0−z1)2−(x0−x2)2+(y0−y2)2+(z0−z2)2
(3)多普勒频率差信息 DFD:
同一信号从两个发射源发射,由于飞行器与信号源具有相对速度,接收信号会产生频率变化,进而产生信号频率差。根据多普勒效应,有:
Δ f = f 0 c v r \Delta f=\frac{f_{0}}{c}v_{r} Δf=cf0vr
其中, Δ f \Delta f Δf为信号频率差, f 0 f_{0} f0为信号发射频率, c c c为信号传播速度, v r v_{r} vr为飞行器与信号源的相对速度。
设发射源1位置为 ( x 1 , y 1 , z 1 ) (x_{1},y_{1},z_{1}) (x1,y1,z1),发射源2位置为 ( x 2 , y 2 , z 2 ) (x_{2},y_{2},z_{2}) (x2,y2,z2),接收时间为 t 0 t_{0} t0,则有:
f 1 = f 0 + v r 1 c f 0 f_{1}=f_{0}+\frac{v_{r1}}{c}f_{0} f1=f0+cvr1f0
f 2 = f 0 + v r 2 c f 0 f_{2}=f_{0}+\frac{v_{r2}}{c}f_{0} f2=f0+cvr2f0
其中, f 1 f_{1} f1为信号从发射源1发射后的频率, f 2 f_{2} f2为信号从发射源2发射后的频率, v r 1 v_{r1} vr1为飞行器与发射源1的相对速度, v r 2 v_{r2} vr2为飞行器与发射源2的相对速度。
因此,多普勒频率差信息DFD可以表示为:
D F D = f 1 − f 2 f 0 = v r 1 − v r 2 c DFD=\frac{f_{1}-f_{2}}{f_{0}}=\frac{v_{r1}-v_{r2}}{c} DFD=f0f1−f2=cvr1−vr2
(4)到达角度信息 AOA:
接收源可得到发射源信号的相对角度信息,如图 1 所示(发射源与接收源连线在 xOy 平面投影线段与x 轴正方向的夹角,发射源与接收源连线与 z 轴负方向的夹角β)。为了简化处理,图 1 中的坐标系为地面惯性系,到达角度信息为角度的正切值。
设飞行器位置为
(
x
0
,
y
0
,
z
0
)
(x_{0},y_{0},z_{0})
(x0,y0,z0),发射源位置为
(
x
1
,
y
1
,
z
1
)
(x_{1},y_{1},z_{1})
(x1,y1,z1),接收角度为
θ
\theta
θ,则有:
tan θ = z 1 − z 0 ( x 0 − x 1 ) 2 + ( y 0 − y 1 ) 2 \tan \theta=\frac{z_{1}-z_{0}}{\sqrt{(x_{0}-x_{1})^{2}+(y_{0}-y_{1})^{2}}} tanθ=(x0−x1)2+(y0−y1)2z1−z0
因此,到达角度信息AOA可以表示为:
A O A = z 1 − z 0 ( x 0 − x 1 ) 2 + ( y 0 − y 1 ) 2 AOA=\frac{z_{1}-z_{0}}{\sqrt{(x_{0}-x_{1})^{2}+(y_{0}-y_{1})^{2}}} AOA=(x0−x1)2+(y0−y1)2z1−z0
(5)接收强度指标信息RSSI:
设信号源发射功率为
P
t
P_{t}
Pt,接收端的接收功率为
P
r
P_{r}
Pr,则接收强度指标信息RSSI可以表示为:
R S S I = 10 log 10 P t P r RSSI=10\log_{10}\frac{P_{t}}{P_{r}} RSSI=10log10PrPt
根据机会信号的数学表达式,可以发现,TOA和RSSI信息无法唯一确定飞行器的位置,因为它们都只提供了一维信息(时间和强度)。而TDOA、DFD和AOA信息可以提供二维信息(时间差、频率差和角度差),因此最少需要两个信号来确定飞行器的位置。但是考虑到实际情况中可能存在的偏差,为了保证定位的精确性,使用至少三个信号来确定飞行器位置。
Python示例代码实现:
import numpy as np
import pandas as pd
import math
# 读取附件1中的数据
data = pd.read_csv("附件1.csv")
# 定义机会信号的数学表达式
def TOA(t_r, t_s):
return t_r - t_s
def TDOA(t_r1, t_s1, t_r2, t_s2):
return (t_r1 - t_s1) - (t_r2 - t_s2)
def DFD(f_r, f_s):
return f_r - f_s
def AOA(x, y, x_s, y_s):
return math.atan((x - x_s) / (y - y_s))
def RSSI(P_s, P_r):
return P_s / P_r
# 计算飞行器的位置
def calculate_position(data):
# 初始化位置坐标
x = 0
y = 0
# 计算TDOA,由于需要三个信号,所以从第三个数据开始计算
for i in range(2, len(data)):
# 计算TOA
toa1 = TOA(data.iloc[i,1], data.iloc[i,3])
toa2 = TOA(data.iloc[i,2], data.iloc[i,4])
toa3 = TOA(data.iloc[i,3], data.iloc[i,5])
# 计算TDOA
tdoa1 = TDOA(data.iloc[i,1], data.iloc[i,3], data.iloc[i,2], data.iloc[i,4])
tdoa2 = TDOA(data.iloc[i,1], data.iloc[i,3], data.iloc[i,3], data.iloc[i,5])
tdoa3 = TDOA(data.iloc[i,2], data.iloc[i,4], data.iloc[i,3], data.iloc[i,5])
# 根据三个TDOA计算位置坐标
x = (tdoa1 * toa2 * toa3) / (tdoa1 + tdoa2 + tdoa3)
y = (tdoa2 * toa1 * toa3) / (tdoa1 + tdoa2 + tdoa3)
return [x, y]
# 调用函数计算位置坐标
position = calculate_position(data)
# 打印结果
print("飞行器位置坐标为:[%.2f, %.2f]" % (position[0], position[1]))
问题2
问题2的模型建立过程:
飞行器实时位置估计模型:
根据题目信息,可以将飞行器的位置估计问题转化为时间序列分析的问题。设飞行器在时刻
t
t
t的位置为
(
x
(
t
)
,
y
(
t
)
,
z
(
t
)
)
(x(t),y(t),z(t))
(x(t),y(t),z(t)),则根据题目信息,可以建立如下的时间序列模型:
x
(
t
)
=
f
x
(
t
)
+
e
x
(
t
)
x(t) = f_x(t) + e_x(t)
x(t)=fx(t)+ex(t)
y
(
t
)
=
f
y
(
t
)
+
e
y
(
t
)
y(t) = f_y(t) + e_y(t)
y(t)=fy(t)+ey(t)
z
(
t
)
=
f
z
(
t
)
+
e
z
(
t
)
z(t) = f_z(t) + e_z(t)
z(t)=fz(t)+ez(t)
其中,
f
x
(
t
)
,
f
y
(
t
)
,
f
z
(
t
)
f_x(t),f_y(t),f_z(t)
fx(t),fy(t),fz(t)为飞行器的位置函数,
e
x
(
t
)
,
e
y
(
t
)
,
e
z
(
t
)
e_x(t),e_y(t),e_z(t)
ex(t),ey(t),ez(t)为误差项。根据题目信息,误差项可以分为随机性偏差和常值飘移两种。因此,可以将误差项表示为:
e
x
(
t
)
=
σ
x
(
t
)
+
μ
x
(
t
)
e_x(t) = \sigma_x(t) + \mu_x(t)
ex(t)=σx(t)+μx(t)
e
y
(
t
)
=
σ
y
(
t
)
+
μ
y
(
t
)
e_y(t) = \sigma_y(t) + \mu_y(t)
ey(t)=σy(t)+μy(t)
e
z
(
t
)
=
σ
z
(
t
)
+
μ
z
(
t
)
e_z(t) = \sigma_z(t) + \mu_z(t)
ez(t)=σz(t)+μz(t)
其中,
σ
x
(
t
)
,
σ
y
(
t
)
,
σ
z
(
t
)
\sigma_x(t),\sigma_y(t),\sigma_z(t)
σx(t),σy(t),σz(t)为随机性偏差,
μ
x
(
t
)
,
μ
y
(
t
)
,
μ
z
(
t
)
\mu_x(t),\mu_y(t),\mu_z(t)
μx(t),μy(t),μz(t)为常值飘移。根据题目要求,需要建立飞行器实时位置的估计方法,因此可以利用滤波器的方法来对飞行器位置进行估计。
根据题目要求,需要建立飞行器的三维空间位置估计模型,可以使用三角定位法来估计飞行器的位置。假设飞行器位置为
(
x
,
y
,
z
)
(x,y,z)
(x,y,z),发射源
E
i
E_i
Ei的位置为
(
x
i
,
y
i
,
z
i
)
(x_i,y_i,z_i)
(xi,yi,zi),接收源
R
R
R的位置为
(
x
r
,
y
r
,
z
r
)
(x_r,y_r,z_r)
(xr,yr,zr),则可得到如下方程:
{
(
x
−
x
i
)
2
+
(
y
−
y
i
)
2
+
(
z
−
z
i
)
2
=
(
v
T
O
A
i
)
2
(
x
−
x
j
)
2
+
(
y
−
y
j
)
2
+
(
z
−
z
j
)
2
=
(
v
T
O
A
j
)
2
\begin{cases} (x-x_i)^2+(y-y_i)^2+(z-z_i)^2 = (vTOA_i)^2\\ (x-x_j)^2+(y-y_j)^2+(z-z_j)^2 = (vTOA_j)^2 \end{cases}
{(x−xi)2+(y−yi)2+(z−zi)2=(vTOAi)2(x−xj)2+(y−yj)2+(z−zj)2=(vTOAj)2
求解该方程即可得到飞行器的实时位置。
python示例代码如下:
import numpy as np
import matplotlib.pyplot as plt
# 数据导入
data = np.loadtxt('附件1接收情况1数据.txt')
# 飞行器坐标
x = data[:, 1]
y = data[:, 2]
z = data[:, 3]
# 发射源坐标
xs = data[:, 4]
ys = data[:, 5]
zs = data[:, 6]
# 接收时间
receive_time = data[:, 7]
# 发射时间
transmit_time = data[:, 8]
# 计算信号传输时间
transmission_time = receive_time - transmit_time
# 计算到达角度信息
# 定义角度信息计算函数
def cal_angle(x, y, z, xs, ys, zs):
dx = x - xs
dy = y - ys
dz = z - zs
angle = np.arctan2(dy, dx)
return angle
# 计算到达角度信息
angle = cal_angle(x, y, z, xs, ys, zs)
# 定义飞行器位置估计函数
def estimate_position(transmission_time, angle):
# 速度光速
c = 3 * 10**8
# 发射源编号
n = len(transmission_time)
# 构建A矩阵
A = np.zeros((n-1, 4))
for i in range(n-1):
A[i, 0] = c * (transmission_time[i+1] - transmission_time[0])
A[i, 1] = c * (transmission_time[i+1] - transmission_time[0] - transmission_time[1] + transmission_time[0])
A[i, 2] = c * (transmission_time[i+1] - transmission_time[0] - transmission_time[2] + transmission_time[0])
A[i, 3] = c * (transmission_time[i+1] - transmission_time[0] - transmission_time[3] + transmission_time[0])
# 构建b矩阵
b = np.zeros((n-1, 1))
for i in range(n-1):
b[i, 0] = c * (angle[i+1] - angle[0])
# 计算估计位置
position = np.linalg.lstsq(A, b, rcond=None)[0]
# 返回结果
return position
# 计算位置估计值
position_estimate = estimate_position(transmission_time, angle)
# 提取x,y,z坐标估计值
x_estimate = position_estimate[:, 0]
y_estimate = position_estimate[:, 1]
z_estimate = position_estimate[:, 2]
# 绘制结果图
plt.figure()
plt.plot(x, y, label='Real Position')
plt.plot(x_estimate, y_estimate, label='Estimate Position')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
# 打印0秒至10秒的位置估计值
print('0秒至10秒的位置估计值为:')
print(x_estimate, y_estimate, z_estimate)
查看完整思路详见:
【腾讯文档】第九届“数维杯”大学生数学建模挑战赛全题目深度剖析建模完整过程+详细思路+代码全解析(持续更新中!)
https://docs.qq.com/doc/DSHd6UHpNZkZoWmxw