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 代码演示积分过程,并对比不同步长下的结果差异。
可运行的积分计算与步长对比
下面代码构造一个含双峰的连续光谱(模拟中压汞灯的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 nm | 8 | 约 -4% | 仅用于快速估算,不用于配方判定 |
| 5 nm | 31 | 约 -0.8% | 宽峰光源的常规计算 |
| 1 nm | 151 | <0.1% | 含窄峰光谱、配方验收计算 |
实际配方判定时,建议以 1 nm 步长积分结果为基准,并用 5 nm 结果做交叉校验;若两者偏差超过 2%,说明光谱中存在窄峰,必须使用更细步长或原始光谱仪数据。