目录

信号处理仿真平台

脉冲多普勒雷达和主动声纳信号处理仿真平台,用于架构验证硬件资源统计

核心价值

  • 在 FPGA/ASIC 实现前,验证算法正确性和硬件架构可行性
  • 统计 ROM、RAM、DSP 等硬件资源需求
  • 建模流水线延迟、背压传播等硬件时序行为

应用场景

  • 架构设计验证:在硬件实现前验证数据流设计是否正确
  • 资源评估:统计各模块的 ROM/RAM/DSP 需求,指导硬件规划
  • 延迟分析:计算端到端延迟,评估实时性
  • 并行度探索:调整并行度参数,找到性能/资源最优解
  • 算法验证:对比定点实现与浮点参考,评估精度损失

两类仿真

层级 目的 特点
算法级 (algo_*) 验证算法正确性 纯函数调用,瞬时计算,无时序
周期级 (simulation) 模拟硬件时序 tick 推进,延迟建模,背压传播

算法级:快速验证算法,输出与 MATLAB/理论一致 周期级:精确模拟硬件行为,输出与 Verilog 仿真一致

雷达处理流程

脉冲多普勒雷达信号处理链路:

输入 [脉冲, 通道, 采样点]
    ↓ 匹配滤波 (FFT → CMUL → IFFT)
    ↓ 时域波束形成 (CMUL → 累加)
    ↓ 多普勒处理 (SHIFT → CMUL → 累加)
    ↓ 能量检测 (|x|²)
输出 [角度, 多普勒, 距离]

检测结果:角度-多普勒-距离三维功率图,可检测目标的角度、速度、距离。

声纳处理流程

主动声纳频域波束形成(宽带处理):

输入 [通道, 采样点]
    ↓ 频域匹配滤波 (FFT → CMUL)
    ↓ 频域波束形成 (CMUL → 累加)
    ↓ IFFT + 能量检测 (SHIFT → IFFT → |x|²)
输出 [角度, 距离]

检测结果:角度-距离二维功率图,可检测目标的角度和距离。

与雷达的区别

  • 波束形成在频域进行(宽带处理)
  • 无多普勒维度(单脉冲)
  • 相位系数是频率的函数

快速开始

安装

pip install numpy matplotlib pytest

运行雷达仿真

# 算法级(快速验证)
python -m app.radar.algo_serial --theta 20 --range 3000 --velocity 10

# 周期级(硬件仿真)
python -m app.radar.simulation --theta 20 --range 3000 --velocity 10

运行声纳仿真

# 算法级
python -m app.sonar.algo_serial --theta 20 --range 30

# 周期级
python -m app.sonar.simulation --theta 20 --range 30

命令行参数

参数 雷达默认 声纳默认 说明
--theta 20 20 目标角度 (°)
--range 3000 30 目标距离 (m)
--velocity 10 - 目标速度 (m/s),仅雷达
--snr 20 20 信噪比 (dB)
--no-plot - - 不显示图像

代码示例

Python API 使用

from app.radar.signal import RadarParams, generate_radar_signals
from app.radar.simulation import RadarSimulation
from sim.types import FixedPointConfig, to_fixed

# 1. 设置参数
params = RadarParams(
    target_angle_deg=20,      # 目标角度
    target_range_m=3000,      # 目标距离
    target_velocity_mps=10,   # 目标速度
    snr_db=20,                # 信噪比
)

# 2. 生成信号
signals, _ = generate_radar_signals(params)
config = FixedPointConfig.default()
signals_q = to_fixed(signals, config)

# 3. 运行仿真
simulation = RadarSimulation(params, config)
result = simulation.run(signals_q)

# 4. 获取结果
power = result['power']           # 检测功率
metrics = simulation.metrics      # 硬件资源统计
print(metrics.summary())

配置并行度

from app.radar.configs import RadarModuleConfigs
from app.radar.modules import MFConfig, BFConfig, DopplerConfig, EDConfig

configs = RadarModuleConfigs(
    mf=MFConfig(parallelism=4),                          # MF 4 通道并行
    bf=BFConfig(channel_parallelism=4, angle_parallelism=64),  # BF 4通道×64角度
    doppler=DopplerConfig(angle_parallelism=64, doppler_parallelism=64),
    ed=EDConfig(parallelism=64),
)

simulation = RadarSimulation(params, config, module_configs=configs)

目录结构

sim/                          # 框架层(硬件仿真基础设施)
├── types.py                  # 定点数类型、转换、饱和
├── metrics.py                # 硬件度量收集(ROM/COMPUTE 分类)
├── sdf.py                    # SDF 数据流图
├── pipeline.py               # Pipeline 延迟建模
├── accumulator.py            # 多槽位累加器
├── pingpong_buffer.py        # Ping-Pong 双缓冲
├── rom.py                    # 只读存储器
├── module.py                 # StreamModule 基类
├── docs/                     # 框架文档
└── tests/                    # 框架测试

