DOA/TDOA混合定位CRLB

DOA/TDOA混合观测模型

利用M个观测站进行定位
假设第i个观测站的坐标向量为:   s i o = [ s i x o , s i y o , s i z o ] T \ \boldsymbol s^o _i =[s^o_{ix},s^o_{iy},s^o_{iz}]^T  sio=[sixo,siyo,sizo]T ,目标的位置向量为:   u o = [ u x o , u y o , u z o ] T \ \boldsymbol u^o =[u^o_{x},u^o_{y},u^o_{z}]^T  uo=[uxo,uyo,uzo]T 。因此,方位角、仰角和TDOA观测量为:
θ i o = a r c t a n ( u y o − s i , y o u x o − s i , x o ) , 1 ≤ i ≤ M \theta^o_i =arctan \left( \frac{u^o_{y}-s^o_{i,y}} {{u^o_{x}-s^o_{i,x}}} \right),1\leq i \leq M θio=arctan(uxosi,xouyosi,yo),1iM
ϕ i o = a r c t a n ( u z o − s i , z o ( u x o − s i , x o ) 2 + ( u y o − s i , y o ) 2 ) ) , 1 ≤ i ≤ M \phi ^o_i =arctan \left( \frac{u^o_{z}-s^o_{i,z}} {\sqrt{(u^o_{x}-s^o_{i,x})^2+(u^o_{y}-s^o_{i,y})^2}} ) \right),1\leq i \leq M ϕio=arctan (uxosi,xo)2+(uyosi,yo)2 uzosi,zo) ,1iM
τ 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∣∣uosjo2c∣∣uos1o2,2jM
其中 θ i o \theta^o_i θio ϕ i o \phi ^o_i ϕio分别表示目标到达第i个观测站的方位角和仰角的真实值, τ j 1 o \tau_{j1}^o τj1o表示目标到达参考观测站和第j个观测站的时差真实值。由于在实际中我们仅能够获得带有测量噪声的测量值,因此建立如下观测模型:
θ = θ o + n 1 = [ θ 1 o , θ 2 o , . . . , θ M o ] T + [ δ θ 1 , δ θ 2 , . . . , δ θ M ] T \boldsymbol \theta =\boldsymbol \theta^o+\boldsymbol n_1=[\theta^o_1,\theta^o_2,...,\theta^o_M]^T+[\delta \theta_1,\delta \theta_2,...,\delta \theta_M]^T θ=θo+n1=[θ1o,θ2o,...,θMo]T+[δθ1,δθ2,...,δθM]T
ϕ = ϕ o + n 2 = [ ϕ 1 o , ϕ 2 o , . . . , ϕ M o ] T + [ δ ϕ 1 , δ ϕ 2 , . . . , δ ϕ M ] T \boldsymbol \phi =\boldsymbol \phi^o+\boldsymbol n_2 =[\phi ^o_1,\phi ^o_2,...,\phi ^o_M]^T+[\delta \phi _1,\delta \phi _2,...,\delta \phi _M]^T ϕ=ϕo+n2=[ϕ1o,ϕ2o,...,ϕMo]T+[δϕ1,δϕ2,...,δϕM]T
r = r o + n 3 = [ 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}_{3} =[r_{21}^o,r_{31}^o,...,r_{M1}^o]^T +[\delta{r_{21}},\delta{r_{31}},...,\delta{r_{M1}}]^T r=ro+n3=[r21o,r31o,...,rM1o]T+[δr21,δr31,...,δrM1]T
其中 n 1 \boldsymbol n_1 n1 n 2 \boldsymbol n_2 n2 n 3 \boldsymbol n_3 n3的协方差矩阵分别为 Q 1 \boldsymbol{Q}_1 Q1 Q 2 \boldsymbol{Q}_2 Q2 Q 3 \boldsymbol{Q}_3 Q3
因此可以得到DOA/TDOA混合观测向量为:
z = z o + n = [ ( θ o ) T , ( ϕ o ) T , ( r o ) T ] T + [ n 1 T , n 2 T , n 3 T ] T \boldsymbol z =\boldsymbol z^o+\boldsymbol n=[(\boldsymbol \theta^o)^T,(\boldsymbol \phi^o)^T,(\boldsymbol{r^o})^T]^T+[\boldsymbol n^T_1,\boldsymbol n^T_2,\boldsymbol n^T_3]^T z=zo+n=[(θo)T,(ϕo)T,(ro)T]T+[n1T,n2T,n3T]T
其中 n \boldsymbol{n} n的协方差矩阵为: Q = b l k d i a g ( Q 1 , Q 2 , Q 3 ) \boldsymbol{Q}=blkdiag({\boldsymbol{Q}_1,\boldsymbol{Q}_2,\boldsymbol{Q}_3}) Q=blkdiag(Q1,Q2,Q3)

