# phased_CFARDetector
恒虚警率(CFAR)检测器
函数库: TyPhasedArray
# 描述
雷达信号的检测总是在干扰背景下进行,这些干扰包括接收机内部热噪声以及来自地面、雨雪、海浪等杂波干扰,甚至是人为释放的有源和无源干扰。恒虚警处理的目的是在上述恶劣的干扰下保持信号检测时的虚警率恒定,以避免过多的虚假数据进入信息处理系统而影响其工作效率,同时保证有用数据尽可能没有丢失地进入信息处理系统。 信号的恒虚警率处理和检测主要有两种分类方法:
- 按干扰环境特性分为噪声环境和杂波环境的处理和检测,前者适用于系统噪声环境,后者适用于存在杂波干扰的环境;
- 按干扰信号的模型分为参量型、非参量型和稳健型的处理和检测,参量型检测适用于干扰信号的数学模型已知的环境,非参量型检测适用于干扰信号的数学模型未知或者时变的环境,稳健性检测适用于干扰统计特性部分已知的环境。
CFARDetector 对象实现了高斯白噪声环境下的一维恒虚警率(Constant False Alarm Rate, CFAR)参量型检测器,对输入数据的选定被测单元(Cell Under Test, CUT)执行检测处理。当输入数据中的单元值超过阈值时,宣布检测到目标。为了保持恒定的虚警率,阈值被设置为输入数据的本地噪声功率的倍数。检测器使用三种单元平均方法、一种有序统计方法从周围单元估计被测单元的局部噪声功率。三种单元平均方法分别是单元平均(CA)、最大单元平均(GOCA)和最小单元平均(SOCA)。
对于每个测试单元,检测器:
根据 CUT 单元训练频带中周围的单元值来估计噪声统计;
通过将噪声估计乘以阈值因子来计算阈值;
将 CUT 单元值与阈值进行比较,以确定目标是否存在。如果该值大于阈值,则判定存在目标。
运行检测器:
定义并设置 CFAR 检测器;
调用 step,根据 phased_CFARDetector 的属性执行 CFAR 检测。
# 构造
# 语法
H = phased_CFARDetector()
H = phased_CFARDetector(; Name = Value)
# 说明
H = phased_CFARDetector() 创建一个 CFAR 检测器系统对象 H。该对象对输入数据执行 CFAR 检测。
H = phased_CFARDetector(; Name = Value) 创建对象 H,其中每个指定的属性 Name 都设置为指定的 Value。您可以按任何顺序将其他名称-值对参数指定为(Name1 = Value1、…、NameN = ValueN)。
# 属性
Method - CFAR 算法"CA" (默认) | "GOCA" | "SOCA" | "OS"
将恒虚警检测器算法指定为以下算法之一
| "CA" | 单元平均 CFAR |
| "GOCA" | 最大单元平均 CFAR |
| "OS" | 有序统计量 CFAR |
| "SOCA" | 最小单元平均 CFAR |
Rank - 有序统计量1(默认) | 正整数标量
将有序统计信息的秩指定为正整数标量。该值必须小于或等于 NumTrainingCells 属性的值。
依赖项: 仅当 Method 属性设置为 "OS" 时,此属性才适用。
NumGuardCells - 保护单元数量2(默认) 表示 CUT 两侧各有一个保护单元 | 非负偶数标量
将训练中使用的保护单元数指定为偶数。此属性指定 CUT 两侧的保护单元总数。
NumTrainingCells - 训练单元数量2(默认) 表示 CUT 两侧各有一个训练单元 | 正偶数标量
将训练中使用的训练单元数指定为偶数。训练单元在 CUT 两侧尽可能被等分。
ThresholdFactor - 阈值因子的获取方法"Auto"(默认) | "Custom" | "Input port"
指定阈值因子来源:自动计算、此对象的 CustomThresholdFactor 属性或者 step 的输入参数。此属性的值为:
| 参数 | 说明 |
|---|---|
| "Auto" | 应用程序根据 ProbabilityFalseAlarm 属性中指定的错误警报的期望概率自动计算阈值因子。计算假设输入中的每个独立信号是来自平方律检测器的单个脉冲,没有脉冲积累。计算还假设噪声是高斯白噪声 |
| "Custom" | 此对象的 CustomThresholdFactor 属性指定阈值因子。 |
| "Input port" | 每个 step 调用中的一个输入参数指定阈值因子。 |
ProbabilityFalseAlarm - 期望的虚警概率0.1(默认) | 正标量
将所需的虚警概率指定为 0 和 1 之间的标量(不包括 0 和 1)。
依赖项: 仅当将 ThresholdFactor 属性设置为 "Auto" 时,此属性才适用。
CustomThresholdFactor - 自定义阈值因子1(默认) | 正标量
将自定义阈值因子指定为正标量。
依赖项: 仅当将 ThresholdFactor 属性设置为 "Custom" 时,此属性才适用。
OutputFormat - 检测结果格式"CUT result"(默认) | "Detection index"
步骤方法返回的检测结果的格式,指定为 "CUT result" 或者 "Detection index"。
当设置为 "CUT result" 时,结果为每个测试单元的逻辑检测值(true 或 false)。true 表示被测试小区的值超过检测阈值;
当设置为 "Detection index" 时,结果形成一个矢量或矩阵,其中包含超过检测阈值的 CUT 的索引。您可以使用此格式作为 phased_RangeEstimator 和 phased_DopplerEstimator 系统对象的输入。
NumDetectionsSource - 检测次数的来源"Auto"(默认) | "Property"
检测次数的来源,指定为 "Auto" 或 "Property" 。
当此属性设置为 "Auto" 时,输出的检测索引总数是测试中检测出目标的单元总数;
当此属性设置为 "Property" ,则输出的检测次数由 NumDetections 属性值确定。
依赖项: 若要启用此属性,请将 OutputFormat 属性设置为 "Detection index"。
NumDetections - 要输出的最大检测数1(默认) | 正整数标量
要输出的最大检测索引数,指定为正整数。
依赖项: 若要启用此属性,请将 OutputFormat 属性设置为 "Detection index",并将 NumDetectionsSource 属性设为 "Property"。
# 用法
# 语法
Y, = step(H, X, cutidx)
Y, th, = step(___)
Y, _, noise = step(___)
Y, = step(H, X, cutidx; ThFac=thfac)
Y, TH, N = step(H, X, cutidx; ThFac=thfac)
# 说明
Y, = step(H, X, cutidx) 对输入数据 X 的指定元素执行 CFAR 检测。
# 输入参数
X - 输入数据M x 1 实值矢量 | M x N 实值矩阵
输入矩阵第一维的大小可以变化,以模拟不断变化的信号长度。例如,在具有可变脉冲重复频率的脉冲波形的情况下,可能会发生尺寸变化。
cutidx - CUT 索引D x 1 正整数矢量
cutidx 为 D 维索引矢量,指定要对其执行检测处理的输入数据元素或者待测单元格(CUT)。
当输入数据 X 为矢量时,cutidx 指定输入数据元素的索引;
当输入数据 X 为矩阵时,cutidx 指定输入数据元素的行索引。同一索引适用于矩阵的所有列。对于 cutidx 中指定的索引,沿 X 的每一列独立执行检测。
ThFac - 门限因子正标量
ThFac 为自定义的用于计算检测门限的门限因子。
依赖项: 若要启用此语法,请将 ThresholdFactor 属性设置为“Input port”。
# 输出参数
Y - 输出结果D×1 矢量 | D×N 矩阵 | Lx1 矢量 | Lx2 矩阵
输出参数 Y 包含检测结果。
当 OutputFormat 属性为"Cut result"时,Y 是包含逻辑检测结果的 D×1 矢量或 D×N 矩阵。D 为 cutidx 长度,N 为 X 的列数。Y 的行与 cutidx 中的行相对应。对于每一行,如果 X 的相应列中有检测,则 Y 在列中输出 1。否则,Y 在列中输出 0;
当 OutputFormat 属性为"Detection index"时,Y 是包含检测索引的 Lx1 矢量或 Lx2 矩阵。L 是在输入数据中找到的检测目标数。当 X 是列矢量时,Y 包含 X 中每个检测的索引。当 X 是矩阵时,Y 包含 X 中每个检测的行索引和列索引。Y 的每一行都有 [detrow detcol] 的形式。当 NumDetectionsSource 属性设置为“Property”时,L 等于 NumDetections 属性的值。如果实际检测次数小于此值,则没有检测的行将设置为 NaN。
th - 检测门限D×1 矢量 | D×N 矩阵 | Lx1 矢量
noise - 估计噪声功率D×1 矢量 | D×N 矩阵 | Lx1 矢量
# 示例
计算噪声背景的 CFAR 检测器虚警率
using TyPhasedArray
using TyMath
rng = MT19937ar(1234)
detector = phased_CFARDetector(;
Method="CA", NumTrainingCells=50, NumGuardCells=2, ProbabilityFalseAlarm=0.1
)
N = 1000
x = 1 / sqrt(2) * (randn(rng, N, 1) + 1im * randn(rng, N, 1))
dets, th, noise = step(detector, (abs.((x) .^ 2)), 1:N)
pfa = sum(dets) / N
pfa = 0.098
计算 CFAR 检测索引
using TyPhasedArray
using TyMath
rng = MT19937ar(5678)
detector = phased_CFARDetector(;
NumTrainingCells=50,
NumGuardCells=2,
ProbabilityFalseAlarm=0.005,
OutputFormat="Detection index",
)
N = 1000
x1 = 1 / sqrt(2) * (randn(rng, N, 1) + 1im * randn(rng, N, 1))
x2 = 1 / sqrt(2) * (randn(rng, N, 1) + 1im * randn(rng, N, 1))
x = [x1 x2]
dets, th, noise = step(detector, (abs.((x) .^ 2)), 1:N)
dets = 12×2 Matrix{Float64}:
261.0 1.0
296.0 1.0
453.0 1.0
456.0 1.0
535.0 1.0
249.0 2.0
259.0 2.0
323.0 2.0
398.0 2.0
512.0 2.0
741.0 2.0
883.0 2.0
# 算法
恒虚警检测
phased_CFARDetector 分三步使用单元平均:
从输入中识别训练单元,并形成噪声估计。下表指示检测器如何形成噪声估计,具体取决于 Method 属性值;
方法 噪声估算 适用场景 缺点 "CA" 使用所有训练单元中值的平均值 均匀杂波背景 杂波边缘处虚警率上升,多目标环境下检测性能下降 "GOCA" 选择前部训练单元和后部训练单元中的较大平均值 在杂波边缘和均匀杂波环境能保持较好检测性能 多目标环境下检测性能下降 "SOCA" 选择前部训练单元和后部训练单元的平均值中较小的一个 在干扰目标位于前沿或者后沿滑窗之一的多目标环境中能分辨出主目标 杂波边缘处和均匀杂波环境中检测性能差 "OS" 按升序对训练单元中的值进行排序。选择第 N 个单元,其中 N 是 Rank 属性的值 多目标检测性能较好 杂波边缘区域虚警概率提高;且依赖于参考窗内所有样本数据,Rank 取值直接决定了结果优劣 将噪声估计值乘以门限因子以形成门限;
将测试单元中的值与阈值进行比较,以确定目标是否存在。如果该值大于阈值,则判定存在目标。
CFAR 分析 - 以 CA 方法为例
对于高斯干扰噪声下的线性和平方律检波器,其干扰分别服从瑞利分布和指数分布。phased_CFARDetector考虑的是平方律检波器的情况。
假设干扰噪声是独立同分布的,且 I 通道和 Q 通道的信号功率均为
由于无法获取准确的
假设待检测单元周围有 N 个相邻单元可以用来估计
上式为观测数据矢量
则要求的门限可以由估计得到的干扰功率乘以一个系数得到,即
定义
在估计的门限下所对应的虚警概率
解这个标准累积式,并做代数运算,可得最终结果为
对于给定的预期平均虚警概率
可见,平均虚警概率并不依赖于实际干扰噪声功率
# 参考文献
[1] 赵树杰. 信号检测与估计理论[M]. 清华大学出版社, 2005.
[2] Richards, M. A. Fundamentals of Radar Signal Processing. New York: McGraw-Hill, 2005.
[3] 理查兹, 邢孟道, 王彤, 等. 雷达信号处理基础: Fundamentals of radar signal processing[M]. 电子工业出版社, 2008.