app/
├── radar/                    # 雷达应用(自包含)
│   ├── signal.py             # RadarParams 和信号生成
│   ├── funcs.py              # 计算函数(FFT、IFFT、CMUL 等)
│   ├── configs.py            # 模块配置(dataclass)
│   ├── processor.py          # SDF 处理器
│   ├── simulation.py         # 仿真驱动
│   ├── modules/              # 硬件模块
│   │   ├── matched_filter_stream.py      # MF(FFT→CMUL→IFFT)
│   │   ├── time_beamformer_stream.py     # 时域 BF
│   │   ├── doppler_stream.py             # Doppler 处理
│   │   └── energy_detection_stream.py    # 能量检测
│   ├── docs/                 # 雷达文档
│   └── tests/                # 雷达测试
└── sonar/                    # 声纳应用(自包含)
    ├── signal.py             # SonarParams 和信号生成
    ├── funcs.py              # 计算函数
    ├── configs.py            # 模块配置
    ├── processor.py          # SDF 处理器
    ├── simulation.py         # 仿真驱动
    ├── modules/              # 声纳模块
    │   ├── matched_filter_freq_stream.py     # 频域 MF
    │   ├── freq_beamformer_stream.py         # 频域 BF
    │   └── ifft_energy_detection_stream.py   # IFFT + 能量检测
    ├── docs/                 # 声纳文档
    └── tests/                # 声纳测试

output/                       # 仿真输出
├── radar/                    # 雷达报告和图片
└── sonar/                    # 声纳报告和图片

核心设计

五层架构

┌─────────────────────────────────────────────────────┐
│              Processor (处理器层)                    │
│  - 管理输入输出、预计算系数、收集结果                 │
├─────────────────────────────────────────────────────┤
│              SDFGraph (数据流图层)                   │
│  - 模块连接、调度执行、背压传播                       │
├─────────────────────────────────────────────────────┤
│              StreamModule (模块基类)                 │
│  - data_out, valid_out 缓存、reset() 接口           │
├─────────────────────────────────────────────────────┤
│              Pipeline / Accumulator (控制层)         │
│  - Pipeline: 延迟建模,1:1 数据流                    │
│  - Accumulator: N:1 累加控制                        │
├─────────────────────────────────────────────────────┤
│              _compute (计算层)                       │
│  - fft_compute, cmul_compute, abs_sq_compute 等      │
└─────────────────────────────────────────────────────┘

Stream 协议

所有模块实现统一的 Stream 协议:

def step(data_in, valid_in, ready_in) -> (data_out, valid_out, ready_out):
    """
    valid/ready 握手协议:
    - valid_out && ready_in → 传输发生
    - valid_out && !ready_in → 背压,保持输出
    """

延迟模型

模块 默认延迟 说明
MatchedFilterStream 25 FFT(12) + CMUL(1) + IFFT(12)
MatchedFilterFreqStream 19 FFT(18) + CMUL(1)
TimeBeamformerStream 累积 跨通道累加
FreqBeamformerStream 累积 跨通道累加
DopplerStream 累积 跨脉冲累加
IFFTEnergyDetectionStream 20 SHIFT(1) + IFFT(18) + ED(1)

测试

python -m pytest sim/tests/ app/radar/tests/ app/sonar/tests/ -v

测试覆盖:

  • SDF 框架核心(Stream 协议、Pipeline、Accumulator、PingPong)
  • 定点数转换精度
  • 各硬件模块正确性
  • 雷达/声纳检测精度
  • 算法级与周期级输出一致性

输出示例

======================================================================
脉冲多普勒雷达周期级仿真
======================================================================

系统参数:
  脉冲数: 32
  通道数: 8
  FFT点数: 1024
  角度范围: [-60, 60]°, 241点
  目标: 角度=20°, 距离=3000m, 速度=10m/s

======================================================================
检测结果
======================================================================
  检测: 角度=20.0°, 距离=3002m, 速度=10.0m/s
  目标: 角度=20°, 距离=3000m, 速度=10m/s

======================================================================
硬件资源统计
======================================================================
ROM 存储:
  s_conj:         8,192 bytes (8.0 KB)
  phase_shifts:  15,488 bytes (15.1 KB)
  twiddles:     524,288 bytes (512.0 KB)
  总计:        547,968 bytes (535.1 KB)

仿真耗时: 1.234s
总周期数: 5,120

详细文档

许可证

MIT License

关于
16.8 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802032778号