Files
Inbox/雷达前端模拟器 (SDR-FES MockDACS) 架构设计文档.md

167 lines
6.9 KiB
Markdown
Raw Permalink Normal View History

2025-12-11 07:24:36 +08:00
---
title: "**雷达前端模拟器 (SDR-FES / MockDACS) 架构设计文档**"
---
# **雷达前端模拟器 (SDR-FES / MockDACS) 架构设计文档**
版本: v1.0
日期: 2025-11-29
适用范围: 软件定义雷达前端模拟器 (MockDACS) 的设计、开发与演进。
## **1\. 架构愿景与设计哲学 (Vision & Philosophy)**
本项目旨在构建一个 **高性能、云原生、配置驱动** 的雷达前端仿真平台。它不仅是一个简单的测试工具,更是一个可编排的 **"虚拟阵面"**。
### **1.1 核心设计原则 (Design Principles)**
- **确定性 (Determinism)**: 在故障注入模式下,给定相同的随机种子 (Seed) 和配置,必须产生完全一致的故障序列,确保测试的可重现性。
- **极简主义 (Minimalism)**: 核心发送路径 (Hot Path) 零内存分配、零锁竞争、零系统调用(除 sendto 外)。
- **配置即代码 (Configuration as Code)**: 所有行为(物理参数、网络拓扑、故障剧本)均通过 YAML 定义,支持动态热加载。
- **可观测性 (Observability)**: 模拟器自身必须暴露详细的 Prometheus 指标,不仅要"发得快",还要能自证"发得准"。
### **1.2 关键性能指标 (KPIs)**
- **吞吐量**: 单实例支持 **10 Gbps** 线速发送。
- **时序精度**: 脉冲重复间隔 (PRI) 抖动 **\< 10 µs** (依赖 CPU 亲和性)。
- **并发能力**: 单进程支持 **16+** 个虚拟站点并发模拟。
## **2\. 系统逻辑架构 (Logical Architecture)**
系统采用 **分层解耦 (Layered Decoupling)** 架构,自顶向下分为四个核心层级:
| 层级 | 模块名称 | 职责描述 | 关键技术 |
| :---- | :---- | :---- | :---- |
| **L4** | **控制与编排层** (Control & Orchestration) | 解析 YAML 配置,管理生命周期,编排多站点的启动与停止。 | yaml-cpp, CLI11 |
| **L3** | **业务逻辑层** (Business Logic) | **数据生成器**: 产生 I/Q 波形 (Synthetic/Replay)。 **协议封装器**: 组装 v2.1 协议帧。 | Strategy Pattern, Factory |
| **L2** | **故障注入层** (Chaos Layer) | 拦截标准数据包,根据概率模型执行丢包、篡改、乱序、时跳。 | std::random, Middleware |
| **L1** | **基础传输层** (Transport Layer) | **流量整形**: 自旋锁控制发送速率。 **I/O 发送**: 高性能 UDP 发送。 | BusyWait, sendto, Affinity |
## **3\. 核心子系统详解 (Subsystem Detail)**
### **3.1 物理仿真引擎 (Physics Engine)**
负责生成"干净"的原始数据。设计为可插拔的 **策略模式 (Strategy Pattern)**
- **ISourceStrategy 接口**:
- generate(PulseIndex) \-\> ComplexBuffer
- **实现类**:
- **SyntheticSource (合成源)**: 基于数学公式生成 LFM (线性调频)、单频脉冲、噪声背景。参数:带宽, 脉宽, 信噪比。
- **ReplaySource (回放源)**: \[Phase 6\] 读取 HDF5/PCAP 文件,按时间戳回放真实雷达采集数据。支持 循环播放 和 速率倍增。
### **3.2 协议栈封装器 (Protocol Stack)**
负责将原始 I/Q 数据封装为符合 **FES-SPS v2.1** 标准的 UDP 数据包。
- **帧构建器 (PacketBuilder)**:
- 维护 RollingCounter (Sequence ID)。
- 执行 Endianness 转换 (Header: Big-Endian, Payload: Little-Endian)。
- 计算 **CRC32c** 校验和 (SSE4.2/NEON 硬件加速)。
- **优化**: 使用 **零拷贝内存池 (PacketPool)**,避免每次发送都 new/delete。
### **3.3 故障注入中间件 (Chaos Middleware)**
位于协议层与传输层之间的"拦截器"。
- **ChaosPipeline**:
- 每个站点持有一个独立的 Pipeline。
- **DropFilter**: 随机丢弃。
- **CorruptFilter**: 翻转比特或修改 CRC。
- **ReorderFilter**: 维护一个单包或多包的 DelayBuffer实现乱序发送。
- **TimeJumpInjector**: 修改包头时间戳,模拟时钟故障。
### **3.4 高性能传输核心 (Transport Core)**
系统的"引擎",负责以精确的时序将比特流送入网线。
- **TrafficShaper (流量整形器)**:
- 基于 rdtsc 或 std::chrono::steady\_clock 实现微秒级自旋锁。
- 算法:**令牌桶 (Token Bucket)** 或 **固定间隔 (Fixed Interval)**。当前基线为固定间隔。
- **UdpTransmitter**:
- 配置 SO\_SNDBUF (\> 8MB)。
- 设置 IP\_TOS (DSCP=EF) 用于控制帧。
- 启用 IP\_MTU\_DISCOVER 支持 Jumbo Frame。
- **多线程模型**: 每个站点绑定一个独立的 std::thread并强制绑定到独立的 CPU Core (pthread\_setaffinity\_np)。
## **4\. 动态配置系统设计 (Configuration System)**
采用 **YAML** 作为唯一配置源。
```yaml
\# mock\_config.yaml 示例结构
simulation:
duration\_sec: 60
global\_seed: 12345
stations:
\id: 1
role: "DACS-1"
target: "192.168.1.100:12345"
cpu\_core: 1
prf: 2000
source:
type: "synthetic"
waveform: "LFM"
chaos:
drop\_rate: 0.0
\id: 2
role: "DACS-2"
target: "192.168.1.100:12345"
cpu\_core: 2
prf: 2000
source:
type: "synthetic"
chaos:
drop\_rate: 0.05
corrupt\_rate: 0.01
```
- **热加载 (Hot-Reload)**:
- 监听文件系统事件 (inotify) 或通过 HTTP Admin 接口触发配置重载。
- 采用 **RCU (Read-Copy-Update)** 模式更新配置,确保发送线程无锁读取。
## **5\. 目录结构规范 (Project Structure)**
遵循现代 CMake C++ 工程标准。
```txt
RadarSimulator/
├── CMakeLists.txt \# 根构建脚本
├── common/ \# \[库\] 通用基础库 (Header-only or Static)
│ ├── include/
│ │ ├── protocol.h \# v2.1 协议定义
│ │ ├── crc32.h \# 硬件校验算法
│ │ ├── utils.h \# 计时、绑核工具
│ │ └── chaos.h \# 故障注入引擎
│ └── CMakeLists.txt
├── core/ \# \[库\] 模拟器核心逻辑 (New\!)
│ ├── include/
│ │ ├── source/ \# 数据源策略 (Synthetic/Replay)
│ │ ├── transport/ \# 发送与流控
│ │ └── config/ \# 配置解析
│ ├── src/
│ └── CMakeLists.txt
├── simulator/ \# \[应用\] 模拟器主程序 (CLI入口)
│ ├── main.cpp
│ └── CMakeLists.txt
├── tools/ \# \[工具\] 接收验证器、日志分析器
│ ├── receiver.cpp
│ └── CMakeLists.txt
├── configs/ \# 默认配置文件
│ └── default.yaml
├── docker/ \# 容器化相关
│ ├── Dockerfile
│ └── docker-compose.yml
└── tests/ \# 单元测试 (GTest)
```
## **6\. 演进路线图 (Roadmap to v3.0)**
- **v1.0 (Current)**: 硬编码参数,基础收发,基础故障注入。
- **v2.0 (Next Step)**:
- 引入 yaml-cpp实现全配置驱动。
- 重构代码结构,分离 core 库,应用策略模式。
- **v3.0 (Future)**:
- 实现数据回放 (ReplaySource)。
- 提供 HTTP/gRPC 控制接口,支持 Web UI 实时调整参数。
- 集成 Prometheus Exporter。