第02篇:能量检测器 vs. 相关检测器

一、作用:我手里有没有"模板"?
在上一篇文章中,我们学会了如何设置门限来计算虚警概率 PFAP_{FA}PFA 和检测概率 PDP_DPD。但那个模型假设我们只知道信号的能量(平方律检测器),而不知道信号的具体波形。
但在实际电子战场景中,情况通常分为两种:
- 信号波形未知 (如敌方突然出现的未知雷达脉冲):我们只能测量接收窗口内的总能量 。如果能量超过门限,就认为有信号------这就是能量检测器(Energy Detector,ED)。
- 信号波形已知 (如我方主动发射的雷达回波,或已知合作源的特定调制):我们手头有信号的副本(模板) 。此时我们可以将接收信号与副本做互相关(Cross-Correlation) ,把分散在时间/带宽内的能量"挤压"到一个窄峰上------这就是相关检测器(Correlator / 匹配滤波器)。
本篇的核心目标 :对比在相同的 PFAP_{FA}PFA 和信噪比 ξ\xiξ 下,能量检测器(ED)和相关检测器(XC)的检测概率 PDP_DPD 差距有多大?"已知波形"这个先验信息,到底能给我们带来多大的检测增益?
二、原理:数学上发生了什么?
2.1 能量检测器(回顾)
对于 MMM 个复采样点,检验统计量为:
ZED=∑i=1M∣yi∣2Z_{ED} = \sum_{i=1}^{M} |y_i|^2ZED=i=1∑M∣yi∣2
- H₀(纯噪声) :ZED∼χ2M2Z_{ED} \sim \chi^2_{2M}ZED∼χ2M2(中心卡方,自由度为 2M2M2M)
- H₁(有信号) :ZED∼χ2M2(λ)Z_{ED} \sim \chi^2_{2M}(\lambda)ZED∼χ2M2(λ),其中非中心参数 λ=2Mξ\lambda = 2M \xiλ=2Mξ
- 门限 :ηED=χ2M2−1(1−PFA)\eta_{ED} = \chi^{2^{-1}}{2M}(1 - P{FA})ηED=χ2M2−1(1−PFA)
2.2 相关检测器(匹配滤波)
当信号波形 sss 已知时,我们将接收信号 yyy 与 sss 做内积(相关):
ZXC=∣∑i=1Myi⋅si∗∣2Z_{XC} = \left| \sum_{i=1}^{M} y_i \cdot s_i^* \right|^2ZXC= i=1∑Myi⋅si∗ 2
经过推导(详见教科书式4.6),相关检测器输出端的等效信噪比 ξout\xi_{out}ξout 与输入端 ξ\xiξ 的关系为:
ξout=M⋅ξ21+2ξ\xi_{out} = \frac{M \cdot \xi^2}{1 + 2\xi}ξout=1+2ξM⋅ξ2
值得注意的是:
- 当 ξ\xiξ 很小 (弱信号)时,ξout≈M⋅ξ2\xi_{out} \approx M \cdot \xi^2ξout≈M⋅ξ2,呈平方律增长!
- 当 ξ\xiξ 很大 (强信号)时,ξout≈M2⋅ξ\xi_{out} \approx \frac{M}{2} \cdot \xiξout≈2M⋅ξ,呈线性增长。
对于相关检测器,由于噪声在相关后依然服从复高斯分布,取模平方后,检测统计量在 H₁ 下近似服从自由度为 2 的非中心卡方分布 (因为相关器本质上是一个复数的输出),但其非中心参数变为 λXC=2ξout\lambda_{XC} = 2 \xi_{out}λXC=2ξout。
三、完整代码(可直接运行)

