---
title: "把这 71 次 HARPS 观测重新算一遍"
description: "保留 CoRoT-7 全部 71 次公开观测，对比轨道、活动与联合后验，逐项核对单位、权重、采样失败和先验敏感性。"
canonical_url: "https://sandboxphysics.com/zh/stories/rv-activity/replay-the-harps-campaign/"
language: "zh-CN"
page_type: "story"
alternate_languages:
  en: "https://sandboxphysics.com/stories/rv-activity/replay-the-harps-campaign/"
last_modified: "2026-10-28"
---

[恒星活动与径向速度](https://sandboxphysics.com/zh/stories/rv-activity/)

AC18 · L3

# 把这 71 次 HARPS 观测重新算一遍

Sandbox Physics · 2026-10-28

真实速度表没有演示那么整齐。让日期、活动指标和原单位一直跟着数据走，才有机会分清结果究竟依赖模型，还是依赖画图时做的选择。

## 开始前需要什么

读过联合后验一章，会运行 Python 命令。下方公开文件可放在普通目录独立执行，不需要网站仓库或受保护的 Lab 引擎。

## 拟合前，先固定观测

保留 Haywood 等人 2014 年第一版附表 A1 的全部 71 行数值，对应 CoRoT-7 的 2012 年 HARPS 观测。日期从 BJD UTC 2455939.69948 到 2455964.70360。原表速度、速度误差、半高全宽和 BIS 用千米每秒；读取时只换算一次为米每秒。钙线对数指标及其误差保持无量纲。原表没有给半高全宽或 BIS 的逐点正式误差。

原数值行、派生 CSV 与出处文件，记录了精确的 arXiv 源档及 TeX 成员的 SHA-256；CSV 哈希也进入公开清单。这些是保留原文归属的事实数值，没有对原观测重新授予许可证，论文正文和图像也不放进下载包。

沿用原表的 BJD UTC。减去第一日期只是为了数值方便，不能顺手改叫 TDB，也不能塞进一个 HJD 凌星时刻。这里让相位自由，避免混用时间系统；没有虚构原表未提供的曝光核，也没有给已报告的重心速度再做一次同样校正。

对应阅读：Haywood et al. — CoRoT-7, arXiv:1407.1044v1 · Rajpaul et al. — joint activity processes, arXiv:1506.07304v1

## 三种模型，看完全相同的行

每个似然都使用 142 个值：71 个速度和 71 个钙指标。轨道模型包含两个圆轨道分量、通道零点和独立高斯噪声加通道抖动；其中钙通道只有零点与噪声。活动模型用共享潜过程和零点，不含轨道分量；联合模型把两部分放在一起。半高全宽与 BIS 始终保留为原表辅助列。

速度的固定原点是每秒 31180 米，钙指标原点为负 4.72，后者再除以 0.01。这些事先写明的常数定义正规零点先验，没有改用拟合样本的中位数。完整先验范围、系数尺度和自转复现周期的替代方案，都写在输出 JSON 里。

短周期固定为 0.85359165 天，另一周期限制在 3.3 到 4.1 天。这次条件比较不推断偏心率、额外行星个数、长期趋势，也没有做全频率盲搜。观测只跨约一次自转，受这些限制的边缘似然估计不能直接读作行星存在概率。

对应阅读：Rasmussen & Williams — Gaussian Processes for Machine Learning, Chapter 2 · Haywood et al. — CoRoT-7, arXiv:1407.1044v1

## 在普通目录重跑

把所有链接文件存到同一目录。建议用 Python 3.11 和固定的 NumPy、SciPy 版本；冻结参考也在 Python 3.9.6 上实际运行过。README 给出完整命令、输入哈希、独立检查和较长的采样变体。依赖另行安装，下载包不打包第三方库源码。

```
                    python3.11 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements.txt
python -W error check-kernel.py
python -W error check-importance.py
python -W error replay-importance.py --data . --power 15 --seed 1808 --out rerun.json --nodes-out rerun-nodes.npz
python -W error replay-predictions.py --data . --posterior rerun.json --nodes rerun-nodes.npz --draws 2048 --out rerun-predictions.json
                  
```

主命令拟合三种模型，耗时取决于线性代数环境，应按分钟而非动画帧等待。浏览器不做这个昂贵拟合，也不会把离线结果插值到另一组参数上冒充重新计算。冻结的实测结果，与现场的合成恒星分别展示。

对应阅读：Rasmussen & Williams — Gaussian Processes for Machine Learning, Chapter 2 · Rajpaul et al. — joint activity processes, arXiv:1506.07304v1

## 先读区间，再看曲线

冻结联合后验中，短周期振幅的第 16、50、84 百分位约为每秒 2.76、3.48、4.22 米；第二分量约为每秒 5.54、6.00、6.46 米。这些是给定先验下的分位数，不是对称测量误差、发现显著性，也不是恒星质量。

只用轨道与独立噪声时，短周期振幅对应约 1.87、2.72、3.59。差别本身就值得看：把相关活动当成独立噪声，会改变两部分的分配。纯活动模型没有行星振幅，图里展示的是它的潜在速度拟合，没有补一个不存在的轨道数值。

图上的模型只对应已保留观测时刻的样本内潜过程后验。阴影为逐点第 16 至 84 百分位，包含已声明模型的不确定性，却不是新增测量误差，也不是留出数据预测。下载的完整 142 维潜过程协方差保留了阴影画不出的跨时刻、跨通道相关。把混合抽样从 512 加到 2048 后，联合均值在这些时刻的最大变化约为每秒 0.028 米。

### 两个圆轨道信号与独立噪声

灰色为原观测及正式误差；青色为样本内潜过程均值与逐点16—84百分位。连线只是连接采样时刻，没有给出时刻之间的后验预测。

### 活动过程，不含轨道项

灰色为原观测及正式误差；青色为样本内潜过程均值与逐点16—84百分位。连线只是连接采样时刻，没有给出时刻之间的后验预测。

### 轨道与活动联合

灰色为原观测及正式误差；青色为样本内潜过程均值与逐点16—84百分位。连线只是连接采样时刻，没有给出时刻之间的后验预测。

### 一起保留的钙线通道

这是论文实测钙线序列，不是现场Lab未标定的投影面积代理量；这张表没有提供实测测光或天体测量。

实际后验振幅第16、50、84百分位，单位米每秒；纯活动模型没有轨道振幅。

| 模型 | 短周期 | 第二周期 | 有效样本数 |
| --- | --- | --- | --- |
| 两个圆轨道信号与独立噪声 | $1.87,;2.72,;3.59$ | $5.28,;6.19,;7.09$ | $1.57\times10^{4}$ |
| 活动过程，不含轨道项 | 不含轨道项 | 不含轨道项 | $3990$ |
| 轨道与活动联合 | $2.76,;3.48,;4.22$ | $5.54,;6,;6.46$ | $6410$ |

对应阅读：Haywood et al. — CoRoT-7, arXiv:1407.1044v1 · Rajpaul et al. — joint activity processes, arXiv:1506.07304v1

## 主动找它容易失败的地方

先用种子 1908 重跑，再用种子 2008 对联合模型加密到 65536 点。有效样本数和权重尾部都保留。另有三次先验实验：把复现周期从 18—35 天放宽到 3—60 天，采用外部测光的 23.81 天约束，以及把行星系数标准差从每秒 10 米改成 3 米。它们改变的是实际先验，不只是优化起点。

已知真值的注入实验沿用真实日期与误差，但替换全部观测值。只有星斑的恒星选出约每秒12.5米、34.3天的正弦分量，真实自转却是23.81天。整体拟合很差：选中频率下，71个值和三个系数得到 $\chi^2\simeq1284$。只看窄窄的条件区间，会藏起这个模型失败；它也没有校准全频率误警报概率。另一组近自转周期的谐波实验专门展示 GP 吸收与活动先验敏感性。模拟的仪器跳变若强用一个零点，会造出虚假轨道分量；允许不同零点后，多数假信号消失。真实表本身仍只有一组 HARPS 数据。

最初 512 节点的失败、窄活动区的积分失败、提议分布基准和最终多种子诊断都可下载。节点档把非线性坐标、似然和权重保存为双精度；只有导出的条件系数均值与协方差下三角为控制体积采用单精度。推断及 JSON 完整协方差仍由双精度计算，存储量化误差另有检查。

对应阅读：Rajpaul, Aigrain & Roberts — Ghost in the time series, arXiv:1510.05598v1 · Rajpaul et al. — joint activity processes, arXiv:1506.07304v1

## 练习与解释性答案

1. 为什么不替 BIS 与半高全宽填上很小的误差，顺便多用两个活动通道？

   展开解释

   那样连似然权重也是编出来的。原表没有这些逐点正式误差，可以诚实地保留为辅助列；若要纳入联合似然，需要明确且有依据的误差模型，并检查对它的敏感性。

2. 活动模型样本内残差比简单轨道更小，能否据此否定行星？

   展开解释

   不能。灵活过程也能吸收轨道功率，短观测窗可能分不开两种机制。还应看已知真值的恢复、先验及独立通道；样本内残差大小本身既不能确认，也不能排除轨道解释。

## 动手检验预测

### [分清两份记录](https://sandboxphysics.com/zh/labs/binary-star-mass/)

1. 导出 Lab 活动预设，检查它的模型与单位标签。
2. 打开实测图，对照源 CSV 日期。71 次真实观测之间，没有混入合成表面的点。

[上一篇：两种解释，怎样一起留在后验里](https://sandboxphysics.com/zh/stories/rv-activity/a-posterior-for-two-explanations/) [下一篇：在活动恒星旁，读懂地球质量信号](https://sandboxphysics.com/zh/stories/rv-activity/earth-mass-signals-and-active-stars/)

把所有科学文件放在同一目录，按 README 用 Python 3.11 和固定 NumPy、SciPy 依赖独立复算已声明的条件后验。

- [README.md](https://sandboxphysics.com/stories/rv-activity/downloads/README.md)
- [requirements.txt](https://sandboxphysics.com/stories/rv-activity/downloads/requirements.txt)
- [rv\_kernel.py](https://sandboxphysics.com/stories/rv-activity/downloads/rv_kernel.py)
- [rv\_posterior.py](https://sandboxphysics.com/stories/rv-activity/downloads/rv_posterior.py)
- [rv\_importance.py](https://sandboxphysics.com/stories/rv-activity/downloads/rv_importance.py)
- [replay-rv.py](https://sandboxphysics.com/stories/rv-activity/downloads/replay-rv.py)
- [replay-importance.py](https://sandboxphysics.com/stories/rv-activity/downloads/replay-importance.py)
- [replay-predictions.py](https://sandboxphysics.com/stories/rv-activity/downloads/replay-predictions.py)
- [surface\_reference.py](https://sandboxphysics.com/stories/rv-activity/downloads/surface_reference.py)
- [surface-reference.py](https://sandboxphysics.com/stories/rv-activity/downloads/surface-reference.py)
- [injection-experiments.py](https://sandboxphysics.com/stories/rv-activity/downloads/injection-experiments.py)
- [check-kernel.py](https://sandboxphysics.com/stories/rv-activity/downloads/check-kernel.py)
- [check-importance.py](https://sandboxphysics.com/stories/rv-activity/downloads/check-importance.py)
- [check-posterior.py](https://sandboxphysics.com/stories/rv-activity/downloads/check-posterior.py)
- [harps2012-corot7-source-rows.txt](https://sandboxphysics.com/stories/rv-activity/downloads/harps2012-corot7-source-rows.txt)
- [harps2012-corot7.csv](https://sandboxphysics.com/stories/rv-activity/downloads/harps2012-corot7.csv)
- [observed-provenance.json](https://sandboxphysics.com/stories/rv-activity/downloads/observed-provenance.json)
- [surface-input.json](https://sandboxphysics.com/stories/rv-activity/downloads/surface-input.json)
- [surface-reference.json](https://sandboxphysics.com/stories/rv-activity/downloads/surface-reference.json)
- [rv-posterior.json](https://sandboxphysics.com/stories/rv-activity/downloads/rv-posterior.json)
- [posterior-nodes.npz](https://sandboxphysics.com/stories/rv-activity/downloads/posterior-nodes.npz)
- [rv-posterior-repeat.json](https://sandboxphysics.com/stories/rv-activity/downloads/rv-posterior-repeat.json)
- [rv-posterior-refined.json](https://sandboxphysics.com/stories/rv-activity/downloads/rv-posterior-refined.json)
- [rv-prior-wide.json](https://sandboxphysics.com/stories/rv-activity/downloads/rv-prior-wide.json)
- [rv-prior-photometry.json](https://sandboxphysics.com/stories/rv-activity/downloads/rv-prior-photometry.json)
- [rv-prior-amplitude.json](https://sandboxphysics.com/stories/rv-activity/downloads/rv-prior-amplitude.json)
- [posterior-predictions.json](https://sandboxphysics.com/stories/rv-activity/downloads/posterior-predictions.json)
- [posterior-predictions-coarse.json](https://sandboxphysics.com/stories/rv-activity/downloads/posterior-predictions-coarse.json)
- [prediction-refinement.json](https://sandboxphysics.com/stories/rv-activity/downloads/prediction-refinement.json)
- [posterior-checks.json](https://sandboxphysics.com/stories/rv-activity/downloads/posterior-checks.json)
- [kernel-preflight.json](https://sandboxphysics.com/stories/rv-activity/downloads/kernel-preflight.json)
- [importance-benchmarks.json](https://sandboxphysics.com/stories/rv-activity/downloads/importance-benchmarks.json)
- [posterior-preliminary.json](https://sandboxphysics.com/stories/rv-activity/downloads/posterior-preliminary.json)
- [injection-results.json](https://sandboxphysics.com/stories/rv-activity/downloads/injection-results.json)
- [surface-convergence.json](https://sandboxphysics.com/stories/rv-activity/downloads/surface-convergence.json)
- [surface-convergence.initial-cartesian.json](https://sandboxphysics.com/stories/rv-activity/downloads/surface-convergence.initial-cartesian.json)
- [default-results.json](https://sandboxphysics.com/stories/rv-activity/downloads/default-results.json)
- [provenance.json](https://sandboxphysics.com/stories/rv-activity/downloads/provenance.json)

## 来源与计算范围

1. [Haywood et al. — CoRoT-7, arXiv:1407.1044v1](https://arxiv.org/pdf/1407.1044v1)

   2014年7月3日版本。第2—3及4.2节、式1—12、附表A1。保留2012年HARPS全部71行数值，教程没有复现完整同期测光分析。

2. [Rajpaul et al. — joint activity processes, arXiv:1506.07304v1](https://arxiv.org/html/1506.07304v1)

   2015年6月24日版本。第3.1—3.4、4.1—4.2节，图3—4及附录A.2。导数符号采用第一时刻减第二时刻的时差；核宽度必须连同定义使用。

3. [Rajpaul, Aigrain & Roberts — Ghost in the time series, arXiv:1510.05598v1](https://arxiv.org/pdf/1510.05598v1)

   2015年10月20日版本。第2—3节和图1—3：采样窗口与合成信号内容的比较。半人马座阿尔法B分析属于原文导读，没有被说成本站复算的数据。

4. [Rasmussen & Williams — Gaussian Processes for Machine Learning, Chapter 2](https://gaussianprocess.org/gpml/chapters/RW2.pdf)

   作者提供的2006年第2章，第2.1—2.2及2.7节：高斯条件分布、正规边缘密度与线性基函数。这里的重要抽样器与表面积分为独立编写。