DOA/TDOA混合定位CRLB

位置参数向量为   u o = [ u x o , u y o , u z o ] T \ \boldsymbol u^o =[u^o_{x},u^o_{y},u^o_{z}]^T  uo=[uxo,uyo,uzo]T,测量向量为 z \boldsymbol z z。因此 z \boldsymbol z z关于   u o \ \boldsymbol u^o  uo的对数似然函数为:
l n ( p ( z ∣ u o ) ) = κ − ( 1 / 2 ) ( z − z o ) T Q − 1 ( z − z o ) ln(p(\boldsymbol z|\boldsymbol u^o))=\kappa-(1/2)(\boldsymbol z-\boldsymbol z^o)^T\boldsymbol Q^{-1}(\boldsymbol z-\boldsymbol z^o) ln(p(zuo))=κ(1/2)(zzo)TQ1(zzo)
其中 κ \kappa κ表示常数项
因此,Fisher信息矩阵可以表示为:
F = E ( ( ∂ l n ( p ( z ∣ u o ) ) ∂ ( u o ) T ) ( ∂ l n ( p ( z ∣ u o ) ) ∂ ( u o ) T ) T ) = ( ∂ z o ∂ ( u o ) T ) Q − 1 ( ∂ z o ∂ ( u o ) T ) T F=E \left( \left( \frac {\partial ln(p(\boldsymbol z|\boldsymbol u^o))}{\partial (\boldsymbol u^o)^T} \right) \left( \frac {\partial ln(p(\boldsymbol z|\boldsymbol u^o))}{\partial (\boldsymbol u^o)^T} \right)^T \right)= \left( \frac {\partial \boldsymbol z^o}{\partial (\boldsymbol u^o)^T} \right) \boldsymbol Q^{-1} \left( \frac {\partial \boldsymbol z^o}{\partial (\boldsymbol u^o)^T} \right)^T F=E(((uo)Tln(p(zuo)))((uo)Tln(p(zuo)))T)=((uo)Tzo)Q1((uo)Tzo)T
CRLB为Fisher矩阵的逆,因此CRLB表示为:
C R L B = ( ( ∂ z o ∂ ( u o ) T ) Q − 1 ( ∂ z o ∂ ( u o ) T ) T ) − 1 CRLB=\left( \left( \frac {\partial \boldsymbol z^o}{\partial (\boldsymbol u^o)^T} \right) \boldsymbol Q^{-1} \left( \frac {\partial \boldsymbol z^o}{\partial (\boldsymbol u^o)^T} \right)^T \right)^{-1} CRLB=(((uo)Tzo)Q1((uo)Tzo)T)1

matlab仿真

clc;
close all;
clear all;
% 测向站数量
M=6;
% 目标数量
N=1;
%观测站位置
s1=[1500 -1900 1400].';
s2=[-1600 2000 1700].';
s3=[1800 -1500 -1600].';
s4=[-1200 1400 -2000].';
s5=[1700 1600 2000].';
s6=[-1800 -1400 -1800].';
for i=1:1:M
    str_si=['s',mat2str(i)];
    si_value=eval(str_si);
    s_true(3*(i-1)+1:3*(i-1)+3,1)=si_value;
end
% 目标位置
u1=[4000 4000 3000].';
for i=1:1:N
    str_ui=['u',mat2str(i)];
    ui_value=eval(str_ui);
    u_true(3*(i-1)+1:3*(i-1)+3,1)=ui_value;
end
%%
angle_noise_power_more=[0.1:0.1:1].*pi/180;
r_noise_power=5;
%% CRLB
for i=1:1:M
    eval(['s',mat2str(i),'(:,1)',' = ','s_true(3*(i-1)+1:3*(i-1)+3,1)',';']);
end
for i=1:1:N
    eval(['u',mat2str(i),'(:,1)',' = ','u_true(3*(i-1)+1:3*(i-1)+3,1)',';']);
end
%%     对目标位置的导数
% 方位角、仰角对目标位置的导数
diff_theta_ui=zeros(M,3,N);
diff_beta_ui=zeros(M,3,N);
% 距离差对目标位置的导数
diff_r_ui=zeros(M-1,3,N);