本代码完全复现了原书 ch4_drawFigures 中的 图4.6,对比了不同时间-带宽积(TBWP = M)下 ED 与 XC 的性能,并附带了蒙特卡洛验证点。
matlab
%% ========================================================================
% 第02篇:能量检测器 vs. 相关检测器
% 完整可运行代码
% 基于:ch4_drawFigures(图4.6)
% ========================================================================
clear; close all; clc;
%% 1. 参数设置
% 时间-带宽积(即积累点数 M)
TBWP_db = [10, 20, 30]; % 单位 dB
TBWP_lin = 10.^(TBWP_db/10); % [10, 100, 1000]
% 信噪比范围
xi_in_db = -20:0.1:15; % 输入 SNR (dB)
xi_in_lin = 10.^(xi_in_db/10); % 线性值
% 虚警概率
PFA = 1e-6;
%% 2. 解析计算
% 使用 ndgrid 生成 M 和 xi 的组合网格
[MM, XI] = ndgrid(TBWP_lin, xi_in_lin);
% ---- 2.1 能量检测器 (ED) ----
eta_ed = chi2inv(1 - PFA, 2*MM); % 门限
PD_ed = 1 - ncx2cdf(eta_ed, 2*MM, 2*MM.*XI); % 检测概率
% ---- 2.2 相关检测器 (XC) ----
% 步骤1:计算相关器输出的等效 SNR
xi_out_lin = MM .* XI.^2 ./ (1 + 2*XI);
% 步骤2:相关器在 H1 下等效为自由度为2的非中心卡方
eta_xc = chi2inv(1 - PFA, 2); % 自由度为2的门限(常数)
PD_xc = 1 - ncx2cdf(eta_xc ./ (1 + 2*XI), 2, 2*xi_out_lin);
%% 3. 蒙特卡洛验证(仅做少量点,验证解析公式)
fprintf('正在进行蒙特卡洛仿真验证(可能需要几秒钟)...\n');
nMC = 5000; % 蒙特卡洛次数
xi_mc_db = -15:5:10; % 选取几个点做 MC
xi_mc_lin = 10.^(xi_mc_db/10);
% 存储结果
PD_ed_mc = zeros(length(xi_mc_lin), length(TBWP_lin));
PD_xc_mc = zeros(length(xi_mc_lin), length(TBWP_lin));
for idx_M = 1:length(TBWP_lin)
M = TBWP_lin(idx_M);
for idx_snr = 1:length(xi_mc_lin)
snr = xi_mc_lin(idx_snr);
% --- 生成信号与噪声 ---
% 信号模板 (单位功率)
s = (1/sqrt(2)) * (randn(M, nMC) + 1i*randn(M, nMC));
% 噪声 (单位功率)
n1 = (1/sqrt(2)) * (randn(M, nMC) + 1i*randn(M, nMC));
n2 = (1/sqrt(2)) * (randn(M, nMC) + 1i*randn(M, nMC));
% 接收信号(带相位旋转,模拟相干/非相干)
phi = exp(1i * 2 * pi * rand(1, nMC));
y1 = sqrt(snr) * s + n1; % 信道1
y2 = sqrt(snr) * s .* phi + n2; % 信道2(存在未知相位,适用于非相干XC)
% --- 能量检测器判决 ---
z_ed = sum(abs(y1).^2, 1);
th_ed = chi2inv(1 - PFA, 2*M);
PD_ed_mc(idx_snr, idx_M) = sum(z_ed > th_ed) / nMC;
% --- 相关检测器判决 (非相干) ---
% 注意:由于我们不知道相位(phi),这里取互相关的模值
z_xc = abs(sum(y1 .* conj(y2), 1)).^2;
% 注意:对于非相干XC,统计特性略有不同,此处为了演示曲线对比,保留教科书式严格相干假设更为合适。
% 为保持与原书图4.6严格一致,我们改用相干相关(已知相位):
z_xc_coherent = abs(sum(y1 .* conj(s), 1)).^2;
th_xc = chi2inv(1 - PFA, 2);
% 这里简化,用相干相关直接计算
PD_xc_mc(idx_snr, idx_M) = sum(z_xc_coherent > th_xc) / nMC;
end
end
%% 4. 绘制终极对比图(图4.6风格)
figure('Position', [50, 50, 900, 600]);
% 定义线型和标记
line_style_ed = {'-', '-', '-'};
line_style_xc = {'--', '--', '--'};
colors = lines(3);
hold on;
for idx = 1:length(TBWP_lin)
% ---- 解析解 ----
% 能量检测器
plot(xi_in_db, PD_ed(idx, :), 'LineWidth', 2, ...
'Color', colors(idx, :), 'LineStyle', line_style_ed{idx});
% 相关检测器
plot(xi_in_db, PD_xc(idx, :), 'LineWidth', 2, ...
'Color', colors(idx, :), 'LineStyle', line_style_xc{idx});
% ---- 蒙特卡洛点 ----
% 能量检测器 MC (画圈)
scatter(xi_mc_db, PD_ed_mc(:, idx)', 60, 'o', ...
'MarkerEdgeColor', colors(idx, :), 'LineWidth', 1.5);
% 相关检测器 MC (画叉)
scatter(xi_mc_db, PD_xc_mc(:, idx)', 80, 'x', ...
'MarkerEdgeColor', colors(idx, :), 'LineWidth', 2);
end
% 图例与标签
xlabel('输入信噪比 $\xi$ [dB]', 'Interpreter', 'latex', 'FontSize', 13);
ylabel('检测概率 $P_D$', 'Interpreter', 'latex', 'FontSize', 13);
title(['$P_{FA} = 10^{' num2str(log10(PFA)) '}$ , 实线=ED, 虚线=XC'], ...
'Interpreter', 'latex', 'FontSize', 13);
legend(...
'ED, TB=10dB', 'XC, TB=10dB', ...
'ED, TB=20dB', 'XC, TB=20dB', ...
'ED, TB=30dB', 'XC, TB=30dB', ...
'Location', 'southeast');
grid on;
xlim([-20, 15]);
ylim([0, 1]);
% 添加注释框解释低SNR处的巨大差距
annotation('textbox', [0.18, 0.65, 0.25, 0.15], ...
'String', {'低信噪比区域:', '相关器利用波形先验', '获平方律增益,性能远超能量检测器'}, ...
'BackgroundColor', 'white', 'EdgeColor', 'k', 'FontSize', 10);
hold off;
%% 5. 辅助:如果您的MATLAB没有统计工具箱,请取消注释以下替代函数定义
% % 没有 Statistics Toolbox 时的替代方案(使用核心函数 gammainc / gammaincinv)
% function p = chi2cdf_alt(x, df)
% p = gammainc(x/2, df/2, 'upper');
% end
% function x = chi2inv_alt(p, df)
% x = 2 * gammaincinv(1-p, df/2);
% end
% 注意:ncx2cdf 没有简单的核心函数替代,建议安装 Statistics Toolbox 或使用蒙特卡洛代替。
四、代码讲解:为什么这么写?
4.1 为什么相关检测器要用 eta_xc ./ (1 + 2*XI) 缩放门限?
在相关检测器中,由于存在信号分量,噪声的等效方差会被信号的"自干扰"放大。教科书推导(原书公式4.45)指出,当信号存在时,相关器的输出可以分解为信号项和噪声项,其等效噪声功率变为 σn2(1+2ξ)\sigma_n^2 (1 + 2\xi)σn2(1+2ξ)。
因此,在计算非中心卡方分布的 CDF 时,我们必须将门限缩小 (除以 1+2ξ1+2\xi1+2ξ),即:
matlab
PD_xc = 1 - ncx2cdf(eta_xc ./ (1 + 2*XI), 2, 2*xi_out_lin);
这一行代码是整个计算中最关键、也最容易出错的地方。如果忘记除以 (1+2ξ)(1+2\xi)(1+2ξ),计算出的 PDP_DPD 将严重偏低。
4.2 为什么相关检测器的自由度是 2 而不是 2M?
能量检测器将 MMM 个点的能量全部加起来,因此自由度为 2M2M2M。而相关检测器在相关运算后,将 MMM 个点的能量"压榨"并集中在了一个复数输出上 (即一个相关峰)。这个复数取模平方后,只服从自由度为 2 的卡方分布(无论 MMM 多大)。
这也意味着,能量检测器的门限随 MMM 变化,而相关检测器的门限是常数 (仅由 PFAP_{FA}PFA 决定)。这是两者物理机制的本质区别。
4.3 蒙特卡洛仿真中的相干与非相干处理
在真实电子战环境中,接收信号往往存在未知的初相(ϕ\phiϕ)。原书图4.6展示的是非相干 交叉相关器(即我们不知道相位,取模值)。但在代码演示中,为了简化理论验证,我使用了相干相关 (已知信号副本 s 且无相位模糊)来做蒙特卡洛验证。
- 如果读者想复现非相干性能,只需将互相关部分改为
z_xc = abs(sum(y1 .* conj(y2), 1)).^2;,其理论曲线需要参考更复杂的贝塞尔函数修正,但总体趋势(优于能量检测器)不变。
五、运行结果解读
运行代码后,你将看到一幅经典的"剪刀差"曲线图:
-
高信噪比区域(ξ>0\xi > 0ξ>0 dB):
- 实线(ED)和虚线(XC)几乎重合。因为此时噪声很小,无论是否知道波形,信号都能轻松超过门限,两者性能差异不大。
-
低信噪比区域(ξ<−5\xi < -5ξ<−5 dB):
- 虚线(XC)曲线明显左移,远高于实线(ED)。
- 以 PD=0.5P_D = 0.5PD=0.5 为例,当 TB=30TB = 30TB=30 dB(即 M=1000M=1000M=1000)时,相关检测器比能量检测器节省了约 10 dB 的信噪比 。这就是匹配滤波/相关处理增益带来的巨大优势------它把分散在时域和频域的能量"汇聚"起来,而能量检测器只能无奈地"大海捞针"。
六、总结与下期预告
通过本篇对比,我们深刻体会到 "已知波形先验"在电子战检测中的重要性。能量检测器虽然普适(什么信号都能测),但灵敏度远不如匹配滤波。这也是为什么大多数雷达和通信接收机,只要有可能,都会在接收端进行相关/匹配滤波处理。
下一篇预告(第03篇):CFAR(恒虚警)处理
在实际战场环境中,噪声功率不是恒定的!周围的地物杂波、干扰机、甚至天气变化都会让背景噪声功率忽高忽低。如果使用固定门限,虚警率会剧烈波动。CFAR(恒虚警)算法 通过从参考单元中实时估算噪声功率,动态调整门限,保证 PFAP_{FA}PFA 恒定。我们将在下一篇解析原书图2.5的代码,带你手写一个单元平均CFAR(CA-CFAR)检测器。敬请期待!