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

6.9 KiB
Raw Permalink Blame History

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。