多站TDOA/FDOA的无源定位(2)

侧向交叉定位

定位原理

侧向交叉定位需要在参数估计过程中估计出辐射源辐射到每一个侦测站的方位角,若是二维的则只有一个方向角,对于三维的则需要方向角和俯仰角。

下图是双站侧向交叉定位的模型图
在这里插入图片描述

其中,假定侦测站 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=(xaxb)2+(yayb)2 (1)

  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α=xxayyatanβ=xxbyyb(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αxy=CαxayaCβxy=Cβxbyb(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αxayaCβxbyb](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αxayaCβxbyb](5)
  2. 两个侦测站在进行角度估计时存在误差   ( Δ α , Δ β ) \ (\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αxayaCβxbyb](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通信辐射源无源定位方法研究》,自己对文献内容进行了复现,与文献中的结果有所出入,将继续学习。本文章仅为自己学习记录。

### TDOA/FDOA 无源定位技术概述 #### 工作原理 时间差到达 (TDOA, Time Difference of Arrival) 和频率差到达 (FDOA, Frequency Difference of Arrival) 是两种常用的无源定位技术。这两种方法通过测量信号传播的时间差异或频率偏移来确定发射源的位置。 - **TDOA 原理** 当个接收接收到同一信号时,由于各点到发射源的距离不同,所记录下的信号到达时刻会存在微小差别。这些时间差可以用来构建超曲面方程组,从而解算出未知位置[^1]。 - **FDOA 原理** 对于移动中的平台(如无人机),当其相对于静止的目标发生相对运动时,在接收端观测到的载波频率会发生变化即普勒频移现象。利用这种特性同样能建立几何关系求得目标坐标。 #### 应用场景 此技术适用于种复杂环境下对固定或动态物体进行精确定位: - 搜索救援:快速准确定位失踪人员或遇险船只; - 环境监测:追踪野生动物迁徙路径、污染物扩散范围等; - 目标跟踪:军事侦察中监控敌方单位行动轨迹; #### 实现方法 为了提高定位精度并解决非视距(NLOS)问题,通常采用扩展卡尔曼滤波器(EKF)与上述两种测向手段相结合的方式来进行数据处理和状态估计。具体流程如下所示: ```python import numpy as np def ekf_predict(x_hat_k_minus_1, P_k_minus_1, A, Q): """预测阶段""" x_hat_bar = A @ x_hat_k_minus_1 P_bar = A @ P_k_minus_1 @ A.T + Q return x_hat_bar, P_bar def ekf_update(z_k, H, R, x_hat_bar, P_bar): """更新阶段""" y_tilde = z_k - H @ x_hat_bar S = H @ P_bar @ H.T + R K = P_bar @ H.T @ np.linalg.inv(S) x_hat_k = x_hat_bar + K @ y_tilde P_k = (np.eye(len(P_bar)) - K @ H) @ P_bar return x_hat_k, P_k ``` 在此基础上,还可以引入更改进措施以适应实际需求,比如增加冗余观测量、融合其他传感器信息等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值