存在站址误差下TDOA定位的CRLB
存在站址误差下观测模型
在三维直角坐标系中,考虑利用M个观测站对一个目标进行定位。
第i个观测站位置向量记为
s
i
o
=
[
s
x
,
i
o
,
s
y
,
i
o
,
s
z
,
i
o
]
T
,
1
≤
i
≤
M
\boldsymbol{s}_i^o=[s_{x,i}^o,s_{y,i}^o,s_{z,i}^o]^T,1\leq i \leq M
sio=[sx,io,sy,io,sz,io]T,1≤i≤M,目标位置向量记为
u
o
=
[
u
x
o
,
u
y
o
,
u
z
o
]
T
\boldsymbol{u}^o=[u_{x}^o,u_{y}^o,u_{z}^o]^T
uo=[uxo,uyo,uzo]T
将第一个观测站作为TDOA测量的参考观测站,则目标到达其余观测站和参考观测站之间的TDOA可以表示为:
τ
j
1
o
=
∣
∣
u
o
−
s
j
o
∣
∣
2
c
−
∣
∣
u
o
−
s
1
o
∣
∣
2
c
,
2
≤
j
≤
M
\tau_{j1}^o= \frac{||\boldsymbol{u}^o-\boldsymbol{s}_j^o||_2}{c}- \frac{||\boldsymbol{u}^o-\boldsymbol{s}_1^o||_2}{c} , 2\leq j \leq M
τj1o=c∣∣uo−sjo∣∣2−c∣∣uo−s1o∣∣2,2≤j≤M
其中c表示信号传播速度,通常是已知的,因此TDOA可以转换为到达距离差(Range Difference Of Arrival,RDOA):
r
j
1
o
=
∣
∣
u
o
−
s
j
o
∣
∣
2
−
∣
∣
u
o
−
s
1
o
∣
∣
2
,
2
≤
j
≤
M
r_{j1}^o= ||\boldsymbol{u}^o-\boldsymbol{s}_j^o||_2 -||\boldsymbol{u}^o-\boldsymbol{s}_1^o||_2 , 2\leq j \leq M
rj1o=∣∣uo−sjo∣∣2−∣∣uo−s1o∣∣2,2≤j≤M
因此建立RDOA观测模型为:
r
=
r
o
+
n
r
=
[
r
21
o
,
r
31
o
,
.
.
.
,
r
M
1
o
]
T
+
[
δ
r
21
,
δ
r
31
,
.
.
.
,
δ
r
M
1
]
T
\boldsymbol{r}= \boldsymbol{r^o}+\boldsymbol{n}_{\boldsymbol{r}} =[r_{21}^o,r_{31}^o,...,r_{M1}^o]^T +[\delta{r_{21}},\delta{r_{31}},...,\delta{r_{M1}}]^T
r=ro+nr=[r21o,r31o,...,rM1o]T+[δr21,δr31,...,δrM1]T
n
r
\boldsymbol{n}_{\boldsymbol{r}}
nr表示测量噪声向量,协方差矩阵表示为
Q
\boldsymbol{Q}
Q。
在实际过程中,观测站可能处于运动状态,从而获得的观测站位置是带有误差的,将带有误差的观测站位置建模为:
s
i
=
s
i
o
+
n
s
i
=
[
s
i
,
x
o
,
s
i
,
y
o
,
s
i
,
z
o
]
T
+
[
δ
s
i
,
x
,
δ
s
i
,
y
,
δ
s
i
,
z
]
T
\boldsymbol{s_i}=\boldsymbol{s_i^o}+\boldsymbol{n_{\boldsymbol{s}_i}}=[s_{i,x}^o,s_{i,y}^o,s_{i,z}^o]^T+[\delta s_{i,x},\delta s_{i,y},\delta s_{i,z}]^T
si=sio+nsi=[si,xo,si,yo,si,zo]T+[δsi,x,δsi,y,δsi,z]T。其中
s
i
o
\boldsymbol{s_i^o}
sio表示观测站真实位置向量,
n
s
i
\boldsymbol{n_{\boldsymbol{s}_i}}
nsi表示随机误差。则将所有观测站向量组合得到:
s
=
s
o
+
n
s
=
[
(
s
1
o
)
T
,
(
s
2
o
)
T
,
.
.
.
,
(
s
M
o
)
T
]
T
+
[
n
s
1
T
,
n
s
2
T
,
.
.
.
,
n
s
M
T
]
T
\boldsymbol{s} =\boldsymbol{s}^o+\boldsymbol{n}_{\boldsymbol{s}} =[(\boldsymbol{s_1^o})^T,(\boldsymbol{s_2^o})^T,...,(\boldsymbol{s_M^o})^T]^T +[\boldsymbol{n^T_{\boldsymbol{s}_1}},\boldsymbol{n^T_{\boldsymbol{s}_2}},...,\boldsymbol{n^T_{\boldsymbol{s}_M}}]^T
s=so+ns=[(s1o)T,(s2o)T,...,(sMo)T]T+[ns1T,ns2T,...,nsMT]T
n
s
\boldsymbol{n}_{\boldsymbol{s}}
ns的协方差矩阵表示为
Q
s
\boldsymbol{Q}_{\boldsymbol{s}}
Qs。
站址误差下的DOA定位的CRLB
存在站址误差时的未知向量为
κ
o
=
[
(
u
o
)
T
,
(
s
o
)
T
]
T
\boldsymbol{\kappa}^o=[(\boldsymbol{u}^o)^T,(\boldsymbol{s}^o)^T]^T
κo=[(uo)T,(so)T]T,测量向量为TDOA测量值,记为
r
\boldsymbol{r}
r。则此时对数似然函数表示为:
l
n
(
p
(
r
∣
κ
o
)
)
=
κ
−
(
1
/
2
)
(
r
−
r
o
)
T
Q
−
1
(
r
−
r
o
)
−
(
1
/
2
)
(
s
−
s
o
)
T
Q
s
−
1
(
s
−
s
o
)
ln(p(\boldsymbol{r}|\boldsymbol{\kappa}^o)) =\kappa-(1/2)(\boldsymbol{r}-\boldsymbol{r}^o)^T \boldsymbol Q^{-1}(\boldsymbol{r}-\boldsymbol{r}^o) -(1/2)(\boldsymbol{s}-\boldsymbol{s}^o)^T \boldsymbol Q_{\boldsymbol{s}}^{-1}(\boldsymbol{s}-\boldsymbol{s}^o)
ln(p(r∣κo))=κ−(1/2)(r−ro)TQ−1(r−ro)−(1/2)(s−so)TQs−1(s−so)
Fisher信息矩阵表示为:
F
=
[
F
1
F
2
F
2
T
F
3
]
\boldsymbol{F}= \begin{gathered} \begin{bmatrix} \boldsymbol{F}_1 & \boldsymbol{F}_2 \\ \boldsymbol{F}_2^T & \boldsymbol{F}_3 \end{bmatrix} \quad \end{gathered}
F=[F1F2TF2F3]
其中:
{
F
1
=
(
(
∂
r
o
∂
(
u
o
)
T
)
Q
−
1
(
∂
r
o
∂
(
u
o
)
T
)
T
)
F
2
=
(
(
∂
r
o
∂
(
u
o
)
T
)
Q
−
1
(
∂
r
o
∂
(
s
o
)
T
)
T
)
F
3
=
(
(
∂
r
o
∂
(
s
o
)
T
)
Q
−
1
(
∂
r
o
∂
(
s
o
)
T
)
T
)
+
Q
s
−
1
\begin{cases} \boldsymbol{F}_1 =\left( \left(\frac {\partial \boldsymbol{r^o}}{\partial (\boldsymbol{u^o})^T}\right) \boldsymbol Q^{-1} \left(\frac {\partial \boldsymbol{r^o}}{\partial (\boldsymbol{u^o})^T}\right)^T \right)\\ \boldsymbol{F}_2 =\left( \left(\frac {\partial \boldsymbol{r^o}}{\partial (\boldsymbol{u^o})^T}\right) \boldsymbol Q^{-1} \left(\frac {\partial \boldsymbol{r^o}}{\partial (\boldsymbol{s^o})^T}\right)^T \right)\\ \boldsymbol{F}_3 =\left( \left(\frac {\partial \boldsymbol{r^o}}{\partial (\boldsymbol{s^o})^T}\right) \boldsymbol Q^{-1} \left(\frac {\partial \boldsymbol{r^o}}{\partial (\boldsymbol{s^o})^T}\right)^T \right)+\boldsymbol{Q}^{-1}_{\boldsymbol{s}}\\ \end{cases}
⎩
⎨
⎧F1=((∂(uo)T∂ro)Q−1(∂(uo)T∂ro)T)F2=((∂(uo)T∂ro)Q−1(∂(so)T∂ro)T)F3=((∂(so)T∂ro)Q−1(∂(so)T∂ro)T)+Qs−1
存在站址误差下的TDOA定位CRLB表示为:
C
R
L
B
=
[
X
1
X
2
X
2
T
X
3
]
\boldsymbol{CRLB}= \begin{gathered} \begin{bmatrix} \boldsymbol{X}_1 & \boldsymbol{X}_2 \\ \boldsymbol{X}_2^T & \boldsymbol{X}_3 \end{bmatrix} \quad \end{gathered}
CRLB=[X1X2TX2X3]
其中:
C
R
L
B
(
u
o
)
=
X
1
=
(
F
1
−
F
2
F
3
−
1
F
2
T
)
−
1
=
F
1
−
1
+
F
1
−
1
F
2
(
F
3
−
F
2
T
F
1
−
1
F
2
)
−
1
F
2
T
F
1
−
1
\boldsymbol{CRLB}(\boldsymbol{u}^o)=\boldsymbol{X}_1 =\left(\boldsymbol{F}_1-\boldsymbol{F}_2\boldsymbol{F}_3^{-1}\boldsymbol{F}_2^T \right)^{-1} =\boldsymbol{F}_1^{-1}+\boldsymbol{F}_1^{-1}\boldsymbol{F}_2 \left(\boldsymbol{F}_3-\boldsymbol{F}_2^T\boldsymbol{F}_1^{-1}\boldsymbol{F}_2 \right)^{-1}\boldsymbol{F}_2^T\boldsymbol{F}_1^{-1}
CRLB(uo)=X1=(F1−F2F3−1F2T)−1=F1−1+F1−1F2(F3−F2TF1−1F2)−1F2TF1−1
C
R
L
B
(
s
o
)
=
X
3
=
(
F
3
−
F
2
F
1
−
1
F
2
T
)
−
1
=
F
3
−
1
+
F
3
−
1
F
2
(
F
1
−
F
2
T
F
3
−
1
F
2
)
−
1
F
2
T
F
3
−
1
\boldsymbol{CRLB}(\boldsymbol{s}^o)=\boldsymbol{X}_3 =\left(\boldsymbol{F}_3-\boldsymbol{F}_2\boldsymbol{F}_1^{-1}\boldsymbol{F}_2^T \right)^{-1} =\boldsymbol{F}_3^{-1}+\boldsymbol{F}_3^{-1}\boldsymbol{F}_2 \left(\boldsymbol{F}_1-\boldsymbol{F}_2^T\boldsymbol{F}_3^{-1}\boldsymbol{F}_2 \right)^{-1}\boldsymbol{F}_2^T\boldsymbol{F}_3^{-1}
CRLB(so)=X3=(F3−F2F1−1F2T)−1=F3−1+F3−1F2(F1−F2TF3−1F2)−1F2TF3−1
C
R
L
B
(
u
o
)
\boldsymbol{CRLB}(\boldsymbol{u}^o)
CRLB(uo) 表示目标估计的CRLB,
C
R
L
B
(
s
o
)
\boldsymbol{CRLB}(\boldsymbol{s}^o)
CRLB(so)表示观测站估计的CRLB。
matlab仿真
clc;
clear all;
close all;
%%
% 测向站数量
M=6;
% 目标数量
N=1;
% 光速m/s
c=3*10^8;
s1=[1500 -1900 1400].';
s2=[-1600 2000 1700].';
s3=[1800 -1500 -1600].';
s4=[-1200 1400 -2000].';
s5=[1700 1600 2000].';
s6=[-1800 -1400 -1800].';
% 目标位置
u1=[4000 4000 3000].';
S1=[0,1,0].';
S2=[1,0,0].';
S3=[0,0,1].';
%% 对目标位置的导数
% 时差对目标位置的导数
differ_t_u=zeros(M-1,3);
diff_s1_u1=u1-s1;
for i=2:M
% 组合字符串,得到接收站的变量名,以便循环
str_si=['s',mat2str(i)];
% 返回变量名对应的值
si_value=eval(str_si);
diff_si_u=u1-si_value;
differ_t_u(i-1,:)=diff_si_u.'/osjl(u1,si_value)-diff_s1_u1.'/osjl(u1,s1);
end
F_u=[differ_t_u];
%% 对观测站位置的导数
% 时差
differ_t_s=zeros(M-1,3*M);
diff_s1_u1=u1-s1;
for i=2:M
% 组合字符串,得到接收站的变量名,以便循环
str_si=['s',mat2str(i)];
% 返回变量名对应的值
si_value=eval(str_si);
diff_si_u=u1-si_value;
differ_t_s(i-1,1:3)=diff_s1_u1.'/osjl(u1,s1);
differ_t_s(i-1,3*(i-1)+1:3*(i-1)+3)=-diff_si_u.'/osjl(u1,si_value);
end
F_s=[differ_t_s];
%%
deta1_more=1:5:50;
for jjj=1:1:length(deta1_more)
deta_s=10;
Rs_a=deta_s^2*eye(3*M,3*M);
deta_r=deta1_more(jjj);
R_t_a=(deta_r)^2*(eye(M-1,M-1)+ones(M-1,M-1))/2;
Rn_a=blkdiag(R_t_a);
F1=F_u.'*inv(Rn_a)*F_u;
F2=F_u.'*inv(Rn_a)*F_s;
F3=F_s.'*inv(Rn_a)*F_s+inv(Rs_a);
CRLB_a=inv(F1-F2*inv(F3)*F2.');
crb_a(1,jjj)=(sqrt(trace(CRLB_a)));
CRLB_b=inv(F1);
crb_b(1,jjj)=sqrt(trace(CRLB_b));
end
figure
plot(deta1_more,crb_a,'b.-','MarkerSize',15)
hold on;
plot(deta1_more,crb_b,'r.-','MarkerSize',15)
xlabel('TDOA测量误差(m)')
ylabel('RMSE(m)')
% ylim([0 160])
legend('存在站址误差CRLB(TDOA)','不存在站址误差CRLB(TDOA)')
%%
function [distance]=osjl(object,source)
% 输入均为列向量
distance=sqrt(sum((object-source).^2));
end
clc;
clear all;
close all;
%%
% 测向站数量
M=6;
% 目标数量
N=1;
% 光速m/s
c=3*10^8;
s1=[1500 -1900 1400].';
s2=[-1600 2000 1700].';
s3=[1800 -1500 -1600].';
s4=[-1200 1400 -2000].';
s5=[1700 1600 2000].';
s6=[-1800 -1400 -1800].';
% 目标位置
u1=[4000 4000 3000].';
S1=[0,1,0].';
S2=[1,0,0].';
S3=[0,0,1].';
%% 对目标位置的导数
% 时差对目标位置的导数
differ_t_u=zeros(M-1,3);
diff_s1_u1=u1-s1;
for i=2:M
% 组合字符串,得到接收站的变量名,以便循环
str_si=['s',mat2str(i)];
% 返回变量名对应的值
si_value=eval(str_si);
diff_si_u=u1-si_value;
differ_t_u(i-1,:)=diff_si_u.'/osjl(u1,si_value)-diff_s1_u1.'/osjl(u1,s1);
end
F_u=[differ_t_u];
%% 对观测站位置的导数
% 时差
differ_t_s=zeros(M-1,3*M);
diff_s1_u1=u1-s1;
for i=2:M
% 组合字符串,得到接收站的变量名,以便循环
str_si=['s',mat2str(i)];
% 返回变量名对应的值
si_value=eval(str_si);
diff_si_u=u1-si_value;
differ_t_s(i-1,1:3)=diff_s1_u1.'/osjl(u1,s1);
differ_t_s(i-1,3*(i-1)+1:3*(i-1)+3)=-diff_si_u.'/osjl(u1,si_value);
end
F_s=[differ_t_s];
%%
deta1_more=1:5:50;
for jjj=1:1:length(deta1_more)
deta_s=deta1_more(jjj);
Rs_a=deta_s^2*eye(3*M,3*M);
deta_r=10;
R_t_a=(deta_r)^2*(eye(M-1,M-1)+ones(M-1,M-1))/2;
Rn_a=blkdiag(R_t_a);
F1=F_u.'*inv(Rn_a)*F_u;
F2=F_u.'*inv(Rn_a)*F_s;
F3=F_s.'*inv(Rn_a)*F_s+inv(Rs_a);
CRLB_a=inv(F1-F2*inv(F3)*F2.');
crb_a(1,jjj)=(sqrt(trace(CRLB_a)));
CRLB_b=inv(F1);
crb_b(1,jjj)=sqrt(trace(CRLB_b));
end
figure
plot(deta1_more,crb_a,'b.-','MarkerSize',15)
hold on;
plot(deta1_more,crb_b,'r.-','MarkerSize',15)
xlabel('TDOA测量误差(m)')
ylabel('RMSE(m)')
% ylim([0 160])
legend('存在站址误差CRLB(TDOA)','不存在站址误差CRLB(TDOA)')
%%
function [distance]=osjl(object,source)
% 输入均为列向量
distance=sqrt(sum((object-source).^2));
end