我有一个光谱,我试图对其进行高斯拟合,但当我绘制它时,我意识到这不是一个单峰,而是两个或三个非常接近的峰。这是我的代码:
from scipy.optimize import curve_fit
#weighted mean
mean = sum(velo_peak * spec_peak) / sum(spec_peak)
sigma = np.sqrt(sum(spec_peak * (velo_peak - mean)**2) / sum(spec_peak))
def Gauss(velo_peak, a, x0, sigma):
return a * np.exp(-(velo_peak - x0)**2 / (2 * sigma**2))
p0=[max(spec_peak), mean, sigma]
popt,pcov = curve_fit(Gauss, velo_peak, spec_peak, p0)
print("the velocities at the peak are",velo_peak)
plt.plot(velo_peak*1e-9,spec_peak,'k')
plt.plot(velo_peak*1e-9, Gauss(velo_peak, *popt), 'r-', label='fit')

我的问题是:有没有一种方法可以对多个接近的峰进行拟合?
我编辑了这个问题,这样就更清楚了:我想对两个峰进行高斯拟合,从图中可以看出,函数只对一个峰进行了拟合。任何帮助都将不胜感激。
发布于 2021-03-25 23:09:20
在给定的离散时间戳对高斯分布进行采样,并从原始信号中减去它。然后它会找到“第二个”堆。
https://stackoverflow.com/questions/66796673
复制相似问题