for j=1:1:N
    for i=1:1:M
        str_si=['s',mat2str(i)];
        si_value=eval(str_si);
        str_ui=['u',mat2str(j)];
        ui_value=eval(str_ui);
        
        ui_si=ui_value-si_value;
        ai2=sqrt(ui_si(1)^2+ui_si(2)^2);
        %     方位角对目标位置的导数
        diff_theta_ui_1=-ui_si(2)/ai2^2;
        diff_theta_ui_2=ui_si(1)/ai2^2;
        diff_theta_ui(i,:,j)=[diff_theta_ui_1,diff_theta_ui_2,0];
        %     仰角对目标位置的导数
        diff_beta_ui_1=-ui_si(1)*ui_si(3)/ai2/(osjl(ui_value,si_value))^2;
        diff_beta_ui_2=-ui_si(2)*ui_si(3)/ai2/(osjl(ui_value,si_value))^2;
        diff_beta_ui_3=ai2/(osjl(ui_value,si_value))^2;
        diff_beta_ui(i,:,j)=[diff_beta_ui_1,diff_beta_ui_2,diff_beta_ui_3];
    end
end

for j=1:1:N
    for i=2:1:M
        str_si=['s',mat2str(i)];
        si_value=eval(str_si);
        str_ui=['u',mat2str(j)];
        ui_value=eval(str_ui);
        
        ui_si=ui_value-si_value;
        % 距离差对目标位置的导数
        ui_s1=ui_value-s1;
        ui_si=ui_value-si_value;
        diff_r_ui(i-1,:,j)=ui_si.'/osjl(ui_value,si_value)-ui_s1.'/osjl(ui_value,s1);
    end
end
F_u1=[diff_theta_ui(:,:,1);diff_beta_ui(:,:,1);diff_r_ui(:,:,1);];
F_u=blkdiag(F_u1);

