侧向交叉定位
定位原理
侧向交叉定位需要在参数估计过程中估计出辐射源辐射到每一个侦测站的方位角,若是二维的则只有一个方向角,对于三维的则需要方向角和俯仰角。
下图是双站侧向交叉定位的模型图
其中,假定侦测站 A 的位置为
(
x
a
,
y
a
)
\ (x_{a},y_{a})
(xa,ya),侦测站 B 的位置为
(
x
b
,
y
b
)
\ (x_{b},y_{b})
(xb,yb),均为已知,C是未知目标辐射源,其位置为
(
x
,
y
)
\ (x,y)
(x,y),A,B两个侦测站时间的距离为 d,当他们对目标同时进行观测时,A 站的观察角度为
α
\alpha
α ,B 站的观察角度为
β
\beta
β,依据这些已知信息,可以实现对目标辐射源的定位,两个观测站之间的距离如式1:
d
=
(
x
a
−
x
b
)
2
+
(
y
a
−
y
b
)
2
(1)
d = \sqrt {{{({x_a} - {x_b})}^2}+{{({y_a} - {y_b})}^2}} \tag{1}
d=(xa−xb)2+(ya−yb)2(1)
- 若两个侦测站在进行角度估计时没有误差
两个侦测站测得的方位角如式2:
{ tan α = y − y a x − x a tan β = y − y b x − x b (2) \left\{ \begin{array}{l} \tan \alpha = \frac{{y - {y_a}}}{{x - {x_a}}}\\ \tan \beta = \frac{{y - {y_b}}}{{x - {x_b}}} \end{array} \right. \tag{2} {tanα=x−xay−yatanβ=x−xby−yb(2)
令 C α = tan α \ {C_\alpha} = \tan\alpha Cα=tanα, C β = tan β \ {C_\beta} = \tan\beta Cβ=tanβ,则化简式2可以得到式3:
{ C α x − y = C α x a − y a C β x − y = C β x b − y b (3) \left\{ \begin{array}{l} {C_\alpha }x - y = {C_\alpha }{x_a} - {y_a}\\ {C_\beta }x - y = {C_\beta }{x_b} - {y_b} \end{array} \right. \tag{3} {Cαx−y=Cαxa−yaCβx−y=Cβxb−yb(3)
用矩阵表示为:
[ C α − 1 C β − 1 ] [ x y ] = [ C α x a − y a C β x b − y b ] (4) \left[ \begin{array}{l} {C_\alpha } - 1\\ {C_\beta } - 1 \end{array} \right]\left[ \begin{array}{l} x\\ y \end{array} \right] = \left[ \begin{array}{l} {C_\alpha }{x_a} - {y_a}\\ {C_\beta }{x_b} - {y_b} \end{array} \right] \tag{4} [Cα−1Cβ−1][xy]=[Cαxa−yaCβxb−yb](4)
当 C α ≠ C β \ C_\alpha\ne C_\beta Cα=Cβ时,该式存在唯一解,即只要是两个不同的观测站,则可以通过该式子获得目标辐射源的位置。则目标位置为:
[ x y ] = [ C α − 1 C β − 1 ] − 1 [ C α x a − y a C β x b − y b ] (5) \left[ \begin{array}{l} x\\ y \end{array} \right] = {\left[ \begin{array}{l} {C_\alpha } - 1\\ {C_\beta } - 1 \end{array} \right]^{ - 1}}\left[ \begin{array}{l} {C_\alpha }{x_a} - {y_a}\\ {C_\beta }{x_b} - {y_b} \end{array} \right] \tag{5} [xy]=[Cα−1Cβ−1]−1[Cαxa−yaCβxb−yb](5) - 两个侦测站在进行角度估计时存在误差
(
Δ
α
,
Δ
β
)
\ (\Delta_\alpha,\Delta_\beta)
(Δα,Δβ)
采用最小二乘原理,对线性方程4求最小均方误差解,令:
Y = [ C α − 1 C β − 1 ] X = [ x ^ y ^ ] D = [ C α x a − y a C β x b − y b ] (6) \begin{array}{c} Y = \left[ \begin{array}{l} {C_\alpha } - 1\\ {C_\beta } - 1 \end{array} \right]\\ X = \left[ \begin{array}{l} {\hat x}\\ {\hat y} \end{array} \right]\\ D = \left[ \begin{array}{l} {C_\alpha }{x_a} - {y_a}\\ {C_\beta }{x_b} - {y_b} \end{array} \right] \end{array} \tag{6} Y=[Cα−1Cβ−1]X=[x^y^]D=[Cαxa−yaCβxb−yb](6)
则最后通过计算式7即可得到结果:
X = ( Y T Y ) − 1 Y T D (7) X = {({Y^T}Y)^{ - 1}}{Y^T}D \tag{7} X=(YTY)−1YTD(7)
仿真
clc;clear;close;
% 初始化参数
numExperiments = 1000; % 蒙特卡洛实验次数
station1 = [20, 50]; % 侦测站A的坐标
station2 = [100, 20]; % 侦测站B的坐标
true_target = [50, 70]; % 目标的真实坐标
Q = [0.001,0.05]; % 设置噪声标准差为0.05
% 存储每次实验的误差
errors = zeros(numExperiments, 2);
RMSE = zeros(1,2);
% 存储每次循环的坐标
x = zeros(numExperiments,1);
y = zeros(numExperiments,1);
X = zeros(numExperiments,2); %第一列为横坐标,第二列为纵坐标
for j = 1:length(Q)
% 蒙特卡洛实验循环
for i = 1:numExperiments
% 观测角度的噪声扰动
alpha_noise = atan2(station1(2) - true_target(2), station1(1) - true_target(1)) + normrnd(0, Q(j));
beta_noise = atan2(station2(2) - true_target(2), station2(1) - true_target(1)) + normrnd(0, Q(j));
% 使用噪声扰动的角度进行定位计算
Calpha = tan(alpha_noise);
Cbeta = tan(beta_noise);
Y = [Calpha,-1;Cbeta,-1];
D = [Calpha*station1(1)-station1(2);Cbeta*station2(1)-station2(2)];
X(i,:) = ((Y'*Y)\Y')*D;
% x(i) = (Calpha * station1(1) - Cbeta * station2(1) - station1(2) + station2(2)) / (Calpha - Cbeta);
% y(i) = (Calpha * station2(2) - Cbeta * station1(2) + Cbeta * Calpha * (station1(1)-station2(1))) / (Calpha - Cbeta);
% 计算误差
% errors(i,j) = sqrt((X(1) - true_target(1))^2 + (X(2) - true_target(2))^2);
errors(i,j) = sqrt((X(i,1) - true_target(1))^2 + (X(i,2) - true_target(2))^2);
end
% 计算侦测出的平均位置
% X = mean(x);
% Y = mean(y);
x = mean(X(:,1)); %横坐标均值
y = mean(X(:,2)); %纵坐标均值
% 计算均方根误差
RMSE = sqrt(mean(errors(:,j).^2));
% subplot(1,2,j);
% 可视化结果
figure;
hold on;
plot(station1(1), station1(2), 'go', 'MarkerSize', 10,'MarkerFaceColor','g'); % 侦测站A
plot(station2(1), station2(2), 'go', 'MarkerSize', 10,'MarkerFaceColor','g'); % 侦测站B
plot(true_target(1), true_target(2), 'rs', 'MarkerSize', 10,'MarkerFaceColor','r'); % 真实辐射源
% 绘制多次实验的侦测结果分布
for i = 1:numExperiments
plot(X(i,1), X(i,2), 'b.', 'MarkerSize', 5,'MarkerFaceColor','b');
end
%绘制侦测出的平均位置
plot(x, y, 'Md', 'MarkerSize', 8,'MarkerFaceColor','M');
text(x, y, ['(' num2str(x), ',', num2str(y), ')'], ...
'HorizontalAlignment', 'center', 'VerticalAlignment', 'bottom');
% 添加图例和标题
% legend('Detection Station A', 'Detection Station B', 'True Source', 'Detected Results');
title(['AOA Localization Simulation with ', num2str(numExperiments), ' Monte Carlo Trials and Noise Level',num2str(Q(j))]);
xlabel('X Position');
ylabel('Y Position');
hold off;
% % 放大显示侦测区域
h1 = axes('position',[0.55,0.6,0.2,0.3]);
axis(h1);
plot(h1,X(:,1),X(:,2),'b.', ...
true_target(1), true_target(2),'rs','MarkerSize',5,'MarkerFaceColor','r');
% rectangle('Position',[min(X(:,1)), min(X(:,2)), max(X(:,1))-min(X(:,1)), max(X(:,2))-min(X(:,2))], 'EdgeColor','r'); % 在主图中绘制一个边界框
set(h1, 'Box', 'on'); % 为局部放大图添加边框
linkaxes([gca, h1], 'xy'); % 将主图和局部放大图的坐标轴关联起来
% 显示均方根误差
fprintf('The RMSE of the localization with noise level %f is: %f\n', Q(j),RMSE);
end
% sgtitle('Side-cross Localization Simulation');
end
仿真结果
下图是我的仿真结果图,在加入误差之后,可以明显看到测量的目标位置与真实的目标位置存在一定距离,且噪声越大,最后测得的位置偏离真实位置更远。
图中放大显示了1000次的测量结果以及真实目标位置,可以看到在
Q
=
0.001
\ Q=0.001
Q=0.001时,散点更集中在真实位置附近,同样我输出了两中情况下测量的均方根误差,如图:
可以看到在
Q
=
0.05
\ Q=0.05
Q=0.05的情况下均方根误差更大。
注:内容来自于文献《基于多站TDOA_FDOA通信辐射源无源定位方法研究》,自己对文献内容进行了复现,与文献中的结果有所出入,将继续学习。本文章仅为自己学习记录。