Files
Inbox/雷达前端模拟器 (SDR-FES MockDACS) 架构设计文档.md
2025-12-11 07:24:36 +08:00

167 lines
6.9 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.

---
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。