ThreatSourceLibaray/docs/project/swerling_rcs_model_design.md

392 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Swerling RCS 模型设计文档
## 1. 引言
本文档详细描述了项目中 `SwerlingRcsModel.cs` 类的设计与实现该类用于模拟雷达散射截面RCS的Swerling统计起伏模型。Swerling模型是雷达系统分析和目标探测性能评估中的重要工具它描述了不同类型目标由于姿态微小变化或内部结构复杂性导致的RCS值随机波动特性。
关于Swerling模型的更详细理论背景请参考项目文档[RCS统计模型理论](./theory.md#坦克装甲车和直升机的rcs统计模型选择与其运动特性结构复杂度及雷达观测条件密切相关以下是具体分析)。
`SwerlingRcsModel` 类的具体实现位于以下路径:
`ThreatSource/src/Utils/SwerlingRcsModel.cs`
## 2. 设计目标
`SwerlingRcsModel` 类的设计旨在满足以下目标:
* **模拟RCS统计起伏**提供一种机制来模拟目标RCS值的统计性波动而不是使用固定的RCS值。
* **支持标准Swerling模型**实现对Swerling I、II、III、IV四种经典模型的支持。
* **区分起伏速率**能够区分慢起伏slow fluctuation, Swerling I/III和快起伏fast fluctuation, Swerling II/IV目标。
* **可配置平均RCS**允许用户为目标指定一个平均RCS值作为所选统计分布的基准参数。
* **支持可复现性**通过可选的随机数生成器种子确保在需要时能够获得可复现的RCS序列。
* **自动化模型选择**:提供基于目标装备类型(`EquipmentType`)和运动状态(`MotionStateType`自动选择合适Swerling模型的内部逻辑。
## 3. Swerling模型的统计学理论基础
### 3.1 概率分布理论
Swerling模型基于不同的概率分布来描述RCS值的统计特性。理解这些分布的数学特性对于正确实现和应用模型至关重要。
#### 3.1.1 指数分布Swerling I & II
**数学定义**
- 概率密度函数:$f(x) = \frac{1}{\sigma} e^{-x/\sigma}$,其中 $x \geq 0$$\sigma > 0$
- 累积分布函数:$F(x) = 1 - e^{-x/\sigma}$
- 期望值:$E[X] = \sigma$
- 方差:$Var[X] = \sigma^2$
**物理意义**
- 指数分布描述了具有简单几何结构的目标其RCS主要由一个或少数几个主要散射中心决定
- 这种分布具有"无记忆性",适合描述散射特性相对简单的目标
- 分布的长拖尾特性意味着会出现很多小RCS值和少数大RCS值
**采样方法**
使用逆变换采样法:$X = -\sigma \ln(1-U)$,其中 $U \sim \text{Uniform}(0,1)$
#### 3.1.2 卡方分布Swerling III & IV
**数学定义**
- 对于4个自由度的卡方分布$X \sim \chi^2(4)$
- 概率密度函数:$f(x) = \frac{1}{4} x e^{-x/2}$,其中 $x \geq 0$
- 期望值:$E[X] = 4$
- 方差:$Var[X] = 8$
**等价伽马分布表示**
- 卡方分布等价于形状参数 $k=2$,尺度参数 $\theta=\sigma/2$ 的伽马分布
- 概率密度函数:$f(x) = \frac{4}{\sigma^2} x e^{-2x/\sigma}$
- 期望值:$E[X] = \sigma$
- 方差:$Var[X] = \sigma^2/2$
**物理意义**
- 卡方分布4自由度描述了具有复杂几何结构的目标其RCS由多个独立散射中心的贡献组成
- 相比指数分布卡方分布的方差更小RCS值更集中在平均值附近
- 适合描述具有多个散射面或复杂内部结构的目标
**采样方法**
通过两个独立指数分布随机变量的和来实现:$X = Y_1 + Y_2$,其中 $Y_1, Y_2 \sim \text{Exp}(\sigma/2)$
### 3.2 起伏速率分类
#### 3.2.1 慢起伏Slow Fluctuation
- **定义**RCS值在一个雷达扫描周期内保持恒定但在不同扫描周期间独立变化
- **适用场景**:目标相对于雷达的姿态变化缓慢,或目标结构相对稳定
- **数学特性**$\sigma(t) = \sigma_i$,在第$i$个扫描周期内为常数
- **实现**使用缓存机制在同一扫描周期内返回相同的RCS值
#### 3.2.2 快起伏Fast Fluctuation
- **定义**RCS值在每个雷达脉冲间隔内都独立变化
- **适用场景**:目标快速机动或具有复杂的动态散射特性
- **数学特性**$\sigma(t)$ 在每个时刻都是独立的随机变量
- **实现**:每次调用都重新采样,不使用缓存
### 3.3 统计特性对比
| 模型类型 | 分布类型 | 期望值 | 方差 | 变异系数 | 起伏特性 |
|---------|---------|--------|------|----------|----------|
| Swerling I | 指数分布 | $\sigma$ | $\sigma^2$ | 1.0 | 慢起伏 |
| Swerling II | 指数分布 | $\sigma$ | $\sigma^2$ | 1.0 | 快起伏 |
| Swerling III | 卡方(4df) | $\sigma$ | $\sigma^2/2$ | 0.707 | 慢起伏 |
| Swerling IV | 卡方(4df) | $\sigma$ | $\sigma^2/2$ | 0.707 | 快起伏 |
**变异系数**Coefficient of Variation= $\sqrt{Var[X]}/E[X]$ 是衡量相对波动程度的重要指标:
- Swerling I/II变异系数为1.0,表示标准差等于均值,波动较大
- Swerling III/IV变异系数为0.707,表示波动相对较小,更稳定
### 3.4 模型选择的统计学依据
#### 3.4.1 基于目标复杂度
- **简单目标**(如球体、简单几何体)→ 指数分布Swerling I/II
- **复杂目标**(如多面体、具有内部结构的目标)→ 卡方分布Swerling III/IV
#### 3.4.2 基于运动特性
- **缓慢变化**(静止或匀速直线运动)→ 慢起伏Swerling I/III
- **快速变化**(机动飞行、快速转向)→ 快起伏Swerling II/IV
#### 3.4.3 实际应用中的选择策略
```
坦克/装甲车:
- 静止/匀速Swerling I简单几何慢变化
- 机动Swerling III复杂结构但变化相对较慢
直升机:
- 悬停/匀速Swerling II旋翼造成快速散射变化
- 机动Swerling IV复杂结构 + 快速姿态变化)
```
### 3.5 基于统计学理论的阈值设置指南
#### 3.5.1 理论基础
在毫米波制导系统中成功率阈值的设置需要考虑Swerling模型的统计特性。由于RCS值的随机波动即使目标确实存在也可能因为RCS瞬时值过小而导致SNR低于检测阈值造成"虚假丢失"。
**关键统计学考量**
- **指数分布的长拖尾特性**约37%的时间RCS值会低于平均值的1/e ≈ 0.37倍
- **卡方分布的相对稳定性**约30%的时间RCS值会低于平均值的0.5倍
- **检测概率与虚警概率的权衡**:阈值过高导致漏检,过低导致虚警
#### 3.5.2 实际案例分析
**场景描述**
毫米波制导系统在Lock模式下使用8帧滑动窗口进行目标稳定性判断。目标为坦克Swerling I模型平均RCS为10 dBsm但由于Swerling波动实际RCS在-5 dBsm到25 dBsm之间变化。
**问题**
原始成功率阈值设置为0.770%但观察到系统频繁从Lock模式回退到Search模式。
**统计学分析**
1. **Swerling I模型的概率特性**
```
P(RCS < 0.5 × 平均RCS) 0.393 (39.3%)
P(RCS < 0.3 × 平均RCS) 0.259 (25.9%)
P(RCS < 0.1 × 平均RCS) 0.095 (9.5%)
```
2. **8帧窗口中的期望失败率**
- 如果SNR阈值设置使得约30%的时间RCS不足以满足检测要求
- 在8帧中期望失败帧数 = 8 × 0.3 = 2.4帧
- 成功率 = (8 - 2.4) / 8 = 0.7 = 70%
3. **实际观测与理论的偏差**
- 实际失败率可能更高35-40%因为还要考虑
- 大气衰减的随机性
- 目标姿态微小变化
- 系统噪声的影响
- 实际成功率可能只有60-65%
**阈值调整策略**
```csharp
// 原始设置(过于严格)
private const double SUCCESS_RATE_THRESHOLD = 0.7; // 70%
// 基于Swerling I统计特性的调整
private const double SUCCESS_RATE_THRESHOLD = 0.5; // 50%
```
**调整理由**
1. **统计学依据**对于Swerling I模型即使在理想条件下由于指数分布的长拖尾特性也会有约30-40%的时间出现低RCS值
2. **工程实践**考虑到实际环境中的额外不确定性50%的阈值提供了更好的鲁棒性
3. **性能权衡**降低阈值会略微增加虚警概率但显著减少漏检概率
#### 3.5.3 不同Swerling模型的推荐阈值
| 目标类型 | Swerling模型 | 推荐成功率阈值 | 理由 |
|---------|-------------|---------------|------|
| 坦克/APC (静止) | Swerling I | 0.5 - 0.6 | 指数分布波动大需要较低阈值 |
| 坦克/APC (机动) | Swerling III | 0.6 - 0.7 | 卡方分布相对稳定可用较高阈值 |
| 直升机 (悬停) | Swerling II | 0.4 - 0.5 | 快起伏+指数分布最不稳定 |
| 直升机 (机动) | Swerling IV | 0.5 - 0.6 | 快起伏但卡方分布相对稳定 |
#### 3.5.4 动态阈值调整算法
**基于实时统计的自适应阈值**
```csharp
// 伪代码示例
private double CalculateAdaptiveThreshold(TargetSwerlingModelType modelType,
double observedVariance,
double theoreticalVariance)
{
double baseThreshold = modelType switch
{
TargetSwerlingModelType.Swerling_I => 0.55,
TargetSwerlingModelType.Swerling_II => 0.45,
TargetSwerlingModelType.Swerling_III => 0.65,
TargetSwerlingModelType.Swerling_IV => 0.55,
_ => 0.5
};
// 根据观测到的方差调整阈值
double varianceRatio = observedVariance / theoreticalVariance;
if (varianceRatio > 1.2) // 实际波动比理论预期大20%以上
{
baseThreshold *= 0.9; // 降低阈值10%
}
else if (varianceRatio < 0.8) // 实际波动比理论预期小20%以上
{
baseThreshold *= 1.1; // 提高阈值10%
}
return Math.Clamp(baseThreshold, 0.3, 0.8); // 限制在合理范围内
}
```
#### 3.5.5 实施建议
1. **初始设置**根据目标类型选择合适的基础阈值
2. **监控调整**通过日志分析实际成功率分布微调阈值
3. **环境适应**在不同天气条件下可能需要不同的阈值设置
4. **任务优先级**高价值目标可以使用更低的阈值以减少漏检风险
**配置文件示例**
```toml
# 基于Swerling模型的成功率阈值配置
[guidance.thresholds]
swerling_i_threshold = 0.5 # 坦克/APC 静止/匀速
swerling_ii_threshold = 0.45 # 直升机 悬停/匀速
swerling_iii_threshold = 0.65 # 坦克/APC 机动
swerling_iv_threshold = 0.55 # 直升机 机动
# 环境因子
weather_degradation_factor = 0.9 # 恶劣天气时降低阈值
high_value_target_factor = 0.8 # 高价值目标降低阈值
```
## 4. 类详细设计: `SwerlingRcsModel`
### 4.1 命名空间
`ThreatSource.Utils`
### 4.2 枚举 (Enums)
#### `TargetSwerlingModelType`
此枚举定义了支持的Swerling模型类型
* `Swerling_I`: 慢起伏模型RCS值服从指数分布卡方分布2个自由度)。RCS值在一个扫描周期内保持不变但在不同扫描周期之间独立变化
* `Swerling_II`: 快起伏模型RCS值服从指数分布卡方分布2个自由度)。RCS值在每个雷达脉冲之间都独立变化
* `Swerling_III`: 慢起伏模型RCS值服从卡方分布4个自由度等价于形状参数k=2的伽马分布。RCS值在一个扫描周期内保持不变但在不同扫描周期之间独立变化。
* `Swerling_IV`: 快起伏模型RCS值服从卡方分布4个自由度等价于形状参数k=2的伽马分布。RCS值在每个雷达脉冲之间都独立变化。
#### `MotionStateType`
此枚举定义了目标可能的运动状态用于辅助 `DecideSwerlingModel` 方法选择合适的Swerling模型
* `Static`: 目标静止
* `ConstantVelocity`: 目标进行匀速运动
* `Maneuvering`: 目标进行机动飞行/行驶
* `Other`: 其他未明确定义的运动状态
### 4.3 主要字段 (Fields)
* `private readonly Random _randomGenerator;`
* 一个 `System.Random` 类的实例用于生成模拟所需的随机数其种子可以在构造函数中指定以实现可复现的仿真结果
* `private readonly Dictionary<string, double> _slowFluctuationRcsCache;`
* 一个字典用于缓存慢起伏模型Swerling I III在当前扫描周期内的RCS值
* `string`: 目标的唯一ID (`targetId`)。
* `double`: 该目标在当前扫描周期缓存的RCS值单位平方米)。
### 4.4 构造函数 (Constructor)
* `public SwerlingRcsModel(int? seed = null)`
* 初始化 `_randomGenerator` 实例如果提供了 `seed` 参数则使用该种子否则使用默认的基于时间的种子
* 初始化 `_slowFluctuationRcsCache` 为一个新的空字典
### 4.5 核心公共方法 (Core Public Method)
* `public double GetRealtimeRcs(string targetId, EquipmentType equipmentType, MotionStateType motionState, double averageRcsValue, bool isNewScanPeriod)`
* **参数**:
* `targetId (string)`: 目标的唯一标识符对于慢起伏模型此ID用于在同一扫描周期内缓存和复用RCS值
* `equipmentType (EquipmentType)`: 目标类型如Tank, Helicopter等用于内部模型选择
* `motionState (MotionStateType)`: 目标的运动状态用于内部模型选择
* `averageRcsValue (double)`: 目标的平均RCS值单位平方米作为所选统计分布的参数
* `isNewScanPeriod (bool)`: 指示当前调用是否代表一个新的扫描周期的开始此参数仅对慢起伏模型有意义用于决定是否应重新采样RCS值
* **内部逻辑**:
1. 调用 `DecideSwerlingModel(equipmentType, motionState)` 确定要使用的 `TargetSwerlingModelType`
2. 参数验证
* 如果选择的是慢起伏模型Swerling I III `targetId` 为空或null则抛出 `ArgumentNullException`
* 如果 `averageRcsValue` 小于或等于0则直接返回0.0不进行采样
3. 根据确定的 `TargetSwerlingModelType` 执行相应的采样逻辑
* **`Swerling_I` (慢起伏, 指数分布)**:
* 如果 `isNewScanPeriod` `true` 或者 `_slowFluctuationRcsCache` 中不存在 `targetId` 对应的项则调用 `SampleExponentialDistribution(averageRcsValue)` 生成新的RCS值并将其存储或更新到缓存中 `targetId` 为键)。
* 否则直接从缓存中读取并返回之前存储的RCS值
* **`Swerling_II` (快起伏, 指数分布)**:
* 每次调用都直接执行 `SampleExponentialDistribution(averageRcsValue)` 并返回新的RCS值不使用缓存
* **`Swerling_III` (慢起伏, 卡方4自由度/Gamma k=2)**:
* 与Swerling I类似但调用 `SampleGammaDistributionK2(averageRcsValue)` 进行采样同样处理缓存逻辑
* **`Swerling_IV` (快起伏, 卡方4自由度/Gamma k=2)**:
* 每次调用都直接执行 `SampleGammaDistributionK2(averageRcsValue)` 并返回新的RCS值不使用缓存
* 如果内部确定的模型类型不被支持理论上不应发生则抛出 `ArgumentOutOfRangeException`
* **返回值**:
* 模拟计算得到的瞬时RCS值单位平方米)。
### 4.6 内部辅助方法 (Private Helper Methods)
* `private double SampleExponentialDistribution(double sigmaAverage)`
* **用途**: 为Swerling I型和II型模型从指数分布中采样RCS值
* **参数**: `sigmaAverage` (目标的平均RCS值即指数分布的尺度参数)。
* **返回**: 一个根据指数分布采样得到的RCS值如果 `sigmaAverage` 非正则返回0.0
* **实现**: 使用逆变换采样法 `(-sigmaAverage * Math.Log(1.0 - u))`其中 `u` `_randomGenerator.NextDouble()` 产生的 (0,1) 均匀分布随机数
* `private double SampleGammaDistributionK2(double sigmaAverage)`
* **用途**: 为Swerling III型和IV型模型从形状参数k=2的伽马分布中采样RCS值。
* **参数**: `sigmaAverage` (目标的平均RCS值)。
* **返回**: 一个根据伽马分布(k=2)采样得到的RCS值。如果 `sigmaAverage` 非正则返回0.0
* **实现**: 通过对两个独立的尺度参数为 `sigmaAverage / 2.0` 的指数分布随机变量求和来实现这两个指数分布的采样通过调用 `SampleExponentialDistribution` 完成
* `private static TargetSwerlingModelType DecideSwerlingModel(EquipmentType equipmentType, MotionStateType motionState)`
* **用途**: 根据目标类型和运动状态决定应采用的Swerling模型类型
* **输入**:
* `equipmentType (EquipmentType)`: 目标装备类型
* `motionState (MotionStateType)`: 目标运动状态
* **输出**: `TargetSwerlingModelType`
* **决策规则**:
* `EquipmentType.Tank` `EquipmentType.APC`:
* `motionState` `Maneuvering`则返回 `TargetSwerlingModelType.Swerling_III`
* 否则返回 `TargetSwerlingModelType.Swerling_I`
* `EquipmentType.Helicopter`:
* `motionState` `Maneuvering`则返回 `TargetSwerlingModelType.Swerling_IV`
* 否则返回 `TargetSwerlingModelType.Swerling_II`
* 对于 `EquipmentType.Unknown` 或其他未明确处理的 `equipmentType`
* 返回 `TargetSwerlingModelType.Swerling_I` 并通过 `Trace.TraceWarning` 记录一条警告信息
### 4.7 缓存管理方法 (Cache Management Methods)
* `public void ClearCachedRcs(string targetId)`
* **功能**: 从慢起伏模型的RCS缓存 (`_slowFluctuationRcsCache`) 中移除指定 `targetId` 的条目
* 主要用于当一个慢起伏目标不再被跟踪或其状态需要重置时
* `public void ClearAllCachedRcs()`
* **功能**: 清除慢起伏模型RCS缓存中的所有条目
* 用于在仿真重置扫描周期结束或需要完全刷新所有慢起伏目标状态时调用
## 5. 集成与使用场景 (以 `MillimeterWaveGuidanceSystem` 为例)
`SwerlingRcsModel` 类主要被 `MillimeterWaveGuidanceSystem` 用于在目标探测过程中为每个潜在目标计算一个动态的RCS值
### 5.1 实例化
`MillimeterWaveGuidanceSystem` 的构造函数中会创建一个 `SwerlingRcsModel` 的实例
```csharp
swerlingRcsModel = new SwerlingRcsModel();
```
这里使用了无参构造函数因此随机数生成器会使用默认种子
### 5.2 `GetRealtimeRcs` 调用
`MillimeterWaveGuidanceSystem` `TryDetectAndTrackTarget` 方法内部当计算每个目标的SNR之前会调用 `GetRealtimeRcs` 来获取其波动后的RCS值
```csharp
// 假设 rcsLinear 是从目标 RcsPattern 或默认值获取的平均RCS
rcsLinear = swerlingRcsModel.GetRealtimeRcs(
target.Id, // 目标唯一ID
target.Properties.Type, // 目标装备类型
motionState, // 运动状态 (根据目标速度判断为 Static 或 ConstantVelocity)
rcsLinear, // 平均RCS值
false // <<-- 注意isNewScanPeriod 当前硬编码为 false
);
```
**关键点**
* **`motionState` 参数**: `MillimeterWaveGuidanceSystem` 的当前实现中`motionState` 参数在调用 `GetRealtimeRcs` 前被确定它首先被初始化为 `MotionStateType.Static`如果检测到目标 `target.KState.Speed` 大于 `0.1` `motionState` 被更新为 `MotionStateType.ConstantVelocity`这意味着 `SwerlingRcsModel` 内部的 `DecideSwerlingModel` 方法会根据这一有限的动态信息选择Swerling模型例如坦克/APC 会在 `Static` `ConstantVelocity` 两种情况下都选用Swerling I直升机则都选用Swerling II因为 `DecideSwerlingModel` `ConstantVelocity` 未被特殊处理以触发Swerling III/IV)。
* **`averageRcsValue` 参数**: 使用的是从目标自身 `RcsPattern` (如果存在且有效) 计算得到的或一个默认的RCS值线性单位平方米作为输入Swerling模型在此基础上施加统计波动
* **`isNewScanPeriod` 参数**: 此参数在 `MillimeterWaveGuidanceSystem` 的调用中硬编码为 `false`
### 5.3 慢起伏缓存管理与扫描周期
尽管 `isNewScanPeriod` 在单次 `GetRealtimeRcs` 调用时被硬编码为 `false`但慢起伏模型的RCS值并不会永久不变。`MillimeterWaveGuidanceSystem` 通过其自身的扫描逻辑间接管理RCS的刷新
* `UpdateConicalScan` 方法中有一个 `scanCycleTimer` 用于跟踪当前扫描的持续时间
* `scanCycleTimer` 达到一个完整扫描周期所需的时间 ( `360 / config.ScanAngularSpeedDeg` 计算得到) 会调用 `swerlingRcsModel.ClearAllCachedRcs()`
* 这个调用会清空所有慢起伏目标的缓存RCS值因此在下一个扫描周期开始后当这些目标再次被 `GetRealtimeRcs` 处理时由于缓存中已无它们的数据即使 `isNewScanPeriod` 仍为 `false``SwerlingRcsModel` 内部的逻辑 (`!_slowFluctuationRcsCache.TryGetValue(...)`) 会触发一次新的采样
这种机制有效地为所有慢起伏目标实现了基于扫描周期的RCS刷新
### 5.4 对SNR计算的影响
`SwerlingRcsModel` 生成的波动RCS值`rcsLinear`随后被用于 `MillimeterWaveGuidanceSystem.CalculateSNR` 方法中RCS值的波动会直接导致计算出的信噪比SNR产生相应的波动这进一步影响了目标的探测概率进入跟踪模式的条件以及最终的锁定稳定性使得仿真更接近实际雷达系统面临的情况
## 6. 当前实现的假设与限制
* **运动状态硬编码**: 如前所述`MillimeterWaveGuidanceSystem` 在调用 `GetRealtimeRcs` `motionState` 参数硬编码为 `MotionStateType.Static`这限制了 `SwerlingRcsModel` 根据目标实际运动状态动态选择Swerling I/III或II/IV模型的能力当前选择主要基于 `equipmentType`且总是对应于非机动情况Swerling I II)。
* **运动状态判断的局限性**: `MillimeterWaveGuidanceSystem` 目前根据目标速度是否大于一个阈值 (`0.1`) 来区分 `MotionStateType.Static` `MotionStateType.ConstantVelocity`它尚未实现对 `MotionStateType.Maneuvering` 机动状态的判断因此`SwerlingRcsModel` `DecideSwerlingModel` 方法目前无法根据目标是否在进行机动来选择Swerling III IV 模型对于非机动包括Static和ConstantVelocity它将为坦克/APC选择Swerling I为直升机选择Swerling II
* **`isNewScanPeriod` 硬编码**: `isNewScanPeriod` 参数在调用时硬编码为 `false`慢起伏模型的RCS刷新完全依赖于 `MillimeterWaveGuidanceSystem` 内部周期性地调用 `ClearAllCachedRcs()`
* **基于平均RCS的波动**: Swerling模型是在一个外部提供的 `averageRcsValue` 基础上引入统计波动 `averageRcsValue` 本身可能是一个静态值或基于目标朝向的确定性计算结果Swerling模型则在此确定性平均值周围产生随机起伏
## 7. 未来可能的改进 (可选)
* **增强运动状态判断**: 当前 `motionState` 主要区分静止和广义的非机动匀速未来可以考虑引入更复杂的逻辑来判断目标的 `MotionStateType.Maneuvering` (机动)状态例如基于目标加速度或角速度的变化这将使得 `SwerlingRcsModel` 能够更精确地为机动目标选择Swerling III/IV模型
* **细化 `isNewScanPeriod` 控制**: 如果未来需要更精细或针对特定目标的RCS刷新控制例如某些目标可能比其他目标更快地改变其统计特性可以考虑更灵活地使用 `isNewScanPeriod` 参数而不是仅依赖全局的 `ClearAllCachedRcs()`