使用 specutils 与 Python 进行连续体拟合
Continuum Fitting with Python using specutils
这是我第一次处理黑体辐射实验的光谱,我正在使用 Python 并且遇到了一些麻烦......
我有这个光谱有 2 个峰值和不均匀的背景噪声,我想标准化,我尝试使用 specutils 1.1“continuum-fitting”(此处的文档:https://specutils.readthedocs.io/en/stable/fitting.html#continuum-fitting)
我的实现是这样的:
import matplotlib.pyplot as plt import numpy as np
from astropy.modeling import models
from astropy import units as u
from specutils.spectra import Spectrum1D, SpectralRegion
from specutils.fitting import fit_generic_continuum
...
x = data[:, 0]
y = data[:, 1]
plt.plot(x, y, label = 'My Data', c='C0')
spectrum = Spectrum1D(flux=y*u.Jy, spectral_axis=x*u.um)
g1_fit = fit_generic_continuum(spectrum)
y_fit = g1_fit(x*u.um)
plt.plot(x, y_fit, label = ' Specutils Continuum Fit', c='C1')
plt.legend()
但结果有点令人失望,它没有反映背景信号。
https://i.stack.imgur.com/El0pc.png
我是不是做错了什么?你有任何其他方法来标准化 python 中的背景噪音吗?任何只能覆盖背景而忽略峰值的拟合?有什么建议吗?
提前致谢!
最后,我决定使用 scipy (medfilt) 中的中值滤波器,并使用足够高的内核完全去除尖峰。
我的 specutils 实现的问题是我需要通过这样做来排除频谱中的峰值 window,尽管我发现这很难在我拥有的 100-120 数据测量上实现:
...
from specutils import SpectralRegion
spectrum = Spectrum1D(flux=y*u.Jy, spectral_axis=x*u.um)
g1_fit = fit_generic_continuum(spectrum, exclude_regions=[SpectralRegion(2 * u.um, 6 * u.um), SpectralRegion(58 * u.um, 65 * u.um)])
y_fit = g1_fit(x*u.um)
这是我第一次处理黑体辐射实验的光谱,我正在使用 Python 并且遇到了一些麻烦...... 我有这个光谱有 2 个峰值和不均匀的背景噪声,我想标准化,我尝试使用 specutils 1.1“continuum-fitting”(此处的文档:https://specutils.readthedocs.io/en/stable/fitting.html#continuum-fitting)
我的实现是这样的:
import matplotlib.pyplot as plt import numpy as np
from astropy.modeling import models
from astropy import units as u
from specutils.spectra import Spectrum1D, SpectralRegion
from specutils.fitting import fit_generic_continuum
...
x = data[:, 0]
y = data[:, 1]
plt.plot(x, y, label = 'My Data', c='C0')
spectrum = Spectrum1D(flux=y*u.Jy, spectral_axis=x*u.um)
g1_fit = fit_generic_continuum(spectrum)
y_fit = g1_fit(x*u.um)
plt.plot(x, y_fit, label = ' Specutils Continuum Fit', c='C1')
plt.legend()
但结果有点令人失望,它没有反映背景信号。
https://i.stack.imgur.com/El0pc.png
我是不是做错了什么?你有任何其他方法来标准化 python 中的背景噪音吗?任何只能覆盖背景而忽略峰值的拟合?有什么建议吗? 提前致谢!
最后,我决定使用 scipy (medfilt) 中的中值滤波器,并使用足够高的内核完全去除尖峰。
我的 specutils 实现的问题是我需要通过这样做来排除频谱中的峰值 window,尽管我发现这很难在我拥有的 100-120 数据测量上实现:
...
from specutils import SpectralRegion
spectrum = Spectrum1D(flux=y*u.Jy, spectral_axis=x*u.um)
g1_fit = fit_generic_continuum(spectrum, exclude_regions=[SpectralRegion(2 * u.um, 6 * u.um), SpectralRegion(58 * u.um, 65 * u.um)])
y_fit = g1_fit(x*u.um)