---
title: "亲手拟合一份固定的恒星光谱"
description: "用纯 Python 重跑固定 CALSPEC 织女星光谱与合成对照，拟合连续谱、线心和线宽，检查波长零点与模型失配。"
canonical_url: "https://sandboxphysics.com/zh/stories/stellar-spectroscopy/fit-a-frozen-calibrated-spectrum/"
language: "zh-CN"
page_type: "story"
alternate_languages:
  en: "https://sandboxphysics.com/stories/stellar-spectroscopy/fit-a-frozen-calibrated-spectrum/"
last_modified: "2026-10-28"
---

[从恒星暗线走到丰度模型](https://sandboxphysics.com/zh/stories/stellar-spectroscopy/)

AC03 · Tutorial

# 亲手拟合一份固定的恒星光谱

Sandbox Physics · 2026-10-28

准备两份文件：一份有已知答案的合成谱，一份来自 HST/STIS 的织女星观测。先用合成谱学会拟合，再看真实氢线怎样让一个过于简单的线型露出破绽。本页文件包附有全部输入与脚本，解压后可离线重跑。

## 开始前需要什么

先读 L1—L3。需要能运行 Python 3，知道 CSV 每行是一份样本；不要求安装 NumPy、SciPy 或天文软件。坐标采用真空波长，合成谱用纳米，实测谱保留原文件的埃。

## 固定输入，先看来源再看曲线

实测输入是 CALSPEC 的 alpha\_lyr\_stis\_011.fits，第十一版。全文件是观测与模型拼接的光谱；这里仅选表头标注来自 STIS 的光学段，取四千七百五十至四千九百七十五真空埃、质量标记为一的八十二行，不重采样。原始 FITS 也一起保存，因此可以检查截取前的表头和列。

原始表给出波长、绝对通量、统计误差、系统误差、分辨宽度、质量和曝光时间。表头列出 G430L 的三个观测编号：o8i105060、o8i106010、o8i106040。它还说明这一版采用 2022 年电荷转移效率更新。源文件与截取 CSV 都附 SHA-256 校验和。

运行脚本首先验证源文件校验和，然后按冻结的表格式解码，并重新写出带原始行号的 CSV。脚本只是读取这一个已知文件，不能当作通用 FITS 阅读器。若升级数据版本，应重新核查表头、单位和选择条件。

```
python3 calspec-tutorial.py
python3 spectrum-tutorial.py
```

对应阅读：STScI CALSPEC, alpha\_lyr\_stis\_011.fits (25 October 2022) · MAST reference atlases and CALSPEC releases

## 先在有答案的谱里找回速度

合成谱包含七百二十一个已标定波长样本，随机种子固定为 $20261028$。它采用两条人为跃迁、冷层源函数、倾斜连续谱及已知高斯仪器响应。注入速度为 $18\,\mathrm{km\,s^{-1}}$，单样本随机标准差为 $0.004$。这组数据专门检查算法，和织女星实测值分开。

给速度、Doppler 参数和线心光学深度一个试探值，就能计算整条归一化线型。程序随后直接解倾斜连续谱的两个系数，计算标准化残差平方和；外层逐步缩小搜索步长。固定输出的速度约为 $18.0\,\mathrm{km\,s^{-1}}$，Doppler 参数约 $2.38\,\mathrm{km\,s^{-1}}$，参考线心光学深度约 $2.86$。

这些数不必精确等于注入值，样本含随机噪声，线宽与光学深度也有相关性。约化平方和约 $1.04$，说明这份特定记录与已知生成模型相容。输出把样本数、自由度、连续谱系数和残差尺度都保存下来，方便检查。

$$
M_i=(a+b x_i)q_i(v_r,b_D,\tau_0),\qquad \chi^2=\sum_i\frac{(y_i-M_i)^2}{\sigma_i^2}
$$

a 与 b 是连续谱系数，x 是固定的无量纲波长坐标；b\_D 单独表示 Doppler 参数。给定非线性参数后，a 和 b 的最小平方解是线性的。

## 两次故意做错的分析

第一次，把每个合成波长都加上 $0.002\,\mathrm{nm}$。速度变成约 $19.2\,\mathrm{km\,s^{-1}}$，平方和却几乎没变。请对照两份输出的残差：标定零点被速度吸收了。这里给定的 $0.0002\,\mathrm{nm}$ 零点标准差，对应约 $0.120\,\mathrm{km\,s^{-1}}$ 的共同速度误差。

第二次，假装仪器完全没有展宽。拟合把 Doppler 参数推到约 $3.55\,\mathrm{km\,s^{-1}}$，线心光学深度变成约 $1.40$，约化平方和增到约 $3.67$。模型只好给气体更宽、更浅的线去补偿仪器模糊。请比较这两种失败：一种留下很好的残差，另一种连残差也明显变差。

## 再量一次织女星的真实氢线

实测脚本围绕氢 Balmer-beta 附近的 $4862.683\,\mathrm{\mathring A}$ 真空参考波长，先用两侧 $22\,\mathrm{\mathring A}$ 的局部窗口拟合直线连续谱加高斯吸收凹口。这个参考只用于定义表观移动，不把氢线的细结构、压力移动和速度参考系假装消失。

固定结果的表观中心约 $4862.20\,\mathrm{\mathring A}$，对应约 $-29.6\,\mathrm{km\,s^{-1}}$ 的表观 Doppler 值，高斯半高全宽约 $18.5\,\mathrm{\mathring A}$。把窗口扩大后，高斯宽度变为约 $25.1\,\mathrm{\mathring A}$。同一份资料，模型看了不同范围，测量定义就改变了。

更明显的例子是把宽窗口的连续谱硬设为水平线：表观速度改到约 $-7.4\,\mathrm{km\,s^{-1}}$。带长翼的 Lorentz 函数改善了残差，但仍留下远大于统计误差的结构。输出的巨大加权平方和，正好提醒我们这个简单线型还没有描述好氢线。

对应阅读：STScI CALSPEC, alpha\_lyr\_stis\_011.fits (25 October 2022)

## 该把哪一种误差写进结论

实测拟合只用 STATERROR 作权重，把 SYSERROR 单独保留。标定系统误差会在波长间相关，不能自动当成每个像素各自独立的一张随机误差棒。已有资料的误差栏也没有替我们解决连续谱位置、线型与波长零点。

这里应报告表观线心、经验宽度，以及它们对窗口、连续谱和线型的敏感性。不要把这些练习数值报成织女星的精密系统速度，也不要把氢线宽直接换成温度或金属丰度。HST/STIS 手册把波长精度与色散解、零点和目标在狭缝中的位置联系起来，实际精度分析应回到对应模式和曝光的标定。

做另一颗恒星时，沿同样顺序记录：文件版本、观测来源、波长介质与参考系、所用样本、连续谱、响应函数、残差结构，最后才是物理参数。保存失败案例，下次遇到同样漂亮却带错速度的拟合，就有一个可以比较的起点。

对应阅读：STIS Data Handbook, section 4.3, Factors Limiting Flux and Wavelength Accuracy · MAST reference atlases and CALSPEC releases

## [把仪器响应放回分析](https://sandboxphysics.com/zh/labs/stellar-absorption-lines/)

1. 在 Lab 中固定冷层状态，导出高低分辨本领的两份谱。
2. 比较线深和总等值宽度，预测忽略仪器时会怎样误估线宽。
3. 再看合成脚本的 ignored instrument response 输出，解释速度与宽度为何没有同样的偏差。

## 练习与解释性答案

1. 为什么实测脚本没有把 SYSTEMATIC 和 STATERROR 逐像素平方相加后宣称拟合可靠？

   展开解释

   系统标定误差可能跨波长相关，缺少协方差时不能把它们伪装成独立噪声。模型残差也远大于统计误差，应先改善物理模型与连续谱。

2. 如果把合成谱的随机噪声减半，波长零点造成的速度偏差会怎样？

   展开解释

   偏差几乎不变，因为所有波长仍共同挪动。随机误差缩小，会让这项共同偏差相对更显眼。

## 保存的输入与脚本

- [完整复算文件包与 Python 脚本](https://sandboxphysics.com/tutorials/stellar-spectroscopy/materials.zip)
- [运行说明与数据约定](https://sandboxphysics.com/tutorials/stellar-spectroscopy/README.md)
- [固定版本实测 FITS](https://sandboxphysics.com/tutorials/stellar-spectroscopy/alpha_lyr_stis_011.fits) · [实测截取](https://sandboxphysics.com/tutorials/stellar-spectroscopy/vega-hbeta-observed.csv)
- [输入、输出与脚本校验和](https://sandboxphysics.com/tutorials/stellar-spectroscopy/manifest.json)

[上一篇：从出射强度走到能拟合的光谱](https://sandboxphysics.com/zh/stories/stellar-spectroscopy/from-intensity-to-a-fitted-spectrum/) [下一篇：怎样读一篇三维非 LTE 丰度论文](https://sandboxphysics.com/zh/stories/stellar-spectroscopy/read-a-3d-non-lte-abundance-paper/)

## 来源与计算范围

1. [STIS Data Handbook, section 4.3, Factors Limiting Flux and Wavelength Accuracy](https://hst-docs.stsci.edu/stisdhb/chapter-4-stis-error-sources/4-3-factors-limiting-flux-and-wavelength-accuracy)

   波长零点、色散解与狭缝对中；用于区分表观线心移动与精密径向速度。

2. [STScI CALSPEC, alpha\_lyr\_stis\_011.fits (25 October 2022)](https://ssb.stsci.edu/trds/calspec/alpha_lyr_stis_011.fits)

   固定版本 FITS 表头与四千七百五十至四千九百七十五真空埃之间的八十二行 STIS 观测值；教程附校验和及原表行号。

3. [MAST reference atlases and CALSPEC releases](https://archive.stsci.edu/hlsp/reference-atlases)

   用于说明数据来源与发布背景；练习固定第十一版，不追随会变化的 current 目录。