for big_big_loop=1:1:length(angle_noise_power_more)
    %方位角
    deta_theta=angle_noise_power_more(big_big_loop);
    R_theta=deta_theta^2*eye((M),(M));
    %仰角
    deta_beta=angle_noise_power_more(big_big_loop);
    R_beta=deta_beta^2*eye((M),(M));
    %距离差
    deta_r=r_noise_power;
    R_t=(deta_r)^2*(eye(M-1,M-1)+ones(M-1,M-1))/2;
    
    Rn_a1=blkdiag(R_theta,R_beta,R_t);
    Rn_a=blkdiag(Rn_a1);
    %     观测站定位的先验均方根误差
    prior_cov_s(big_big_loop,1)=0;
    
    F1=F_u.'*inv(Rn_a)*F_u;
    CRLB1=inv([diff_theta_ui(:,:,1);diff_beta_ui(:,:,1)].'*inv(blkdiag(R_theta,R_beta))*[diff_theta_ui(:,:,1);diff_beta_ui(:,:,1)]);
    CRLB2=inv([diff_r_ui(:,:,1)].'*inv(blkdiag(R_t))*[diff_r_ui(:,:,1)]);
    
    CRLB=inv([F1]);
    
    crb_source_DOA_TDOA(big_big_loop,1)=sqrt(trace(CRLB(1:3,1:3)));
    CRLB_DOA(big_big_loop,1)=sqrt(trace(CRLB1(1:3,1:3)));
    CRLB_TDOA(big_big_loop,1)=sqrt(trace(CRLB2(1:3,1:3)));
end
CRLB_u=[crb_source_DOA_TDOA];

figure(1)
plot(angle_noise_power_more.*180/pi,CRLB_u,'r.-')
hold on;
plot(angle_noise_power_more.*180/pi,CRLB_DOA,'b^-')
hold on;
plot(angle_noise_power_more.*180/pi,CRLB_TDOA,'g*-')
xlabel('角度测量误差')
ylabel('RMSE(m)')
legend('CRLB(DOA/TDOA)','CRLB(DOA)','CRLB(TDOA)')
function [distance]=osjl(object,source)
% 输入均为列向量
distance=sqrt(sum((object-source).^2));
end

混合定位CRLB随角度误差变化结果

clc;
close all;
clear all;
%%
% 测向站数量
M=6;
% 目标数量
N=1;
%观测站位置
s1=[1500 -1900 1400].';
s2=[-1600 2000 1700].';
s3=[1800 -1500 -1600].';
s4=[-1200 1400 -2000].';
s5=[1700 1600 2000].';
s6=[-1800 -1400 -1800].';
for i=1:1:M
    str_si=['s',mat2str(i)];
    si_value=eval(str_si);
    s_true(3*(i-1)+1:3*(i-1)+3,1)=si_value;
end
% 目标位置
u1=[4000 4000 3000].';
for i=1:1:N
    str_ui=['u',mat2str(i)];
    ui_value=eval(str_ui);
    u_true(3*(i-1)+1:3*(i-1)+3,1)=ui_value;
end
%%
angle_noise_power=0.5.*pi/180;
r_noise_power_more=[1:1:10];
%% CRLB
for i=1:1:M
    eval(['s',mat2str(i),'(:,1)',' = ','s_true(3*(i-1)+1:3*(i-1)+3,1)',';']);
end
for i=1:1:N
    eval(['u',mat2str(i),'(:,1)',' = ','u_true(3*(i-1)+1:3*(i-1)+3,1)',';']);
end
%%     对目标位置的导数
% 方位角、仰角对目标位置的导数
diff_theta_ui=zeros(M,3,N);
diff_beta_ui=zeros(M,3,N);
% 距离差对目标位置的导数
diff_r_ui=zeros(M-1,3,N);

for j=1:1:N
    for i=1:1:M
        str_si=['s',mat2str(i)];
        si_value=eval(str_si);
        str_ui=['u',mat2str(j)];
        ui_value=eval(str_ui);
        
        ui_si=ui_value-si_value;
        ai2=sqrt(ui_si(1)^2+ui_si(2)^2);
        %     方位角对目标位置的导数
        diff_theta_ui_1=-ui_si(2)/ai2^2;
        diff_theta_ui_2=ui_si(1)/ai2^2;
        diff_theta_ui(i,:,j)=[diff_theta_ui_1,diff_theta_ui_2,0];
        %     仰角对目标位置的导数
        diff_beta_ui_1=-ui_si(1)*ui_si(3)/ai2/(osjl(ui_value,si_value))^2;
        diff_beta_ui_2=-ui_si(2)*ui_si(3)/ai2/(osjl(ui_value,si_value))^2;
        diff_beta_ui_3=ai2/(osjl(ui_value,si_value))^2;
        diff_beta_ui(i,:,j)=[diff_beta_ui_1,diff_beta_ui_2,diff_beta_ui_3];
    end
end

for j=1:1:N
    for i=2:1:M
        str_si=['s',mat2str(i)];
        si_value=eval(str_si);
        str_ui=['u',mat2str(j)];
        ui_value=eval(str_ui);
        
        ui_si=ui_value-si_value;
        % 距离差对目标位置的导数
        ui_s1=ui_value-s1;
        ui_si=ui_value-si_value;
        diff_r_ui(i-1,:,j)=ui_si.'/osjl(ui_value,si_value)-ui_s1.'/osjl(ui_value,s1);
    end
end
F_u1=[diff_theta_ui(:,:,1);diff_beta_ui(:,:,1);diff_r_ui(:,:,1);];
F_u=blkdiag(F_u1);

for big_big_loop=1:1:length(r_noise_power_more)
    %方位角
    deta_theta=angle_noise_power;
    R_theta=deta_theta^2*eye((M),(M));
    %仰角
    deta_beta=angle_noise_power;
    R_beta=deta_beta^2*eye((M),(M));
    %距离差
    deta_r=r_noise_power_more(big_big_loop);
    R_t=(deta_r)^2*(eye(M-1,M-1)+ones(M-1,M-1))/2;
    
    Rn_a1=blkdiag(R_theta,R_beta,R_t);
    Rn_a=blkdiag(Rn_a1);
    %     观测站定位的先验均方根误差
    prior_cov_s(big_big_loop,1)=0;
    
    F1=F_u.'*inv(Rn_a)*F_u;
    CRLB1=inv([diff_theta_ui(:,:,1);diff_beta_ui(:,:,1)].'*inv(blkdiag(R_theta,R_beta))*[diff_theta_ui(:,:,1);diff_beta_ui(:,:,1)]);
    CRLB2=inv([diff_r_ui(:,:,1)].'*inv(blkdiag(R_t))*[diff_r_ui(:,:,1)]);
    
    CRLB=inv([F1]);
    
    crb_source_DOA_TDOA(big_big_loop,1)=sqrt(trace(CRLB(1:3,1:3)));
    CRLB_DOA(big_big_loop,1)=sqrt(trace(CRLB1(1:3,1:3)));
    CRLB_TDOA(big_big_loop,1)=sqrt(trace(CRLB2(1:3,1:3)));
end
CRLB_u=[crb_source_DOA_TDOA];
%%
figure(1)
plot(r_noise_power_more,CRLB_u,'r.-')
hold on;
plot(r_noise_power_more,CRLB_DOA,'b^-')
hold on;
plot(r_noise_power_more,CRLB_TDOA,'g*-')
xlabel('TDOA测量误差')
ylabel('RMSE(m)')
legend('CRLB(DOA/TDOA)','CRLB(DOA)','CRLB(TDOA)')
%%
%%
function [distance]=osjl(object,source)
% 输入均为列向量
distance=sqrt(sum((object-source).^2));
end

混合定位CRLB随TDOA误差变化结果

参考
DOA定位CRLB
TDOA定位CRLB

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我觉得我很优秀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值