第07篇:多普勒测向

一、作用:用"动"来测方向
前两篇中,我们介绍了基于幅度(Watson-Watt)和相位(干涉仪)的测向方法。它们共同的前提是:接收天线在空间上分开排布。通过比较不同位置上天线收到的信号,反推出辐射源的方位。
但如果只有一个天线呢?或者说,天线处于运动状态(如机载、星载平台)呢?
多普勒测向(Doppler DF) 利用了另一种物理效应:当接收机(或天线)相对辐射源运动时,接收信号的频率会发生多普勒频移,频移量与运动方向和来波方向的夹角直接相关 。如果让天线做匀速圆周运动(机械旋转或电子切换),多普勒频移就会呈现一条确定的正弦曲线,其相位正是辐射源的方位角。
多普勒测向的典型应用:
- 机载 ESM:飞机飞行时,机身周围环形排布多个天线,通过"电子旋转"产生多普勒调制
- UHF/VHF 监测:用一个机械旋转的八木天线测向
- 卫星被动定位:利用卫星轨道运动产生的多普勒差反推地面辐射源位置
本篇核心作用:从多普勒调制的物理机理出发,推导"频率-角度"的映射关系,实现一个完整的估计器,并用蒙特卡洛验证其性能是否达到 CRLB。
二、原理:数学上发生了什么?
2.1 圆周运动下的多普勒调制
假设一个天线在水平面内做匀速圆周运动,半径 RRR,角频率 ωr=2πfr\omega_r = 2\pi f_rωr=2πfr。在时刻 ttt,天线位置为:
p(t)=(Rcosωrt, Rsinωrt)\mathbf{p}(t) = (R\cos\omega_r t, \ R\sin\omega_r t)p(t)=(Rcosωrt, Rsinωrt)
辐射源位于远场,方位角 ψ\psiψ(相对 x 轴)。天线到辐射源方向上的径向投影 为:
r(t)=Rcos(ωrt−ψ)r(t) = R\cos(\omega_r t - \psi)r(t)=Rcos(ωrt−ψ)
因此,接收信号的相位相对于静止状态多了一项:
φdop(t)=2πfc⋅R⋅cos(ωrt−ψ)=Adopcos(ωrt−ψ)\varphi_{dop}(t) = \frac{2\pi f}{c} \cdot R \cdot \cos(\omega_r t - \psi) = A_{dop} \cos(\omega_r t - \psi)φdop(t)=c2πf⋅R⋅cos(ωrt−ψ)=Adopcos(ωrt−ψ)
其中 Adop=2πfR/cA_{dop} = 2\pi f R / cAdop=2πfR/c 是多普勒调制深度 。对应的瞬时频率偏移为:
fd(t)=−fRcωrsin(ωrt−ψ)f_d(t) = -\frac{f R}{c} \omega_r \sin(\omega_r t - \psi)fd(t)=−cfRωrsin(ωrt−ψ)
注意:调制深度 AdopA_{dop}Adop 与频率 fff、半径 RRR 成正比 ,调制相位就是 −ψ-\psi−ψ。这就是多普勒测向的物理基础。
2.2 估计方法:DFT 提取相位
设参考信号(如机内同步信号)为 r(t)r(t)r(t),接收信号为 x(t)=r(t)exp(jφdop(t))x(t) = r(t)\exp(j\varphi_{dop}(t))x(t)=r(t)exp(jφdop(t))。
计算 去调制信号 :
z(t)=x(t)⋅r∗(t)=∣r(t)∣2⋅exp(jAdopcos(ωrt−ψ))z(t) = x(t) \cdot r^*(t) = |r(t)|^2 \cdot \exp(j A_{dop} \cos(\omega_r t - \psi))z(t)=x(t)⋅r∗(t)=∣r(t)∣2⋅exp(jAdopcos(ωrt−ψ))
单位化后得到纯相位调制信号:
u(t)=z(t)∣z(t)∣≈exp(jAdopcos(ωrt−ψ))u(t) = \frac{z(t)}{|z(t)|} \approx \exp(j A_{dop} \cos(\omega_r t - \psi))u(t)=∣z(t)∣z(t)≈exp(jAdopcos(ωrt−ψ))
对 u(t)u(t)u(t) 在 ωr\omega_rωr 处做 DFT(等价于提取一阶谐波):
U=∑n=0M−1u(tn)⋅e−jωrtnU = \sum_{n=0}^{M-1} u(t_n) \cdot e^{-j\omega_r t_n}U=n=0∑M−1u(tn)⋅e−jωrtn
利用 Bessel 函数的傅里叶展开(Jacobi-Anger 展开),当采样点数 MMM 覆盖完整周期时:
U≈j⋅M⋅J1(Adop)⋅e−jψU \approx j \cdot M \cdot J_1(A_{dop}) \cdot e^{-j\psi}U≈j⋅M⋅J1(Adop)⋅e−jψ
因此方位角估计式为:
ψ^=π2−∠(U)\hat{\psi} = \frac{\pi}{2} - \angle(U)ψ^=2π−∠(U)
关键优势 :这个估计器不需要相位展开,对噪声鲁棒,计算量小(一次 DFT)。
2.3 CRLB
Fisher 信息量为:
I(ψ)=2ξ∑n=0M−1(∂φdop∂ψ)2=2ξ⋅Adop2⋅∑n=0M−1sin2(ωrtn−ψ)I(\psi) = 2\xi \sum_{n=0}^{M-1} \left( \frac{\partial \varphi_{dop}}{\partial \psi} \right)^2 = 2\xi \cdot A_{dop}^2 \cdot \sum_{n=0}^{M-1} \sin^2(\omega_r t_n - \psi)I(ψ)=2ξn=0∑M−1(∂ψ∂φdop)2=2ξ⋅Adop2⋅n=0∑M−1sin2(ωrtn−ψ)
当 MMM 足够大、采样覆盖完整周期时,∑sin2=M/2\sum \sin^2 = M/2∑sin2=M/2,因此:
I(ψ)=ξMAdop2I(\psi) = \xi M A_{dop}^2I(ψ)=ξMAdop2
σψ2≥1ξMAdop2=1ξM(2πfR/c)2\sigma_\psi^2 \geq \frac{1}{\xi M A_{dop}^2} = \frac{1}{\xi M \left( 2\pi f R / c \right)^2}σψ2≥ξMAdop21=ξM(2πfR/c)21
这表明测向精度:
- 与积累点数 MMM 成反比 (σψ∝1/M\sigma_\psi \propto 1/\sqrt{M}σψ∝1/M )
- 与 SNR 成反比
- 与载波频率 fff 和旋转半径 RRR 的乘积成反比------这是多普勒测向的关键设计参数 (类似干涉仪的 d/λd/\lambdad/λ 基线)
三、完整代码(可直接运行)

