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