移动目标中基于两步加权最小二乘方法的TDOA/FDOA算法
2019年09月27日更新:近期有许多同学在程序运行时总是出现各种各样的问题,主要集中在原始TDOA和FDOA数据的生成、Bias和RMSE结果的计算、CRLB下界的计算三个方面。本次把这三个部分的代码以及结果绘制的代码上传,希望能对大家有所帮助!
无源定位技术是接收站本身不发射信号,而是通过被动接收目标发射或者反射的信号完成定位的一种技术,它被广泛应用于传感器网络、无线通信、麦克风阵列和声纳等领域。
对于静止目标,常见的定位体制是测量目标信号到达各观测站的到达时间差(Time Difference of Arrival, TDOA),并计算时差双曲线的交点以估计目标位置。当目标运动时,可同时利用TDOA和频差(Frequency Difference of Arrival, FDOA)观测量以估计目标位置和速度。
目前,对TDOA/FDOA定位定速的算法仍然在研究中,这里不进行太多的展开,仅介绍Dominic K.C. Ho教授于2004年提出了经典TDOA/FDOA算法——两步加权最小二乘算法(TSWLS:Two Stage/Step Constrained Weighted Least Squares Algorithm),目前提出的很多新的算法均将该算法作为对比方法之一
Dominic KC Ho 教授简介 ;Dominic KC Ho/Google Scholar
本文参考文献:Ho K C, Xu W. An accurate algebraic solution for moving source location using TDOA and FDOA measurements[J]. IEEE Transactions on Signal Processing, 2004, 52(9): 2453-2463.
TDOA/FDOA量测模型
设所跟踪的移动目标的位置和速度分别为
u
=
[
x
,
y
,
z
]
T
u = [x, y, z]^T
u=[x,y,z]T和
u
˙
=
[
x
˙
,
y
˙
,
z
˙
]
T
\dot{u}=[\dot{x}, \dot{y}, \dot{z}]^T
u˙=[x˙,y˙,z˙]T,假设一共有
M
M
M个传感器(或发射器,或基准站)的位置和速度分别为
s
i
=
[
x
i
,
y
i
,
z
i
]
T
s_i = [x_i, y_i, z_i]^T
si=[xi,yi,zi]T和
s
i
˙
=
[
x
i
˙
,
y
i
˙
,
z
i
˙
]
T
\dot{s_i}=[\dot{x_i}, \dot{y_i}, \dot{z_i}]^T
si˙=[xi˙,yi˙,zi˙]T,其中
i
=
1
,
2
,
.
.
.
,
M
i=1,2,...,M
i=1,2,...,M。假设第1个传感器作为基准,那么所测量的第
i
i
i个传感器与第1个传感器和移动目标之间的距离差值(Range Difference of Arrival, RDOA)可以表示为
r
i
,
1
=
d
i
−
d
1
+
n
i
,
1
.
.
.
.
.
.
.
(
1
)
r_{i,1}=d_i-d_1+n_{i,1}.......(1)
ri,1=di−d1+ni,1.......(1)其中,
d
i
=
∥
u
−
s
i
∥
2
=
(
x
−
x
i
)
2
+
(
y
−
y
i
)
2
+
(
z
−
z
i
)
2
d_i=\lVert u-s_i\rVert_2=\sqrt{\def\foo{(x-x_i)^2} \foo + \def\foo{(y-y_i)^2} \foo+\def\foo{(z-z_i)^2} \foo}
di=∥u−si∥2=(x−xi)2+(y−yi)2+(z−zi)2为第
i
i
i个传感器与移动目标之间的真实距离,
n
i
,
1
n_{i,1}
ni,1为第
i
i
i次RDOA测量的误差,假设该误差为零均值的高斯白噪声。
对公式(1)展开可以得到:
2
(
s
i
−
s
1
)
T
u
+
2
r
i
,
1
R
1
=
(
s
i
T
s
i
−
s
1
T
s
1
−
r
i
,
1
2
)
+
2
d
i
n
i
,
1
.
.
.
.
.
.
.
(
2
)
2(s_i-s_1)^Tu+2r_{i,1}R_1=({s_i}^Ts_i-{s_1}^Ts_1-{r_{i,1}}^2)+2d_in_{i,1}.......(2)
2(si−s1)Tu+2ri,1R1=(siTsi−s1Ts1−ri,12)+2dini,1.......(2)上式中,忽略掉误差的二阶项
n
i
,
1
2
{n_{i,1}}^2
ni,12。为了利用到FDOA信息,对式(2)进行时间求导可以得到:
2
(
s
i
˙
−
s
1
˙
)
T
u
+
2
(
s
i
−
s
1
)
T
u
˙
+
2
r
i
,
1
R
1
˙
+
2
r
˙
i
,
1
R
1
=
2
(
s
i
˙
T
s
i
−
s
1
˙
T
s
1
−
r
˙
i
,
1
r
i
,
1
)
+
2
d
i
n
i
,
1
˙
+
2
d
i
˙
n
i
,
1
.
.
.
.
.
.
.
(
3
)
\begin{matrix} 2(\dot{s_i}-\dot{s_1})^Tu+2(s_i-s_1)^T\dot{u}+2r_{i,1}\dot{R_1}+2\dot{r}_{i,1}R_1\\ =2(\dot{{s_i}}^Ts_i-\dot{{s_1}}^Ts_1-\dot{r}_{i,1}r_{i,1})+2d_i\dot{n_{i,1}}+2\dot{d_i}{n_{i,1}} \end{matrix}.......(3)
2(si˙−s1˙)Tu+2(si−s1)Tu˙+2ri,1R1˙+2r˙i,1R1=2(si˙Tsi−s1˙Ts1−r˙i,1ri,1)+2dini,1˙+2di˙ni,1.......(3)式(2)和式(3)中,
i
=
1
,
2
,
.
.
.
,
M
i=1,2,...,M
i=1,2,...,M。对第
i
i
i个传感器与移动目标之间的真实距离
d
i
=
∥
u
−
s
i
∥
2
d_i=\lVert u-s_i\rVert_2
di=∥u−si∥2进行时间求导可以得到:
d
i
˙
=
(
s
i
˙
−
s
1
˙
)
(
s
i
−
s
1
)
/
d
i
.
.
.
.
.
.
(
4
)
\dot{d_i}=(\dot{s_i}-\dot{s_1})(s_i-s_1)/d_i {......(4)}
di˙=(si˙−s1˙)(si−s1)/di......(4)实际应用中,能够得到
M
−
1
M-1
M−1个TDOA和FDOA信息为
T
d
=
[
t
2
,
1
,
t
3
,
1
,
.
.
.
,
t
M
,
1
]
T_d=[t_{2,1}, t_{3,1}, ..., t_{M,1}]
Td=[t2,1,t3,1,...,tM,1]和
F
d
=
[
f
2
,
1
,
f
3
,
1
,
.
.
.
,
f
M
,
1
]
F_d=[f_{2,1}, f_{3,1}, ..., f_{M,1}]
Fd=[f2,1,f3,1,...,fM,1],其RDOA及其变化率为
r
=
[
r
2
,
1
,
r
3
,
1
,
.
.
.
,
r
M
,
1
]
r=[r_{2,1}, r_{3,1}, ..., r_{M,1}]
r=[r2,1,r3,1,...,rM,1]和
r
˙
=
[
r
˙
2
,
1
,
r
˙
3
,
1
,
.
.
.
,
r
˙
M
,
1
]
\dot{r}=[\dot{r}_{2,1}, \dot{r}_{3,1}, ..., \dot{r}_{M,1}]
r˙=[r˙2,1,r˙3,1,...,r˙M,1]之间的关系可以表示为:
{
r
=
c
×
T
d
=
d
+
n
r
˙
=
c
×
F
d
/
f
0
=
d
˙
+
n
˙
\begin{cases} r=c×T_d = d + n\\ \dot{r}=c×F_d/f_0=\dot{d}+\dot{n} \end{cases}
{r=c×Td=d+nr˙=c×Fd/f0=d˙+n˙其中,
c
c
c为信号传输的速度,
n
=
[
n
2
,
1
,
n
3
,
1
,
.
.
.
,
n
M
,
1
]
n=[n_{2,1}, n_{3,1}, ..., n_{M,1}]
n=[n2,1,n3,1,...,nM,1]和
n
˙
=
[
n
˙
2
,
1
,
n
˙
3
,
1
,
.
.
.
,
n
˙
M
,
1
]
\dot{n}=[\dot{n}_{2,1}, \dot{n}_{3,1}, ..., \dot{n}_{M,1}]
n˙=[n˙2,1,n˙3,1,...,n˙M,1]分别为相关的噪声向量,并假设噪声为零均值的高斯白噪声,
f
0
f_0
f0为载波频率。
TSWLS算法
第一步估计:First Stage Progressing
对式(2)和式(3)进行合并之后可以得到: G 1 θ 1 − h 1 = ε 1 . . . . . . ( 5 ) G_1\theta_1-h_1=\varepsilon_1......(5) G1θ1−h1=ε1......(5)其中, θ 1 = [ u T , R 1 , u ˙ T , R 1 ˙ ] T 8 × 1 \theta_1 = {[u^T, R_1, \dot{u}^T, \dot{R_1}]^T}_{8×1} θ1=[uT,R1,u˙T,R1˙]T8×1, G 1 = [ ( s 2 − s 1 ) T r 2 , 1 0 1 × 3 0 . . . . . . . . . . . . ( s M − s 1 ) T r M , 1 0 1 × 3 0 ( s ˙ 2 − s ˙ 1 ) T r ˙ 2 , 1 ( s 2 − s 1 ) T r 2 , 1 . . . . . . . . . . . . ( s ˙ M − s ˙ 1 ) T r ˙ M , 1 ( s M − s 1 ) T r M , 1 ] ( 2 M − 2 ) × 8 G_1=\begin{bmatrix} (s_2-s_1)^T & r_{2,1} & 0_{1×3} & {0} \\ ... & ... & ... & ...\\ (s_M-s_1)^T & r_{M,1} & 0_{1×3} & {0}\\ (\dot{s}_2-\dot{s}_1)^T & \dot{r}_{2,1} & (s_2-s_1)^T & r_{2,1} \\ ... & ... & ... & ...\\ (\dot{s}_M-\dot{s}_1)^T & \dot{r}_{M,1} & (s_M-s_1)^T & r_{M,1}\\ \end{bmatrix}_{(2M-2)×8} G1=⎣⎢⎢⎢⎢⎢⎢⎡(s2−s1)T...(sM−s1)T(s˙2−s˙1)T...(s˙M−s˙1)Tr2,1...rM,1r˙2,1...r˙M,101×3...01×3(s2−s1)T...(sM−s1)T0...0r2,1...rM,1⎦⎥⎥⎥⎥⎥⎥⎤(2M−2)×8 h 1 = [ s 2 T s 2 − s 1 T s 1 − r 2 , 1 2 . . . s M T s M − s 1 T s 1 − r M , 1 2 2 ( s ˙ 2 T s 2 − s ˙ 1 T s 1 − r ˙ 2 , 1 r 2 , 1 ) . . . 2 ( s ˙ M T s M − s ˙ 1 T s 1 − r ˙ M , 1 r M , 1 ) ] ( 2 M − 2 ) × 1 h_1=\begin{bmatrix} {s_2}^Ts_2-{s_1}^Ts_1-{r_{2,1}}^2 \\ ... \\ {s_M}^Ts_M-{s_1}^Ts_1-{r_{M,1}}^2\\ {2(\dot{s}_2}^Ts_2-{\dot{s}_1}^Ts_1-\dot{r}_{2,1}r_{2,1}) \\ ... \\ 2( {\dot{s}_M}^Ts_M-{\dot{s}_1}^Ts_1-\dot{r}_{M,1}r_{M,1})\\ \end{bmatrix}_{(2M-2)×1} h1=⎣⎢⎢⎢⎢⎢⎢⎡s2Ts2−s1Ts1−r2,12...sMTsM−s1Ts1−rM,122(s˙2Ts2−s˙1Ts1−r˙2,1r2,1)...2(s˙MTsM−s˙1Ts1−r˙M,1rM,1)⎦⎥⎥⎥⎥⎥⎥⎤(2M−2)×1 ε 1 = B 1 Δ η = [ B 0 ( M − 1 ) × ( M − 1 ) B ˙ B ] Δ η , Δ η = [ n n ˙ ] \varepsilon_1 =B_1Δη= \begin{bmatrix} B & 0_{(M-1)×(M-1)} \\ \dot{B} & B \end{bmatrix}\Delta\eta, \Delta\eta=\begin{bmatrix} n \\ \dot{n} \end{bmatrix} ε1=B1Δη=[BB˙0(M−1)×(M−1)B]Δη,Δη=[nn˙] B = 2 × d i a g ( [ d 2 , d 3 , . . . , d M ] ) , B ˙ = 2 × d i a g ( [ d ˙ 2 , d ˙ 3 , . . . , d ˙ M ] ) B= 2×diag([d_2, d_3, ..., d_M]),\dot{B}= 2×diag([\dot{d}_2, \dot{d}_3, ..., \dot{d}_M]) B=2×diag([d2,d3,...,dM]),B˙=2×diag([d˙2,d˙3,...,d˙M])公式(5)的加权最小二乘(WLS)的估计结果为: θ 1 = ( G 1 T W 1 G 1 ) − 1 G 1 T W 1 h 1 . . . . . . ( 6 ) \theta_1=(G_1^TW_1G_1)^{-1}G_1^TW_1h_1......(6) θ1=(G1TW1G1)−1G1TW1h1......(6)式中, W 1 = ( B 1 Q − 1 B 1 T ) − 1 W_1=(B_1Q^{-1}B_1^T)^{-1} W1=(B1Q−1B1T)−1, Q Q Q为量测噪声 Δ η \Delta\eta Δη的协方差矩阵。 c o v ( θ 1 ) = ( G 1 T W 1 G 1 ) − 1 . . . . . . ( 7 ) cov(\theta_1)=(G_1^TW_1G_1)^{-1}......(7) cov(θ1)=(G1TW1G1)−1......(7)
第二步估计:Second Stage Progressing
在TDOA和FDOA算法中,存在两个约束条件:
(
u
−
s
1
)
T
(
u
−
s
1
)
=
R
1
2
.
.
.
.
.
.
(
8
)
(
u
˙
−
s
˙
1
)
T
(
u
−
s
1
)
=
R
˙
1
R
1
.
.
.
.
.
.
(
9
)
(u-s_1)^T(u-s_1)=R_1^2......(8) \\ (\dot{u}-\dot{s}_1)^T(u-s_1)=\dot{R}_1R_1......(9)
(u−s1)T(u−s1)=R12......(8)(u˙−s˙1)T(u−s1)=R˙1R1......(9)根据式(8)和式(9)可以得到新的约束模型,即:
G
2
θ
2
−
h
2
=
ε
2
.
.
.
.
.
.
(
10
)
G_2\theta_2-h_2=\varepsilon_2......(10)
G2θ2−h2=ε2......(10)式中,令
θ
1
,
u
=
[
θ
1
(
1
)
,
θ
1
(
2
)
,
θ
1
(
3
)
]
T
\theta_{1,u}=[\theta_1(1), \theta_1(2), \theta_1(3)]^T
θ1,u=[θ1(1),θ1(2),θ1(3)]T,
θ
1
,
u
˙
=
[
θ
1
(
5
)
,
θ
1
(
6
)
,
θ
1
(
7
)
]
T
\theta_{1,\dot{u}}=[\theta_1(5), \theta_1(6), \theta_1(7)]^T
θ1,u˙=[θ1(5),θ1(6),θ1(7)]T,且有:
G
2
=
[
I
3
×
3
0
3
×
3
1
1
×
3
0
1
×
3
0
3
×
3
I
3
×
3
0
1
×
3
1
1
×
3
]
,
h
2
=
[
(
θ
1
,
u
−
s
1
)
⊙
(
θ
1
,
u
−
s
1
)
θ
1
(
4
)
2
(
θ
1
,
u
˙
−
s
1
)
⊙
(
θ
1
,
u
−
s
1
)
θ
1
(
8
)
θ
1
(
4
)
]
G_2 = \begin{bmatrix} I_{3×3} & 0_{3×3}\\ 1_{1×3} & 0_{1×3}\\ 0_{3×3} & I_{3×3}\\ 0_{1×3} & 1_{1×3}\\ \end{bmatrix}, h_2 = \begin{bmatrix} (\theta_{1,u}-s_1)\odot(\theta_{1,u}-s_1)\\ \theta_1(4)^2\\ (\theta_{1,\dot{u}}-s_1)\odot(\theta_{1,u}-s_1)\\ \theta_1(8)\theta_1(4)\\ \end{bmatrix}
G2=⎣⎢⎢⎡I3×311×303×301×303×301×3I3×311×3⎦⎥⎥⎤,h2=⎣⎢⎢⎡(θ1,u−s1)⊙(θ1,u−s1)θ1(4)2(θ1,u˙−s1)⊙(θ1,u−s1)θ1(8)θ1(4)⎦⎥⎥⎤
θ
2
=
[
(
u
−
s
1
)
⊙
(
u
−
s
1
)
(
u
˙
−
s
1
)
⊙
(
u
−
s
1
)
]
\theta_2 = \begin{bmatrix} (u-s_1)\odot(u-s_1)\\ (\dot{u}-s_1)\odot(u-s_1)\\ \end{bmatrix}
θ2=[(u−s1)⊙(u−s1)(u˙−s1)⊙(u−s1)]式中,
I
3
×
3
I_{3×3}
I3×3为3×3的单位矩阵,
0
3
×
3
0_{3×3}
03×3为3×3的零矩阵,
1
1
×
3
1_{1×3}
11×3为1×3的全为1的矩阵,
0
1
×
3
0_{1×3}
01×3为1×3的全为0的矩阵,
⊙
\odot
⊙为运算符(表示两个向量元素和元素乘积,等同于矩阵的点乘)。
公式(10)的加权最小二乘(WLS)最优估计结果为:
θ
2
=
(
G
2
T
W
2
G
2
)
−
1
G
2
T
W
2
h
2
.
.
.
.
.
.
(
11
)
\theta_2=(G_2^TW_2G_2)^{-1}G_2^TW_2h_2......(11)
θ2=(G2TW2G2)−1G2TW2h2......(11)其中,
W
2
=
(
B
2
c
o
v
(
θ
1
)
B
2
T
)
−
1
W_2=(B_2cov(\theta_1)B_2^T)^{-1}
W2=(B2cov(θ1)B2T)−1,且有:
B
2
=
[
2
d
i
a
g
(
u
−
s
1
)
0
0
3
×
3
0
0
1
×
3
2
R
1
0
1
×
3
0
d
i
a
g
(
u
˙
−
s
˙
1
)
0
d
i
a
g
(
u
−
s
1
)
0
3
×
1
0
1
×
3
R
1
0
1
×
3
R
˙
1
]
B_2=\begin{bmatrix} 2diag(u-s_1) & 0 & 0_{3×3} & {0} \\ 0_{1×3} & 2R_1 & 0_{1×3} & {0}\\ diag(\dot{u}-\dot{s}_1) & 0 & diag(u-s_1) & 0_{3×1} \\ 0_{1×3} & R_1 & 0_{1×3} & \dot{R}_1\\ \end{bmatrix}
B2=⎣⎢⎢⎡2diag(u−s1)01×3diag(u˙−s˙1)01×302R10R103×301×3diag(u−s1)01×30003×1R˙1⎦⎥⎥⎤对
θ
2
\theta_2
θ2进行估计之后,通过下来公式可以计算移动目标出更优的位置和速度信息:
u
=
U
[
θ
2
(
1
)
,
θ
2
(
2
)
,
θ
2
(
3
)
]
T
+
s
1
.
.
.
.
.
.
(
12
)
u
˙
=
U
[
θ
2
(
4
)
θ
2
(
1
)
,
θ
2
(
5
)
θ
2
(
2
)
,
θ
2
(
6
)
θ
2
(
3
)
]
T
+
s
˙
1
.
.
.
.
.
.
(
13
)
u=U[\sqrt{\theta_2(1)}, \sqrt{\theta_2(2)}, \sqrt{\theta_2(3)}]^T+s_1......(12) \\ \dot{u}=U[\dfrac{\theta_2(4) }{\sqrt{\theta_2(1)}}, \dfrac{\theta_2(5) }{\sqrt{\theta_2(2)}}, \dfrac{\theta_2(6) }{\sqrt{\theta_2(3)}}]^T+\dot{s}_1......(13)
u=U[θ2(1),θ2(2),θ2(3)]T+s1......(12)u˙=U[θ2(1)θ2(4),θ2(2)θ2(5),θ2(3)θ2(6)]T+s˙1......(13)式中,
U
=
d
i
a
g
(
s
g
n
(
θ
1
,
u
−
s
1
)
)
U = diag(sgn(\theta_{1,u}-s_1))
U=diag(sgn(θ1,u−s1)),
s
g
n
sgn
sgn为正负号判别函数。
综上所述,一直重复迭代计算第一步和第二步,直到两次估计的差值小于预先给定的阈值或者迭代次数足够,则停止迭代并得到最终的最优估计值。下图给出了TSWLS算法的整体流程:
MATLAB程序实现
程序核心函数
function Xk = TwoStepWLS_TDOA_FDOA(Tange, Fange, Base, Noise)
% Ref://Ho K C , Xu W . An accurate algebraic solution for
% //moving source location using TDOA and FDOA measurements[J].
% //IEEE Transactions on Signal Processing, 2004, 52(9):2453-2463.
M = size(Base,1)-1; N = size(Base,2)/2;
%% TDOA&FDOA MODEL(G1 & H1)
G1 = zeros(2*M,2*N+2); H1 = zeros(2*M,1);
S1 = Base(1, 1:3); R1 = Base(1, 4:6);
for k = 1: M
S2 = Base(k+1, 1:N); R2 = Base(k+1, N+1:end);
G1(k,:) = 2*[S2-S1, Tange(k), zeros(1,N+1)];
G1(k+M,:) = 2*[R2-R1, Fange(k), S2-S1, Tange(k)];
H1(k,1) = (S2*S2' - S1*S1' - Tange(k)*Tange(k));
H1(k+M,1) = 2*(R2*S2' - R1*S1' - Fange(k)*Tange(k));
end
W1 = inv(Noise);
Xk1 = inv(G1'*W1*G1)*G1'*W1*H1;
clear S1 R1 S2 R2 k Tange Fange W1;
%% First Stage Processing
Times1 = 1;
while Times1 <= 4
B1 = zeros(M,1); B2 = zeros(M,1);
for k = 1: M
S2 = Xk1(1:N,1) - Base(k+1,1:N)';
U2 = Xk1(N+2:end-1,1) - Base(k+1,N+1:end)';
B1(k,1) = 2*norm(S2,2);
B2(k,1) = 2*S2'*U2/norm(S2,2);
end
Bk = [diag(B1), zeros(M,M); diag(B2), diag(B1)];
W1 = inv(Bk*Noise*Bk');
Xk1 = inv(G1'*W1*G1)*G1'*W1*H1;
Times1 = Times1 + 1;
end
Cov1 = inv(G1'*W1*G1);
clear Noise B1 B2 k S2 U2 B1 B2 Bk Times1 W1 G1 H1;
%% Second Stage Processing
U1 = Xk1(1:N); U2 = Xk1(N+2:2*N+1);
H2 = [(U1-Base(1,1:N)').^2; Xk1(N+1)^2;...
(U2-Base(1,N+1:end)').*(U1-Base(1,1:N)'); Xk1(N+1)*Xk1(end)];
G2 = [eye(N), zeros(N); ones(1,N), zeros(1,N);...
zeros(N), eye(N); zeros(1,N), ones(1,N)];
Times2 = 1;
while Times2 <= 3
Bt = diag([U1-Base(1,1:N)'; norm(U1-Base(1,1:N)', 2)]);
Btd = diag([U2-Base(1,N+1:end)';...
(U2-Base(1,N+1:end)')'*(U1-Base(1,1:N)')/norm(U1-Base(1,1:N)', 2)]);
B2 = [2*Bt, zeros(N+1); Btd, Bt];
W2 = inv(B2*Cov1*B2');
Xk2 = inv(G2'*W2*G2)*G2'*W2*H2;
U1 = diag(sign(U1-Base(1,1:N)'))*sqrt(abs(Xk2(1:N,1))) + Base(1,1:N)';
U2 = Xk2(N+1:end,1)./(U1-Base(1,1:N)') + Base(1,N+1:end)';
Times2 = Times2 + 1;
end
clear Xk1 Base M N H2 G2 Times2 Bt Btd B2 W2 Cov1 Xk2;
Xk = [U1; U2];
end
程序运行主函数
function Result = MainTwoStepWLS(TRange, FRange, Base, sig)
M = size(Base,1) - 1;
R = eye(M, M);
Noise = sig*[R, zeros(M); zeros(M), 0.1*R];
Result = zeros(size(TRange,1),size(Base,2)+1);
Result(:,1) = TRange(:,1);
for i = 1: size(Result,1)
Tange = TRange(i,2:end);
Fange = FRange(i,2:end);
Xk = TwoStepWLS_TDOA_FDOA(Tange, Fange, Base, Noise);
Result(i,2:end) = Xk';
end
end
克劳美罗下界CRLB的计算函数
function Ref = CRLB_TDOA_FDOA(True, Base, sig)
% Ref://Ho K C , Xu W . An accurate algebraic solution for
% //moving source location using TDOA and FDOA measurements[J].
% //IEEE Transactions on Signal Processing, 2004, 52(9):2453-2463.
% Copyright by Liu Tao. GNSS Research Center of Wuhan University. 27/11/2018.
M = size(Base,1) - 1; N = size(Base,2)/2;
US1 = True(1,1:N) - Base(1,1:N);
UR1 = True(1,N+1:end) - Base(1,N+1:end);
R1 = norm(US1, 2); Pus1 = US1/R1; ER1 = Pus1*UR1';
Q1 = zeros(M,N); Q2 = zeros(M,N); Q3 = zeros(M,N);
for k = 1: M
US2 = True(1,1:N) - Base(k+1, 1:N);
UR2 = True(1,N+1:end) - Base(k+1, N+1:end);
R2 = norm(US2,2); Pus2 = US2/R2; ER2 = Pus2*UR2';
Q1(k,:) = Pus2 - Pus1;
Q3(k,:) = Pus2*ER2/R2 - Pus1*ER1/R1 - UR2/R2 + UR1/R1;
end
Qk = [Q1, Q2; Q3, Q1];
RR = eye(M,M); % 0.5*ones(M, M) + 0.5*eye(M, M);
Noise = sig*[RR, zeros(M); zeros(M), 0.1*RR];
CRLB = inv(Qk'/Noise*Qk);
Ref = zeros(2,1);
for j = 1:N
Ref(1) = Ref(1) + CRLB(j,j);
Ref(2) = Ref(2) + CRLB(j+N,j+N);
end
Ref = sqrt(Ref);
end
仿真实验分析
设置目标的真实位置为
[
285
,
325
,
275
]
T
[285, 325, 275]^T
[285,325,275]T,真实的速度为
[
−
20
,
15
,
40
]
T
[-20, 15, 40]^T
[−20,15,40]T,设置5个传感器的位置和坐标分别如下图所示:
进行10000次模特卡罗仿真,为TDOA量测值和FDOA量测值添加零均值的高斯白噪声,其中TDOA的噪声的方差水平
10
l
o
g
(
c
2
σ
d
2
)
10log(c^2\sigma^2_d)
10log(c2σd2)设置为-20到20,FDOA的噪声的方差为TDOA方差的0.1倍,利用均方根误差RMSE和偏差Bias进行性能分析。
原始数据(TDOA、FDOA)的生成函数
function [TRange, FRange, Base, Source, sig] = SimuTDOA_FDOAData(sig)
% sig为TDOA测量值的噪声的方差
% TRange为TDOA测量值
% FRange为FDOA测量值
% Base为基准站(传感器)的坐标
% Source为真实的目标点的坐标
Base1 = [300, 100, 150, 30, -20, 20];
Base2 = [400, 150, 100, -30, 10, 20];
Base3 = [300, 500, 200, 10, -20, 10];
Base4 = [350, 200, 100, 10, 20, 30];
Base5 = [-100, -100, -100, -20, 10, 10];
Base = [Base1; Base2; Base3; Base4; Base5];
Time = (0.1:0.1:1000)';
Source = [285, 325, 275, -20, 15, 40];
TRange = zeros(size(Time,1), size(Base,1));
TRange(:,1) = Time(:,1); FRange = TRange;
for i = 1: size(Time,1)
VAR1 = Source(1,1:3) - Base(1,1:3);
VAR2 = Source(1,4:6) - Base(1,4:6);
D1 = norm(VAR1, 2); R1 = VAR2*VAR1'/D1;
for j = 1: size(Base,1)-1
VEC1 = Source(1,1:3) - Base(j+1,1:3);
VEC2 = Source(1,4:6) - Base(j+1,4:6);
D2 = norm(VEC1, 2); R2 = VEC2*VEC1'/D2;
TRange(i,j+1) = D2 - D1;
FRange(i,j+1) = R2 - R1;
end
end
for k = 1: size(TRange,2)
TRange(:,k) = TRange(:,k) + normrnd(0, sqrt(sig), size(TRange,1), 1);
FRange(:,k) = FRange(:,k) + normrnd(0, sqrt(0.1*sig), size(FRange,1), 1);
end
end
仿真结果计算和实验分析
function [Bias, RMSE, Ref] = TSWLSResultAnalysis()
close all;clear;clc;
va = (-20:2:20)';
RMSE = zeros(size(va,1),2);
Bias = zeros(size(va,1),2);
Ref = zeros(size(va,1), 2);
for i = 1: size(va,1)
sig = 10^(va(i)/10); % Variance of TDOA & FDOA
[TRange, FRange, Base, Source, sig] = SimuTDOA_FDOAData(sig);
CRLB = CRLB_TDOA_FDOA(Source, Base, sig);
Ref(i,1) = CRLB(1); Ref(i,2) = CRLB(2);
Result = MainTwoStepWLS(TRange, FRange, Base, sig);
[B1, R1] = CalculateBiasRMS(Result, Source);
Bias(i,:) = B1'; RMSE(i,:) = R1';
end
figure();subplot(2,1,1);plot(va, Bias(:,1),'k->','LineWidth',1,'MarkerSize',5,'MarkerFaceColor','k');hold on;
xlabel('10log(\sigma_d^2(m^2))');ylabel('Norm Of Position Bias(m)');
title('Bias of TSWLS for TDOA & FDOA');
subplot(2,1,2);plot(va, Bias(:,2),'k->','LineWidth',1,'MarkerSize',5,'MarkerFaceColor','k');hold on;
xlabel('10log(\sigma_d^2(m^2))');ylabel('Norm Of Velocity Bias(m/s)');
figure();semilogy(va, Ref(:,1),'r->','LineWidth',1,'MarkerSize',5,'MarkerFaceColor','r');hold on;
semilogy(va, RMSE(:,1),'k->','LineWidth',1,'MarkerSize',5,'MarkerFaceColor','k');hold on;
xlabel('10log(\sigma_d^2(m^2))');ylabel('Position RMSE(m)');
legend('CRLB','TSWLS');
figure();semilogy(va, Ref(:,2),'r->','LineWidth',1,'MarkerSize',5,'MarkerFaceColor','r');hold on;
semilogy(va, RMSE(:,2),'k->','LineWidth',1,'MarkerSize',5,'MarkerFaceColor','k');hold on;
xlabel('10log(\sigma_d^2(m^2))');ylabel('Velocity RMSE(m/s)');
legend('CRLB','TSWLS');
end
function [Bias, RMSE] = CalculateBiasRMS(Result,True)
Bias = zeros(2,1); RMSE = Bias;
s1 = zeros(1,6); s2 = 0; s3 = 0;
for i = 1: size(Result,1)
s1 = s1 + Result(i, 2:7);
VEC1 = Result(i,2:4) - True(1,1:3);
VEC2 = Result(i,5:7) - True(1,4:6);
s2 = s2 + VEC1(1)^2 + VEC1(2)^2 + VEC1(3)^2;
s3 = s3 + VEC2(1)^2 + VEC2(2)^2 + VEC2(3)^2;
end
s1 = s1/size(Result,1); VAR = s1 - True;
s2 = s2/size(Result,1); s3 = s3/size(Result,1);
Bias(1) = sqrt(VAR(1)^2 + VAR(2)^2 + VAR(3)^2);
Bias(2) = sqrt(VAR(4)^2 + VAR(5)^2 + VAR(6)^2);
RMSE(1) = sqrt(s2); RMSE(2) = sqrt(s3);
end
将上述5个函数文件(.m)放在一个文件夹,在MATLAB窗口中直接运行如下命令即可得到运行后的结果(注: 由于原始数据为随机的,噪声较大时可能会出现矩阵病态的提示):
[Bias, RMSE, Ref] = TSWLSResultAnalysis();
下面两个图分别给出了TSWLS算法的Bias误差结果以及TSWLS算法的RMSE误差与CRLB下界比较的结果。
TSWLS的均方根误差与CRLB下界的比较
更多的细节可以参见开头的参考文献【完】
更多资料
关于TDOA/FDOA最优算法的研究,可以参考以下三篇文献,也可以去Google Scholar 、ScienceDirect、IEEE Xplore Digital Library、CNKI上查看最新的研究进展和研究成果。
文献1:Yu H, Huang G, Gao J, et al. An efficient constrained weighted least squares algorithm for mov ing source location using TDOA and FDOA measurements[J]. IEEE transactions on wireless communications, 2012, 11(1): 44-47.
文献2:Qu X, Xie L, Tan W. Iterative constrained weighted least squares source localization using TDOA and FDOA measurements[J]. IEEE Transactions on Signal Processing, 2017, 65(15): 3990-4003.
文献3:Noroozi A, Oveis A H, Hosseini S M R, et al. Improved Algebraic Solution for Source Localization From TDOA and FDOA Measurements[J]. IEEE Wireless Communications Letters, 2018, 7(3): 352-355.