refactor: 移除 PingPongBuffer,简化模块接口 主要改动: 移除 PingPongBuffer 作为独立模块,改为模块内寄存器 DopplerStream/ED 接收整批数据,内部迭代处理 简化 RadarModuleConfigs/SonarModuleConfigs,移除连接配置 精简测试:只对比仿真与 reference.py 结果 节省 50% 存储空间 Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
refactor: 移除 PingPongBuffer,简化模块接口
主要改动:
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
脉冲多普勒雷达和主动声纳信号处理仿真平台,用于架构验证和硬件统计。
sim/ # 通用基础设施 ├── types.py # 定点数类型、转换、饱和 ├── metrics.py # 度量收集(ROM/RAM/COMPUTE 分类) ├── sdf.py # SDF 数据流图(SDFGraph) ├── pipeline.py # 延迟建模(DelayLine + Pipeline) ├── stream_fsm.py # Stream 状态机(valid/ready 握手) ├── pingpong.py # Ping-Pong 双缓冲 ├── rom.py # 只读存储器(预计算系数) └── report.py # 报告生成 app/ ├── common/ │ ├── funcs.py # 共享计算函数 │ ├── types.py # 通用数据类型 │ ├── input_source.py # 输入源 │ ├── output_collector.py # 输出收集器 │ └── signal.py # 信号生成工具 ├── radar/ │ ├── signal.py # RadarParams 和信号生成 │ ├── configs.py # 模块配置(dataclass) │ ├── processor.py # SDF 处理器 │ ├── simulation.py # 仿真入口 │ ├── reference.py # 浮点参考实现 │ └── modules/ # 硬件模块 │ ├── matched_filter_stream.py # MF(FFT→CMUL→IFFT) │ ├── time_beamformer_stream.py # 时域 BF │ ├── doppler_stream.py # Doppler 处理 │ └── energy_detection_stream.py # 能量检测 └── sonar/ ├── signal.py # SonarParams 和信号生成 ├── configs.py # 模块配置 ├── processor.py # SDF 处理器 ├── simulation.py # 仿真入口 ├── reference.py # 浮点参考实现 └── modules/ ├── matched_filter_freq_stream.py # 频域 MF ├── freq_beamformer_stream.py # 频域 BF └── ifft_energy_detection_stream.py # IFFT + 能量检测 docs/ # 设计文档 ├── MODULE_DESIGN.md # 模块设计(SDF 框架、Stream 协议) └── SIM_FRAMEWORK.md # 框架设计 output/ # 仿真输出 ├── radar/ │ └── images/ # 输出图片 └── sonar/ └── images/ tests/ # 测试 ├── test_sdf.py # SDF 框架测试 ├── test_pipeline.py # Pipeline 测试 ├── test_pingpong.py # PingPong 缓冲测试 ├── test_types.py # 定点类型测试 ├── test_radar_processor.py # 雷达处理器测试 ├── test_sonar_processor.py # 声纳处理器测试 └── test_algorithm_correctness.py # 检测精度测试
┌─────────────────────────────────────────────────────┐ │ Processor (处理器层) │ │ - 管理输入输出 │ │ - 预计算系数(ROM) │ │ - 收集结果 │ ├─────────────────────────────────────────────────────┤ │ SDFGraph (数据流图层) │ │ - 模块连接 │ │ - PingPong 缓冲管理 │ │ - 调度执行(拓扑顺序) │ ├─────────────────────────────────────────────────────┤ │ stream_fsm (状态机层) │ │ - valid/ready 握手 │ │ - pending output 管理 │ │ - 背压传播 │ ├─────────────────────────────────────────────────────┤ │ Pipeline / _ctrl_fsm (控制层) │ │ - Pipeline: 延迟建模,1:1 数据流 │ │ - _ctrl_fsm: 累加控制,N:1 数据流 │ ├─────────────────────────────────────────────────────┤ │ _compute (计算层) │ │ - fft_compute, cmul_compute, abs_sq_compute 等 │ │ - ROM 系数读取 │ └─────────────────────────────────────────────────────┘
def tick(self, data, valid_in, ready_in=True, **params) -> tuple[Optional[Output], bool, bool]: """ 处理一个数据(Stream 协议) Returns: (output, valid_out, ready_out): 输出数据、有效标志、可接收标志 """
雷达周期级:
MF → PP1 → BF → PP2 → Doppler → PP3 → ED MF: Pipeline(FFT→CMUL→IFFT) BF: 内部循环处理所有角度,累积 num_channels 个通道后输出 Doppler: SHIFT→CMUL→ACC,累积 num_pulses 个脉冲后输出 ED: Pipeline(|x|²)
声纳周期级:
MF → PP1 → BF → PP2 → IE MF: Pipeline(FFT→CMUL) BF: 内部循环处理所有角度,累积 num_channels 个通道后输出 IE: SHIFT→IFFT→|x|²
pip install numpy matplotlib pytest
# 雷达仿真 python -m app.radar.algo_serial --no-plot python -m app.radar.simulation --no-plot # 声纳仿真 python -m app.sonar.algo_serial --no-plot python -m app.sonar.simulation --no-plot
--theta
--range
--velocity
--snr
--no-plot
from app.radar.configs import RadarModuleConfigs from app.radar.modules import MFConfig, BFConfig, DopplerConfig, EDConfig configs = RadarModuleConfigs( mf=MFConfig(parallelism=4), bf=BFConfig(channel_parallelism=4, angle_parallelism=64), doppler=DopplerConfig(parallelism=64, angle_parallelism=64), ed=EDConfig(parallelism=64), )
from sim.types import FixedPointConfig, to_fixed, to_float config = FixedPointConfig.default() # 16位整数 + 14位小数 signals_q = to_fixed(signals, config) signals = to_float(signals_q, config)
延迟参数可通过配置类调整。
python -m pytest tests/ -v
测试覆盖:
====================================================================== 主动声纳周期级仿真(SDF 框架) ====================================================================== 系统参数: 通道数: 8 FFT点数: 4096 角度范围: [-60, 60]°, 121点 目标: 角度=20°, 距离=30m ====================================================================== 检测结果 ====================================================================== 检测: 角度=20.0°, 距离=30.0m 目标: 角度=20°, 距离=30m 仿真耗时: 0.312s 总周期数: 156
MIT License
信号处理仿真平台
脉冲多普勒雷达和主动声纳信号处理仿真平台,用于架构验证和硬件统计。
特性
目录结构
核心设计
五层架构
Stream 协议
数据流
雷达周期级:
声纳周期级:
快速开始
安装依赖
运行仿真
命令行参数
--theta--range--velocity--snr--no-plot配置示例
定点配置
延迟模型
延迟参数可通过配置类调整。
测试
测试覆盖:
输出示例
许可证
MIT License