Astrometry.net 与同类星图识别算法的 FPGA 实现调研
详细拆解三个已发表实现,并扩展检索星敏感器、全天区星图识别、质心提取、神经网络识别与容错前端。报告重点回答:哪些环节适合硬化、已达到什么性能、资源花在哪里、瓶颈何在,以及完整 Astrometry.net 硬化的现实上限。
执行摘要
案例一:匹配核最硬
Wu 等把已提取星点到恒星身份识别基本全部放入 Kintex-7。多分辨率径向模式适合流水和 BRAM,但不含原始图像预处理,也不输出通用 WCS。
案例二:链路最完整
Marin & Bang 从像素、ROI、质心、亮星排序、特征到数据库匹配都在 Zynq PL 中运行;最终姿态浮点计算留给处理器。真正瓶颈已从计算转向图像搬运。
案例三:最可复用
Panousopoulos 等明确把占计算量 >95% 的预处理与质心放入 PL,把低维匹配留在 ARM。该分工与 Astrometry.net 的最优工程切分高度一致。
边界与术语:不要把三类任务混为一谈
| 任务 | 典型输入 | 先验 | 典型输出 | 与 Astrometry.net 的关系 |
|---|---|---|---|---|
| 星点检测 / 质心提取 | 原始像素流 | 阈值、PSF/光斑尺寸等 | (x,y)、亮度、窗口 | 只是前端;非常适合 FPGA |
| 星敏感器 Lost-in-Space 识别 | 星点向量 | 固定焦距、固定 FOV、已标定畸变、有限导航星表 | 恒星 ID、姿态 | 算法思想相近,但问题规模更受限 |
| Plate solving / Astrometry.net | 任意天文照片或 XYLS | 可无初值,甚至未知尺度 | 指向、尺度、旋转、WCS/SIP | 更通用、更依赖多尺度索引和假设验证 |
Astrometry.net 算法链与 FPGA 适配度
官方论文和代码结构显示,求解器先进行稳健源检测,再从亮星中构造四星/五星 asterism,利用几何哈希与预构建索引生成候选解,随后通过贝叶斯模型比较验证,并拟合 TAN/WCS 与 SIP 畸变。官方代码包含紧凑 k-d tree 库,索引按角尺度和 HEALPix 天区切分。
各阶段的硬化价值
案例一:多分辨率径向特征星识别
算法核心
以靠近光轴的一颗“主星”为中心,计算邻星相对主星的角距离,并量化为长度 512 的二值径向模式。随后通过 Haar 小波只保留低频部分,得到 256 和 128 维模式,以低分辨率粗筛 → 中分辨率缩小候选 → 高分辨率确认的方式匹配。若失败,则换下一颗靠近光轴的星作为主星。
数据与测试条件
- SAO J2000,剔除双星和变星后 3,610 颗导航星,极限星等约 +6Mv。
- 相机视场 14°,模式半径 7°,图像 1024×1024。
- 11,000 张电子星模拟器图像;加入 0–3 像素位置误差或 1–3 颗假星。
- 3 像素误差时识别率 98.5%;3 颗假星时 98.9%。
资源如何花费
- 导航星表约 28 KB;多分辨率特征表约 225 KB。
- 论文同时报告 BRAM 总量约 261 KB;28+225=253 KB,约 8 KB 差值可理解为对齐、控制表或取整。
- 主要资源是片上数据库;逻辑只占约 3.61%,说明该算法本质上是“存储 + 大量并行比较”。
性能、瓶颈与能力上限
| 维度 | 分析 |
|---|---|
| 性能优势 | 二值模式、not-XOR/计数式评分和三级筛选适合深流水;星库全部在 BRAM 时延确定。 |
| 真正瓶颈 | 不是算术,而是多候选模式的 BRAM 带宽、比较并行度与换主星重试次数。 |
| 未计入工作 | 原始图像背景估计、阈值、连通域、质心,以及最终三轴姿态/WCS 拟合。 |
| 能力上限 | 固定 14° 相机与有限明亮星表;输出星 ID/RA/Dec。不能直接处理未知比例尺、任意焦距、复杂畸变的普通天文照片。 |
| 对 Astrometry.net 的启示 | “先低分辨率过滤、后精匹配”值得借鉴;但其 261 KB 星库与 Astrometry.net 多尺度索引不是同一量级。 |
案例二:Zynq-7020 高速星敏感器完整流水线
架构与软硬件分工
该方案是三个案例中从原始像素到星识别最完整的。PL 负责高吞吐部分,最终姿态计算由于调用频率低、浮点和控制复杂,被明确留在微处理器上。
详细资源表
| IP | Slice | 逻辑 LUT | LUTRAM | BRAM | DSP | 资源热点 |
|---|---|---|---|---|---|---|
| AXI FIFO | 51 | 27 | 68 | 0 | 0 | 解耦阻塞质心核 |
| extract_ROI | 258 | 158 | 640 | 0 | 0 | 窗口移位寄存器/LUTRAM |
| feature extractor | 1,001 | 2,497 | 130 | 2 | 3 | hypot / atan2 CORDIC |
| feature matcher | 802 | 1,383 | 334 | 3 | 0 | 数据库流与评分逻辑 |
| star detector | 187 | 276 | 12 | 0 | 1 | 质心与星等 |
| 总计 | 2,281 | 4,341 | 1,184 | 5 | 4 | 逻辑约 17%,BRAM/DSP 很低 |
为什么会看到 1.59、14.7、21 和 34.1 ms 四种数字?
固定数据库核心延迟
对 2,176 元素数据库,端到端约 14.7 ms;此处 I/O 占主导。
数据库规模/覆盖率权衡
数据库从 83 KB 增至 1,018 KB,10,000 次测试的高置信结果由 9,004 增至 9,998。
能力、动态性能与上限
| 项目 | 结果与解释 |
|---|---|
| 设计目标 | 约 50° FOV、星等 ≤5、25–50 Hz,固定相机模型的 lost-in-space 姿态估计。 |
| 准确度/覆盖 | 论文在无噪声仿真中报告约 0.001° RMSE 与接近 99% 的天空覆盖;最终 FPGA 特定实现的旋转测试约 97.7% 覆盖。 |
| 高速机动 | 15°/s 时可保持约 99% 量级覆盖;30°/s 时仅较大检测窗配置仍约 94.2%,说明运动拖影成为能力边界。 |
| 瓶颈 | 图像搬运支配固定数据库延迟;扩大数据库后匹配延迟近线性增长。特征提取中的 CORDIC 是逻辑热点。 |
| 能力上限 | 固定宽视场与明亮星表;最终姿态仍在 CPU。它比案例一完整,但仍不是能处理任意天文图像的 WCS plate solver。 |
案例三:4 MP 星图预处理与质心提取的 SoC FPGA 协同实现
架构:把像素域放进 PL,把低维控制留在 PS
作者的关键判断是:预处理与质心在 lost-in-space 模式中处理整帧像素,占总计算量超过 95%;匹配只处理低维向量,放在 ARM 更容易维护和迭代。这是本报告最推荐的 Astrometry.net 分工依据。
预处理与质心核资源
| 预处理模块 | LUT | LUTRAM | FF | BRAM |
|---|---|---|---|---|
| Binning | 2.7K | 210 | 3.8K | 4.5 |
| Clustering | 5K | 221 | 6K | 8 |
| 集成预处理 | 5.2K | 222 | 6.5K | 10 |
| 质心核 | LUT | FF | DSP | BRAM | 吞吐 |
|---|---|---|---|---|---|
| HDL-CG | 255 | 466 | 3 | 2 | 18 Mcluster/s |
| HLS-CG | 1.4K | 1.5K | 2 | 0 | 12 Mcluster/s |
| HLS-FGF | 8.7K | 13.8K | 55 | 0 | 1 Mcluster/s |
时间分解与瓶颈迁移
全软件 ARM
合计约 365 ms/帧。
HW/SW 协同
整机约 41 ms/帧,8.9×;首个质心约 0.5 ms,后续质心间隔约 1 μs。
| 瓶颈 | 证据与影响 | 改进方向 |
|---|---|---|
| PS–PL DMA | PL 预处理可闭合到 232 MHz,但整机 DMA 稳定在 167 MHz;26 ms 中大部分是搬运与在线 binning。 | 直接接相机、拓宽 AXI、双端口/多通道、减少往返。 |
| HLS 除法器 | HLS-CG 临界路径位于自动推断的除法核,频率不如手写 HDL。 | 定点倒数、查表/牛顿迭代、RTL 化。 |
| FGF 浮点网络 | 55 DSP、13.8K FF;关键路径包含浮点减法且约 82% 为布线延迟。 | 混合精度、定点 Cholesky、资源复用或只对困难光斑调用。 |
| 能力上限 | 论文只硬化检测/质心,匹配仍在 ARM;因此无法从其 26 ms 推断完整 Astrometry.net 求解延迟。 | 把输出改为 XYLS,直接接 Astrometry.net backend。 |
三个重点案例的可比性与差异
| 维度 | Wu 2019 | Marin 2020 | Panousopoulos 2024 | Astrometry.net |
|---|---|---|---|---|
| 输入起点 | 已提取星点 | 原始 8-bit 像素 | 原始 12-bit 像素 | 图像或 XYLS |
| 硬化范围 | 特征+匹配+ID | 检测+质心+特征+匹配 | 预处理+质心 | 无官方硬化 |
| 相机先验 | 固定 14° | 固定约 50° | 固定 15.5° | 可未知尺度 |
| 数据库 | 3,610 星,约 261 KB | 约 83–1,018 KB 特征库 | 匹配在 ARM,未给硬件库 | 多尺度 FITS index,宽视场即约 339.1 MiB |
| 输出 | 星 ID / RA-Dec | 候选匹配;CPU 姿态 | 质心;CPU 匹配/姿态 | WCS、尺度、旋转、SIP |
| 主要瓶颈 | BRAM 带宽与候选比较 | 图像传输、CORDIC、库规模 | DMA、浮点 FGF 布线 | 组合生成、随机索引访存、验证/WCS |
| 最适场景 | 紧凑专用星敏感器 | 高更新率宽视场星敏感器 | 高分辨率可复用前端 | 任意来源图像 plate solving |
瓶颈与能力上限:从 BRAM 到外存随机访问
1. 数据库容量决定架构
案例一用约 261 KB 把导航星表和模式表装入 BRAM。Astrometry.net 仅 4107–4119 宽视场索引就有 355,536,000 bytes(约 339.1 MiB),约是前者的 1330 倍;窄视场 5200 系列还会按天区拆成更多文件。完整索引只能放 DDR/eMMC/NVMe。
2. 随机访问破坏理想流水
星敏感器特征表通常可以顺序扫或并行比较;Astrometry.net 的 code k-d tree、quadfile、star k-d tree 和候选验证会产生不规则访问。即使把计算逻辑放进 PL,性能也可能被 DDR 随机延迟和缓存命中率限制。
3. Quad 组合数是动态的
Astrometry.net 会逐步加入亮星并枚举 A/B/C/D 的合法排列,候选数随星点数量、噪声和尺度变化。硬件需要队列、回压、溢出策略与超时,不能按固定每帧工作量估算。
4. 验证比初匹配更难硬化
命中一个 quad 只是生成假设;还要投影星表、统计对应关系、进行模型比较并拟合 WCS/SIP。这部分分支多、调用频率低,CPU 的灵活性通常胜过专用流水。
5. I/O 很快成为主瓶颈
案例二的 14.7 ms 中约 13.1 ms 是图像传输;案例三在加速计算后又受 167 MHz DMA 限制。最优系统应让传感器直接流入 PL,避免 PS→PL→PS 的整帧往返。
6. 辐射与可验证性
空间应用还需配置存储擦洗、BRAM ECC、TMR/DMR、看门狗和可重配置。将复杂动态软件全部改写成 RTL 会显著增加验证成本和故障面。
针对 Astrometry.net 的四级硬化方案
方案 V1:FPGA 源提取器 + 原生 CPU solver(推荐起点)
优势是接口天然兼容、风险低、能立即用官方索引和验证逻辑。FPGA 的价值集中在高分辨率图像、低功耗连续处理、去除 CPU 上最重的像素域计算。
方案 V2:在 PL 增加 Top-N 和 Quad 描述子生成
在 V1 基础上把亮星排序、空间均匀化和部分 quad code 生成放进 PL,CPU 只做索引查询与后处理。可减少 CPU 组合枚举,但要解决动态队列、尺度假设和码空间定点精度。
方案 V3:固定相机的“专用 Astrometry”
若视场、焦距、畸变和目录固定,可舍弃通用多尺度索引,改用径向模式、K-vector、Pyramid 或紧凑 tetra hash。此时数据库可从数百 MB/GB 降到 KB/MB,完整 PL 匹配可行,性能接近案例一/二;但产品已经不再是通用 Astrometry.net。
方案 V4:完整 Astrometry.net 纯 PL
技术上可以用 DDR 控制器、硬件队列、树搜索、浮点核和软核 CPU 拼出功能等价系统,但会形成“在 FPGA 里重造一台复杂计算机”。除极端确定性/辐射/功耗约束外,开发、验证和维护成本通常不合理。
工程资源预算(估算,不是论文综合结果)
| 子系统 | 保守预算 | 外存 | 依据/说明 |
|---|---|---|---|
| V1 像素前端 | 8–20K LUT,10–30K FF,5–40 DSP,10–40 BRAM | 可只需行缓冲;大图可配 DDR | 由案例二、三和质心文献外推 |
| Top-N + 均匀化 | 2–8K LUT,若干 BRAM/LUTRAM | 通常无需整帧 | 在线排序、分区桶与优先队列 |
| Quad 描述子 | 5–25K LUT,5–20 DSP,10–80 BRAM | 建议 DDR 队列 | 依并行组合数、定点除法和背压而变 |
| 索引与验证 CPU | 四核以上 ARM/x86 更稳妥 | 1–4 GB DDR;eMMC/NVMe 存索引 | 宽视场索引已约 339.1 MiB,窄视场更大 |
| 完整纯 PL | 难以给出可信固定值 | 必须高带宽外部 DDR + 大容量非易失存储 | 资源取决于缓存、并发候选和浮点验证策略 |
技术可行性判断
对“用户上传任意照片”的建议
采用 Linux/Docker + Astrometry.net CPU worker + NVMe 索引;若吞吐或功耗有压力,再引入 FPGA source extractor。由于上传、解码、索引 I/O 和任务调度占比高,完整 FPGA 通常不能带来与开发成本匹配的收益。
对“固定相机实时星敏感器”的建议
采用 Zynq/MPSoC:PL 处理相机流、检测、质心和可选特征;ARM 处理匹配、姿态、标定与异常恢复。若要求几十至数百 Hz,可进一步把紧凑星库匹配放入 PL。
建议的实施路线与验收指标
阶段 0:建立 CPU 黄金模型
固定 Astrometry.net 版本、索引集和图像集;记录 source extraction、quad search、verification、WCS 的分段耗时与失败原因。
阶段 1:只替换 source extraction
FPGA 输出 XYLS;逐图比较星点位置、亮度排序、召回率和最终 solve 成功率。目标不是质心误差最小,而是求解成功率不下降。
阶段 2:消除整帧往返
相机直接进入 PL;只回传 Top-N 星点。验证 AXI 带宽、背压、曝光切换、饱和星和星云背景。
阶段 3:硬化候选生成
统计真实数据上的 quad 数量分布,设计有界队列与溢出降级;CPU 保留回退路径。
阶段 4:面向部署优化
索引裁剪、HEALPix 分区、DDR 缓存、eMMC/NVMe 预取;空间应用再加入 ECC、scrubbing、TMR/DMR 和故障注入。
建议验收指标
| 类别 | 指标 | 为什么重要 |
|---|---|---|
| 功能 | 最终 WCS 成功率、假阳性率、重投影残差 | 比单独质心误差更接近产品目标 |
| 前端 | 星点召回、假星率、Top-N 顺序一致性、动态范围 | Astrometry 依赖最亮源和组合质量 |
| 实时 | P50/P95/P99 延迟、最坏候选数、超时比例 | 盲解算工作量高度动态 |
| 资源 | LUT/FF/BRAM/DSP、DDR 带宽、索引缓存命中 | 片上资源并非唯一瓶颈 |
| 鲁棒性 | 拖影、热像素、云层/星云、裁剪、镜像、尺度误差 | 普通天文照片比仿真星敏感器复杂 |
| 空间可靠性 | SEU 注入、恢复时间、错误检测覆盖 | 决定 COTS FPGA 能否上星 |