You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带数据间隙的反射光谱高斯拟合问题及优化需求

反射光谱吸收带高斯拟合需求与问题

我需要对反射光谱的吸收带进行高斯拟合,但目标光谱段的0.85μm至1.3μm区间存在数据间隙,当前拟合结果在该区域效果不佳。拟合完成后,还需计算半高全宽(FWHM)和高斯曲线覆盖面积等光谱参数。

要求方案能生成平滑的高斯拟合曲线,且具备通用性,可适配大规模数据集的批量循环处理。

经初步调整(将常规高斯拟合改为减式拟合)后,拟合效果有所改善,但仍存在右侧超出y=1的异常情况,推测问题源于数据本身,现将相关代码整理如下:

当前高斯拟合函数代码

def gauss(x, H, A, x0, sigma):
    return H + A * np.exp(-(x - x0) ** 2 / (2 * sigma ** 2))

def gauss_fit(x, y):
    mean = sum(x * y) / sum(y)
    sigma = np.sqrt(sum(y * (x - mean) ** 2) / sum(y))
    popt, pcov = scipy.optimize.curve_fit(gauss, x, y, p0=[min(y), max(y), mean, sigma])
    return popt

拟合应用及绘图代码

H, A, x0, sigma = gauss_fit(x, y)
plt.plot(x, y, '.k', label='data')
plt.plot(x, gauss(x, *gauss_fit(x, y)), '-r', label='fit')
plt.xlabel('Wavelength (µm)')
plt.ylabel('Reflectance')
plt.legend()

数据处理与采样代码

# df_merged 是目标DataFrame的名称

R0700=FindNearest(df_merged.at[0,'Wavelength'], df_merged.at[0,'Reflectance Normalized'], 0.7, show=True)
R1800=FindNearest(df_merged.at[0,'Wavelength'], df_merged.at[0,'Reflectance Normalized'], 1.8, show=True)

x=df_merged.at[0,'Wavelength'][R0700[1]:R1800[1]]
y=df_merged.at[0,'Reflectance Normalized'][R0700[1]:R1800[1]]
def FindNearest(wl, rf, x, show=False):      # wl = 波长数组 ; rf = 反射率数组 ; x = 目标查找值
    
    wl_dif=np.abs(wl-x)
    idx=np.argmin(wl_dif)
    
# 获取反射率和波长对应值
    
    wl_x=wl[idx]
    rf_x=rf[idx]
    
    if show:
        print("最近波长 :", wl_x, ", 索引 :", idx, ", 对应反射率 :", rf_x)

    
# 返回值说明 : [0] = 最近匹配的波长值, [1] = 匹配值在数组中的位置 
# (反射率与波长度组长度一致,位置通用), [2] = 匹配到的反射率值
    
    return(wl_x, idx, rf_x)

内容的提问来源于stack exchange,提问作者Victor T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:02:05