|
Test / test (push) Failing after 20s
Details
- 删除所有 deprecated 注释和重复导入行 - 替换 MFConfig/BFConfig/EDConfig 为完整命名 - 修复导入语法错误 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .claude | ||
| .github/workflows | ||
| app | ||
| docs | ||
| exploration | ||
| sim | ||
| .gitignore | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| LICENSE | ||
| README.md | ||
| pytest.ini | ||
README.md
信号处理仿真平台
脉冲多普勒雷达和主动声纳信号处理仿真平台,用于架构验证和硬件资源统计。
核心价值:
- 在 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
详细文档
-
框架文档:sim/README.md
- Stream 协议 - valid/ready 握手、背压传播
- Pipeline - 延迟建模、DelayLine
- Accumulator - 多槽位累加器
- SDFGraph - 数据流图调度
-
雷达文档:app/radar/docs/ARCHITECTURE.md
- 数据流详解
- MF 模块 | BF 模块
- Doppler 模块 | ED 模块
许可证
MIT License