6.9 KiB
6.9 KiB
title
| 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 作为唯一配置源。
\# 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++ 工程标准。
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。