matlab
%% ========================================================================
% 第07篇:多普勒测向
% 基于:ch7_drawFigures(图7.8b、7.10)
% ========================================================================
clear; close all; clc;
%% ==================== 图1:多普勒频率随时间变化 ====================
M_vis = 128;
phi0_vis = 5*pi/3;
fd_norm = cos((1:M_vis)/M_vis*2*pi + phi0_vis);
f0_norm = 2.5;
figure;
plot(1:M_vis, f0_norm*ones(size(fd_norm)), 'b-', 'LineWidth', 2, ...
'DisplayName', '参考频率 f_0');
hold on;
plot(1:M_vis, f0_norm + fd_norm, 'r-', 'LineWidth', 2, ...
'DisplayName', '接收频率 f_0 + f_d(t)');
xlabel('时间采样点 n');
ylabel('归一化频率');
title('多普勒测向:瞬时频率随天线旋转而变化');
grid on;
legend('Location', 'northwest');
ylim([1.5, 3.8]);
% 标注多普勒调制
text(0.35*M_vis, f0_norm - 0.5, 'f_d(t) = \propto \sin(\omega_r t - \psi)', ...
'FontSize', 11, 'Color', 'r');
text(0.8*M_vis, f0_norm + 0.15, 'f_0', 'FontSize', 11, 'Color', 'b');
% 标注旋转周期
fd_desc = fd_norm;
fd_desc(fd_norm(2:end) > fd_norm(1:end-1)) = Inf;
[~, idx_cycle] = min(abs(fd_desc));
plot(idx_cycle*[1 1], f0_norm + [min(fd_norm), 0], 'k--', 'LineWidth', 1);
text(idx_cycle + 2, f0_norm - 0.7, '旋转周期 T_r = 1/f_r', 'FontSize', 10);
%% ==================== 图2:单次估计演示 ====================
fprintf('======= 多普勒测向单次估计演示 =======\n');
% 信号参数
theta_true_deg = 45;
psi_true = deg2rad(theta_true_deg);
A = 1;
phi0 = 2*pi*rand();
f = 1e9; % 载波 1 GHz
c = 3e8;
lam = c/f;
% 天线参数
M_demo = 256;
ts_demo = 1/(5*f); % 采样间隔
R_demo = lam / 2; % 旋转半径 = λ/2(与书中一致)
fr_demo = 1/(ts_demo*M_demo); % 旋转频率:M 点覆盖一个完整周期
% 生成信号
t_demo = ts_demo*(0:M_demo-1).';
r_demo = A*exp(1i*phi0)*exp(1i*2*pi*f*t_demo);
A_dop_demo = 2*pi*f*R_demo/c;
x_demo = r_demo .* exp(1i*A_dop_demo*cos(2*pi*fr_demo*t_demo - psi_true));
% 加噪声(SNR = 10 dB)
SNR_demo_dB = 10;
noise_pwr_demo = 10^(-SNR_demo_dB/10);
r_demo_n = r_demo + sqrt(noise_pwr_demo/2)*(randn(M_demo,1) + 1i*randn(M_demo,1));
x_demo_n = x_demo + sqrt(noise_pwr_demo/2)*(randn(M_demo,1) + 1i*randn(M_demo,1));
% 估计
psi_est_demo = doppler_df_est(r_demo_n, x_demo_n, ts_demo, f, R_demo, fr_demo);
fprintf('真实角度: %.4f°\n', theta_true_deg);
fprintf('估计角度: %.4f°\n', rad2deg(psi_est_demo));
fprintf('误差 : %.4f°\n', rad2deg(psi_est_demo) - theta_true_deg);
% 可视化去调制信号
z_demo = x_demo_n .* conj(r_demo_n);
zn_demo = z_demo ./ (abs(z_demo) + eps);
figure;
subplot(2, 1, 1);
plot(1:M_demo, angle(z_demo), 'b.', 'MarkerSize', 3);
hold on;
plot(1:M_demo, angle(zn_demo), 'r-', 'LineWidth', 1);
xlabel('采样点 n'); ylabel('相位 [rad]');
title('去调制信号的相位(蓝点=原始,红线=单位化)');
grid on; xlim([1, M_demo]);
legend('原始相位', '单位化相位', 'Location', 'northwest');
subplot(2, 1, 2);
plot(1:M_demo, angle(zn_demo), 'b-', 'LineWidth', 1, 'DisplayName', '单位化相位');
hold on;
ref_theory = A_dop_demo * cos(2*pi*fr_demo*t_demo - psi_true);
plot(1:M_demo, ref_theory, 'r--', 'LineWidth', 1.5, ...
'DisplayName', '真实相位调制(无噪)');
xlabel('采样点 n'); ylabel('相位 [rad]');
title(sprintf('相位调制的正弦曲线 (真实 \\psi = %d°)', theta_true_deg));
grid on; xlim([1, M_demo]);
legend('Location', 'northwest');
%% ==================== 图3:蒙特卡洛验证 vs CRLB ====================
fprintf('\n执行多普勒测向蒙特卡洛仿真...\n');
% 参数
theta_true_mc_deg = 45;
psi_true_mc = deg2rad(theta_true_mc_deg);
A_mc = 1;
phi0_mc = 2*pi*rand();
f_mc = 1e9;
c = 3e8;
lam = c/f_mc;
ts_mc = 1/(5*f_mc);
% 半径设置:对比 R = λ/2 和 R = 2λ
R_set = [lam/2, 2*lam];
% 蒙特卡洛扫描
M_vec = [10, 100, 1000];
snr_db_vec = -10:2:30;
num_mc = 500;
rmse_all = cell(numel(R_set), numel(M_vec));
crlb_all = cell(numel(R_set), numel(M_vec));
for idx_R = 1:numel(R_set)
R = R_set(idx_R);
fprintf('\t 计算 R = %.2f*λ ...\n', R/lam);
for idx_M = 1:numel(M_vec)
M = M_vec(idx_M);
% 时间向量和信号
t_vec = ts_mc*(0:M-1).';
r0 = A_mc*exp(1i*phi0_mc)*exp(1i*2*pi*f_mc*t_vec);
fr = 1/(ts_mc*M);
A_dop = 2*pi*f_mc*R/c;
x0 = r0 .* exp(1i*A_dop*cos(2*pi*fr*t_vec - psi_true_mc));
% 预生成噪声
noise_base_r = sqrt(A_mc/2)*(randn(M, num_mc)+1i*randn(M, num_mc));
noise_base_x = sqrt(A_mc/2)*(randn(M, num_mc)+1i*randn(M, num_mc));
rmse_vec = zeros(size(snr_db_vec));
crlb_vec = zeros(size(snr_db_vec));
for idx_snr = 1:numel(snr_db_vec)
snr_db = snr_db_vec(idx_snr);
noise_pwr = 10.^(-snr_db/10);
% 加噪
r = r0 + noise_base_r*sqrt(noise_pwr);
x = x0 + noise_base_x*sqrt(noise_pwr);
% 估计
psi_est = zeros(1, num_mc);
for idx_mc = 1:num_mc
psi_est(idx_mc) = doppler_df_est(r(:,idx_mc), x(:,idx_mc), ...
ts_mc, f_mc, R, fr);
end
% 卷绕处理
err = psi_est - psi_true_mc;
err = mod(err + pi, 2*pi) - pi;
rmse_vec(idx_snr) = sqrt(mean(err.^2));
% CRLB
crlb_vec(idx_snr) = sqrt(doppler_crlb(snr_db, M, f_mc, R));
end
rmse_all{idx_R, idx_M} = rmse_vec;
crlb_all{idx_R, idx_M} = crlb_vec;
end
end
fprintf('仿真完成!\n');
% 绘制结果
figure;
colors = lines(numel(M_vec));
for idx_R = 1:numel(R_set)
subplot(1, 2, idx_R); hold on;
for idx_M = 1:numel(M_vec)
% CRLB
semilogy(snr_db_vec, rad2deg(crlb_all{idx_R, idx_M}), ...
'-', 'Color', colors(idx_M,:), 'LineWidth', 2, ...
'DisplayName', sprintf('M=%d (CRLB)', M_vec(idx_M)));
% 蒙特卡洛
semilogy(snr_db_vec, rad2deg(rmse_all{idx_R, idx_M}), ...
'o--', 'Color', colors(idx_M,:), 'LineWidth', 1, ...
'MarkerSize', 5, 'HandleVisibility', 'off');
end
xlabel('SNR \xi [dB]'); ylabel('RMSE [度]');
title(sprintf('多普勒测向性能 (R = %.2f\\lambda)', R_set(idx_R)/lam));
grid on; legend('Location', 'southwest');
xlim([-10, 30]); ylim([0.01, 100]);
end
sgtitle('不同 R/λ 和 M 下的测向精度(实线=CRLB,虚线+圈=蒙特卡洛)', ...
'FontSize', 13, 'FontWeight', 'bold');
%% ==================== 图4:CRLB 与设计参数的关系 ====================
% 展示 CRLB 随 SNR、M、R 的关系(等值线)
figure;
[M_grid, SNR_grid] = meshgrid(10:10:1000, -10:1:30);
subplot(1, 3, 1);
R_fix = lam/2;
CRLB_1 = rad2deg(sqrt(doppler_crlb(SNR_grid, M_grid, f_mc, R_fix)));
imagesc(10:10:1000, -10:1:30, CRLB_1);
colorbar; set(gca, 'ydir', 'normal');
xlabel('积累点数 M'); ylabel('SNR \xi [dB]');
title(sprintf('CRLB [度], R = 0.5\\lambda'));
subplot(1, 3, 2);
R_fix = 2*lam;
CRLB_2 = rad2deg(sqrt(doppler_crlb(SNR_grid, M_grid, f_mc, R_fix)));
imagesc(10:10:1000, -10:1:30, CRLB_2);
colorbar; set(gca, 'ydir', 'normal');
xlabel('积累点数 M'); ylabel('SNR \xi [dB]');
title(sprintf('CRLB [度], R = 2\\lambda'));
subplot(1, 3, 3);
R_vec = linspace(0.1, 5, 100) * lam;
M_fix = 100; SNR_fix = 10;
CRLB_R = rad2deg(sqrt(doppler_crlb(SNR_fix, M_fix, f_mc, R_vec)));
semilogy(R_vec/lam, CRLB_R, 'b-', 'LineWidth', 2);
xlabel('旋转半径 R/\lambda'); ylabel('CRLB [度]');
title(sprintf('CRLB vs R (M=%d, SNR=%ddB)', M_fix, SNR_fix));
grid on;
sgtitle('多普勒测向精度与设计参数的关系', 'FontSize', 13, 'FontWeight', 'bold');
%% ==================== 函数定义 ====================
function psi_est = doppler_df_est(r, x, ts, f, R, fr)
% 多普勒测向估计算法(DFT 相位提取法)
% 输入:
% r : M×1 参考信号(复向量)
% x : M×1 接收信号(复向量)
% ts : 采样间隔 [s]
% f : 载波频率 [Hz]
% R : 旋转半径 [m]
% fr : 旋转频率 [Hz]
% 输出:
% psi_est : 方位角估计 [rad]
M = length(r);
% 计算去调制信号并单位化
z = x .* conj(r);
zn = z ./ (abs(z) + eps);
% 时间索引
n = (0:M-1).';
% DFT 提取 fr 频率处分量
kernel = exp(-1i*2*pi*fr*ts*n);
U = sum(zn .* kernel);
% 由 Bessel 展开:U ∝ j * J_1(A_dop) * exp(-j*psi)
% 所以角度 = pi/2 - psi,推出 psi = pi/2 - angle(U)
psi_est = pi/2 - angle(U);
end
function crlb = doppler_crlb(snr_db, M, f, R)
% 多普勒测向的克拉美-罗下限(psi 的方差)
c = 3e8;
snr = 10.^(snr_db/10);
A_dop = 2*pi*f*R/c;
crlb = 1 ./ (snr .* M .* A_dop.^2);
end
四、代码讲解:为什么这么写?
4.1 为什么用 DFT 提取 fr 频率处分量,而不是直接相位展开?
去调制信号 z(t)=x(t)⋅r∗(t)z(t) = x(t) \cdot r^*(t)z(t)=x(t)⋅r∗(t) 的相位是 Adopcos(ωrt−ψ)A_{dop}\cos(\omega_r t - \psi)Adopcos(ωrt−ψ)。如果 Adop>πA_{dop} > \piAdop>π,相位就会出现卷绕 (例如 Adop=2πA_{dop} = 2\piAdop=2π 时相位跨越 −π,π-\\pi, \\pi−π,π 两次)。用 unwrap 处理卷绕在噪声下极易出错。
改用 DFT 直接对单位化复数信号提取一阶谐波:
matlab
zn = z ./ (abs(z) + eps);
U = sum(zn .* exp(-1i*2*pi*fr*ts*n));
这里隐含使用了 Jacobi-Anger 展开 (Bessel 函数的傅里叶级数):
ejAcosθ=∑k=−∞∞jkJk(A)ejkθe^{jA\cos\theta} = \sum_{k=-\infty}^{\infty} j^k J_k(A) e^{jk\theta}ejAcosθ=k=−∞∑∞jkJk(A)ejkθ
只有 k=1k=1k=1 的分量在乘以 e−jωrte^{-j\omega_r t}e−jωrt 后成为常数,被 DFT 相干积累;其他 kkk 分量在求和后相互抵消。这样估计器不需要知道 AdopA_{dop}Adop 的具体数值,只要求 ωr\omega_rωr 已知,非常实用。
4.2 为什么要设置 fr = 1/(ts*M)?
DFT 提取的前提是采样点覆盖完整周期 ,否则会引入"频谱泄漏"。设定 fr⋅M⋅ts=1f_r \cdot M \cdot t_s = 1fr⋅M⋅ts=1 保证了一个周期恰好被 MMM 个采样点完整覆盖,这时 k=1k=1k=1 的谐波正好落在 DFT 的第 1 个 bin 上,没有泄漏、没有栅栏效应。
这也是原书代码中 fr = 1/(ts*M) 的由来。
4.3 psi_est = pi/2 - angle(U) 的推导来源
让我们仔细推导一遍:对于无噪声单位化信号
u(t)=exp(jAdopcos(ωrt−ψ))u(t) = \exp(j A_{dop} \cos(\omega_r t - \psi))u(t)=exp(jAdopcos(ωrt−ψ))
用 Bessel 展开:
u(t)=∑kjkJk(Adop)ejk(ωrt−ψ)u(t) = \sum_k j^k J_k(A_{dop}) e^{jk(\omega_r t - \psi)}u(t)=k∑jkJk(Adop)ejk(ωrt−ψ)
对 u(t)u(t)u(t) 乘以 e−jωrte^{-j\omega_r t}e−jωrt 后求和(离散化后等价于提取 k=1k=1k=1 分量):
U≈M⋅jJ1(Adop)⋅e−jψU \approx M \cdot j J_1(A_{dop}) \cdot e^{-j\psi}U≈M⋅jJ1(Adop)⋅e−jψ
因为 j=ejπ/2j = e^{j\pi/2}j=ejπ/2,M⋅J1(Adop)M \cdot J_1(A_{dop})M⋅J1(Adop) 是正实数,所以:
∠U=π/2−ψ ⟹ ψ=π/2−∠U\angle U = \pi/2 - \psi \implies \psi = \pi/2 - \angle U∠U=π/2−ψ⟹ψ=π/2−∠U
这就是代码中 psi_est = pi/2 - angle(U) 的来源。注意这个公式只对 J1(Adop)>0J_1(A_{dop}) > 0J1(Adop)>0 成立 ------当 AdopA_{dop}Adop 过大(例如 Adop>3.83A_{dop} > 3.83Adop>3.83,即 J1J_1J1 的第一个零点)时,相位会翻转。所以实际系统中 AdopA_{dop}Adop 通常被限制在 J1J_1J1 的第一个峰值附近(Adop≈1.84A_{dop} \approx 1.84Adop≈1.84)。
4.4 CRLB 为什么与 (fR)2(f R)^2(fR)2 成反比?
从公式:
σψ2=1ξM(2πfR/c)2\sigma_\psi^2 = \frac{1}{\xi M \left(2\pi f R / c\right)^2}σψ2=ξM(2πfR/c)21
- fff 越大(载波频率高):单位时间内相位变化越快,角度信息越丰富 → 精度越高。
- RRR 越大(旋转半径大):多普勒调制深度越大 → 精度越高。
这与干涉仪中"基线 d/λd/\lambdad/λ 越长精度越高"的规律本质相同------都是利用更长的空间/时间尺度积累角度信息 。但代价是多普勒测向需要时间积累一个完整旋转周期,无法瞬时给出结果。
4.5 蒙特卡洛中的两套参数
代码对 R/λ=0.5R/\lambda = 0.5R/λ=0.5 和 R/λ=2R/\lambda = 2R/λ=2 两种情况分别仿真:
- R/λ=0.5R/\lambda = 0.5R/λ=0.5 :与干涉仪无模糊基线等价,Adop=πA_{dop} = \piAdop=π,是"标准"配置。
- R/λ=2R/\lambda = 2R/λ=2 :多普勒调制深度更大,精度提高约 4 倍(∝R\propto R∝R)。
从仿真结果看,R/λ=2R/\lambda = 2R/λ=2 的曲线比 R/λ=0.5R/\lambda = 0.5R/λ=0.5 左移约 12 dB ------完全符合理论预测的 4 倍提升(20log104≈1220\log_{10}4 \approx 1220log104≈12 dB)。
五、运行结果解读
运行后你会看到 4 张图:
-
图1(频率-时间曲线) :蓝色是参考频率 f0f_0f0,红色是包含多普勒调制的 f0+fd(t)f_0 + f_d(t)f0+fd(t)。fd(t)f_d(t)fd(t) 呈现一条完整的正弦曲线,其相位即 −ψ-\psi−ψ,这就是待估参数。
-
图2(去调制信号相位) :上图展示原始相位与单位化后的相位,下图叠加了理论正弦曲线。真实 ψ=45°\psi = 45°ψ=45° 时,红蓝完全重合,验证去调制正确。
-
图3(蒙特卡洛 vs CRLB) :每个子图(对应一个 R/λR/\lambdaR/λ)有 3 组曲线(M=10,100,1000M=10, 100, 1000M=10,100,1000)。蒙卡 RMSE 紧密贴合 CRLB ,且 MMM 越大精度越高(约 M\sqrt{M}M 提升)。R/λ=2R/\lambda = 2R/λ=2 的整体曲线明显优于 R/λ=0.5R/\lambda = 0.5R/λ=0.5。
-
图4(CRLB 与设计参数关系) :左中两张热力图直观展示 CRLB 随 SNR 和 MMM 的等值线分布;右图显示 CRLB 随 R/λR/\lambdaR/λ 快速下降,验证 σψ∝1/R\sigma_\psi \propto 1/Rσψ∝1/R。
六、延伸思考
6.1 多普勒测向 vs 干涉仪:谁更强?
单看精度公式:
- 干涉仪:σψ=1/(2πdλcosψ⋅2Mξ)\sigma_\psi = 1/(2\pi \frac{d}{\lambda}\cos\psi \cdot \sqrt{2M\xi})σψ=1/(2πλdcosψ⋅2Mξ )
- 多普勒:σψ=1/(2πRλ⋅Mξ)\sigma_\psi = 1/(2\pi \frac{R}{\lambda} \cdot \sqrt{M\xi})σψ=1/(2πλR⋅Mξ )
分母上多了一个 2\sqrt{2}2 的差距------干涉仪精度高约 3 dB。但多普勒测向只需要一个接收通道(不需要多天线相位同步),硬件成本低,在小型无人机、便携设备上很有优势。
6.2 与"多普勒差测向"的区别
本篇讨论的是单天线圆周运动 产生的多普勒调制(Doppler DF)。另一种相关技术是多普勒频差(FDOA) ------利用两个运动平台的接收频率差来定位,属于地理定位范畴,将在第12篇详细介绍。
6.3 工程实践中的陷阱
- 旋转机构的机械误差 :如果 RRR 或 frf_rfr 有抖动,会产生额外的相位噪声,破坏 CRLB。
- AdopA_{dop}Adop 超出 J1J_1J1 线性区 :当 Adop≈3.83A_{dop} \approx 3.83Adop≈3.83 时 J1J_1J1 过零,估计器失效。实际系统需自适应选择 RRR 或下变频频率。
- 多目标场景:多个辐射源会同时产生多组多普勒调制,需要用 FFT 分离。这与第09篇的阵列信号处理思路相通。
下一篇预告(第08篇):多普勒测向的工程实现与优化
我们从理论到代码完整走通了多普勒测向。下一篇将聚焦工程实现 :如何用 FFT 批量处理、如何估计未知 AdopA_{dop}Adop、如何用"双旋转率"消除 J1J_1J1 符号模糊,以及如何在全频段(UHF 到 X 波段)进行自适应参数配置。敬请期待!