3. 连续光谱UV灯剂量积分计算

连续光谱剂量积分的计算模型

连续光谱UV灯(如中压汞灯)的辐照度不是集中在几个离散谱线上,而是在200–450 nm范围内连续分布。此时剂量不能按单波长公式直接套用,而应对光谱辐照度 E(λ)(单位 mW/cm²·nm)在目标波段 [λ₁, λ₂] 上做波长积分,再乘以曝光时间:

D = t × ∫λ₁λ₂ E(λ) dλ,其中 D 单位为 mJ/cm²,t 单位为 s。

数值实现时把波段离散为 N 个步长 Δλ 的小区间,用梯形法近似:

D ≈ t × Σ [ (E(λi) + E(λi+1)) / 2 ] × Δλ

积分步长 Δλ 直接决定离散误差:步长过大,会漏掉窄峰或把峰顶削平;步长过小,计算量增加但精度提升有限。下面用一段可运行的 Python 代码演示积分过程,并对比不同步长下的结果差异。

连续光谱 E(λ) 的波长积分与步长影响 波长 λ (nm) E(λ) mW/cm²·nm 200 250 300 350 400 积分区间 [λ₁, λ₂] 粗步长 Δλ 采样 细步长 Δλ 采样 E(λ) 连续光谱 积分面积 = 总剂量/t 粗步长采样点 细步长采样点

可运行的积分计算与步长对比

下面代码构造一个含双峰的连续光谱(模拟中压汞灯的313 nm与365 nm主峰),分别用 Δλ = 20 nm、5 nm、1 nm 三种步长在 250–400 nm 波段积分,并输出相对误差。所有数据均为教学示例,非实测。

import numpy as np

def E(lam):
    # 教学示例光谱:两个高斯峰叠加,单位 mW/cm²·nm
    peak1 = 8.0 * np.exp(-((lam - 313) ** 2) / (2 * 12 ** 2))
    peak2 = 5.0 * np.exp(-((lam - 365) ** 2) / (2 * 15 ** 2))
    base  = 0.5  # 连续背景
    return peak1 + peak2 + base

def integrate(lam1, lam2, dlam):
    lam = np.arange(lam1, lam2 + dlam / 2, dlam)
    e = E(lam)
    # 梯形法
    area = np.sum((e[:-1] + e[1:]) / 2 * dlam)
    return area, len(lam)

t = 2.0  # 曝光时间 s
lam1, lam2 = 250, 400

# 参考值:极细步长
ref_area, _ = integrate(lam1, lam2, 0.01)
ref_dose = ref_area * t

print(f"参考剂量 (Δλ=0.01nm): {ref_dose:.3f} mJ/cm²\n")
print(f"{'Δλ(nm)':>8} {'采样点':>6} {'积分面积':>10} {'剂量(mJ/cm²)':>14} {'相对误差':>10}")
for dlam in [20, 5, 1]:
    area, n = integrate(lam1, lam2, dlam)
    dose = area * t
    err = (dose - ref_dose) / ref_dose * 100
    print(f"{dlam:>8} {n:>6} {area:>10.3f} {dose:>14.3f} {err:>9.2f}%")

预期输出(教学示例结果):Δλ=20 nm 时相对误差约 -3%~-5%,因为粗步长削平了峰顶;Δλ=5 nm 时误差降到 1% 以内;Δλ=1 nm 时误差可忽略。这说明对于含窄峰的连续光谱,步长应至少小于峰半宽的 1/3,工程上常取 1–2 nm。

若光谱数据来自光谱仪导出(通常 1 nm 间隔),直接使用原始数据点做梯形积分即可,无需再插值加密;若数据间隔为 5 nm 而峰较窄,建议先线性插值到 1 nm 再积分,避免峰顶被低估。
积分前务必确认 E(λ) 的单位是 mW/cm²·nm 而非 mW/cm²。若光谱仪输出的是每 5 nm 一个点的“区间辐照度”,需先除以 5 nm 换算成谱密度,否则积分结果会放大约 5 倍。

结果判读与工程取值

步长 Δλ采样点数相对误差(示例)适用场景
20 nm8约 -4%仅用于快速估算,不用于配方判定
5 nm31约 -0.8%宽峰光源的常规计算
1 nm151<0.1%含窄峰光谱、配方验收计算

实际配方判定时,建议以 1 nm 步长积分结果为基准,并用 5 nm 结果做交叉校验;若两者偏差超过 2%,说明光谱中存在窄峰,必须使用更细步长或原始光谱仪数据。