利用MATLAB实现移动目标的TDOA/FDOA定位算法

移动目标中基于两步加权最小二乘方法的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=did1+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=usi2=(xxi)2+(yyi)2+(zzi)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(sis1)Tu+2ri,1R1=(siTsis1Ts1ri,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(sis1)Tu˙+2ri,1R1˙+2r˙i,1R1=2(si˙Tsis1˙Ts1r˙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=usi2进行时间求导可以得到: 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˙)(sis1)/di......(4)实际应用中,能够得到 M − 1 M-1 M1个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θ1h1=ε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=(s2s1)T...(sMs1)T(s˙2s˙1)T...(s˙Ms˙1)Tr2,1...rM,1r˙2,1...r˙M,101×3...01×3(s2s1)T...(sMs1)T0...0r2,1...rM,1(2M2)×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=s2Ts2s1Ts1r2,12...sMTsMs1Ts1rM,122(s˙2Ts2s˙1Ts1r˙2,1r2,1)...2(s˙MTsMs˙1Ts1r˙M,1rM,1)(2M2)×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(M1)×(M1)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=(B1Q1B1T)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) (us1)T(us1)=R12......(8)(u˙s˙1)T(us1)=R˙1R1......(9)根据式(8)和式(9)可以得到新的约束模型,即:
G 2 θ 2 − h 2 = ε 2 . . . . . . ( 10 ) G_2\theta_2-h_2=\varepsilon_2......(10) G2θ2h2=ε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×3h2=(θ1,us1)(θ1,us1)θ1(4)2(θ1,u˙s1)(θ1,us1)θ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=[(us1)(us1)(u˙s1)(us1)]式中, 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(us1)01×3diag(u˙s˙1)01×302R10R103×301×3diag(us1)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,us1)) s g n sgn sgn为正负号判别函数。

综上所述,一直重复迭代计算第一步和第二步,直到两次估计的差值小于预先给定的阈值或者迭代次数足够,则停止迭代并得到最终的最优估计值。下图给出了TSWLS算法的整体流程:TSWLS Algorithm

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个传感器的位置和坐标分别如下图所示:Sensors
进行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下界比较的结果。
Bias
TSWLS的均方根误差与CRLB下界的比较RMSE

更多的细节可以参见开头的参考文献【完】

更多资料

关于TDOA/FDOA最优算法的研究,可以参考以下三篇文献,也可以去Google ScholarScienceDirectIEEE Xplore Digital LibraryCNKI上查看最新的研究进展和研究成果。
文献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.

  • 89
    点赞
  • 540
    收藏
    觉得还不错? 一键收藏
  • 96
    评论
评论 96
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值