4. 光纤光谱测量:从探头设计到数据预处理

做生物组织光学测量,光纤光谱这块儿是绕不开的硬骨头。我最早接触这个方向时,总觉得不就是拿根光纤照一下嘛,结果第一次实验数据出来,差点把我整不会了——噪声大、基线飘、重复性差。后来才明白,从探头设计到光谱预处理,每一步都有讲究。

4.1 光纤探头的设计与校准

光纤探头说白了就是光的“搬运工”。但怎么搬、搬多少、搬的过程中会不会“偷工减料”,全看设计。

核心设计参数:

  • 光纤芯径与数值孔径(NA):决定了光的收集效率和角度。我习惯用200μm芯径、NA=0.22的多模光纤,性价比高,耦合效率也够用。
  • 光源-收集光纤间距:这个间距直接影响探测深度。间距越大,光在组织中穿行越深。我做过一个实验,间距从0.5mm拉到2mm,探测深度从0.3mm直接翻到1.2mm。
  • 光纤排布方式:常见的有同轴式、多根环绕式、线性阵列式。我个人偏爱6+1结构(6根收集光纤围1根照明光纤),信号均匀性好。

重要参数速查表:

参数典型值影响
芯径200-600 μm通光量、空间分辨率
NA0.22-0.37收光角度、耦合效率
间距0.5-3 mm探测深度、信噪比
光纤数量1-7根信号强度、均匀性

校准流程:

校准这事儿,我曾经吃过亏。第一次做实验,直接拿探头怼组织,结果数据跟文献差了一个数量级。后来才补上校准步骤:

  1. 暗电流校准:挡住光路,记录探测器自身的暗信号。每次开机都得做,别偷懒。
  2. 参考白板校准:用标准反射白板(比如Spectralon)测参考光谱。我一般测3次取平均,减少随机误差。
  3. 波长校准:用汞灯或氩灯的特征谱线标定波长。嗯,这一步很多人会忽略,但波长不准,后面分析全白搭。

我的小技巧: 校准用的光纤跳线尽量短,弯曲半径别小于10cm。光纤一弯,模式分布就变了,校准结果会漂。

4.2 漫反射光谱与透射光谱的采集

漫反射和透射,是组织光学里最常用的两种测量模式。说白了,一个看“弹回来”的光,一个看“穿过去”的光。

漫反射光谱采集:

  • 探头紧贴组织表面,光源光纤入射,收集光纤在旁侧接收散射回来的光。
  • 我建议采集时保持探头压力恒定。压力一变,组织被压紧,散射系数会变,数据就没法比了。
  • 积分时间一般设100-500ms,具体看信号强度。信号太弱就加积分时间,但别超过1s,否则探测器容易饱和。

透射光谱采集:

  • 光源和探测器分居组织两侧。这个对薄组织(<5mm)比较友好,太厚了光就透不过来了。
  • 我做过一个皮肤透射实验,厚度才1.5mm,信号就已经很弱了。后来改用超亮LED才勉强够用。
  • 注意:透射测量时,组织必须夹紧,但别夹太死。我曾经用力过猛,组织液都被挤出来了,数据直接报废。

避坑指南: 我曾经在采集漫反射光谱时,没注意环境光。结果光谱里多了几个尖峰,查了半天才发现是日光灯管的特征谱线。后来我都在暗室或加遮光罩做测量。

4.3 光谱预处理:去噪、基线校正、归一化

原始光谱是不能直接用的。你想想看,探测器有噪声、光源有波动、光纤有损耗,这些都得处理掉。我一般按三步走:

4.3.1 去噪

噪声主要来自探测器热噪声和散粒噪声。常用的方法:

  • 移动平均平滑:窗口大小选5-15个点。窗口太小去不干净,太大又会抹掉细节。我习惯用7点平滑,效果比较均衡。
  • Savitzky-Golay滤波:这个比移动平均好,能保留峰的形状。阶数一般选2-3阶,窗口大小15-25点。
  • 小波去噪:对付非平稳噪声效果好,但参数调起来麻烦。我一般只在信号特别弱的时候用。
# Python示例:Savitzky-Golay去噪
from scipy.signal import savgol_filter
import numpy as np

# 假设 raw_spectrum 是原始光谱数据
window_size = 15  # 窗口大小,必须为奇数
polyorder = 3     # 多项式阶数
denoised = savgol_filter(raw_spectrum, window_size, polyorder)

4.3.2 基线校正

基线漂移是光谱测量里最烦人的问题之一。原因很多:光源老化、温度变化、光纤微弯。我常用的方法:

  • 多项式拟合校正:选几个无吸收的波长点,用多项式拟合出基线,然后减去。阶数一般2-3阶就够了。
  • 非对称最小二乘法(AsLS):这个算法能自动估计基线,不用手动选点。我最近几年都在用这个,省事不少。

注意: 基线校正一定要在去噪之后做。先去了噪声,基线估计才准。这个顺序我踩过坑,后来就记住了。

4.3.3 归一化

归一化的目的是消除光源强度波动和光纤耦合效率差异。常见方法:

  • 最大值归一化:每个波长点的值除以光谱最大值。简单粗暴,但容易受噪声影响。
  • 面积归一化:除以光谱曲线下的总面积。这个更稳定,我比较推荐。
  • 标准正态变量(SNV):每个波长点减去均值再除以标准差。适合消除散射效应,在组织光谱里用得很多。
# Python示例:面积归一化
normalized = spectrum / np.trapz(spectrum, wavelengths)

我的经验: 归一化方法的选择要看后续分析目标。如果是做分类,SNV效果通常最好。如果是定量分析,面积归一化更稳妥。

4.4 本章知识体系

下面这张图是我自己梳理的,把光纤光谱测量的核心流程串起来了。你一看就明白:

光纤光谱测量知识体系 光纤探头设计 光谱采集 光谱预处理 设计参数 芯径 | 数值孔径 | 间距 排布方式 | 光纤数量 校准:暗电流/白板/波长 采集模式 漫反射光谱 透射光谱 积分时间 | 压力控制 预处理步骤 去噪:SG滤波/小波 基线校正:多项式/AsLS 归一化:面积/SNV 高质量光谱数据 组织光学参数提取 | 成分分析 | 疾病诊断

这张图把整个流程串起来了:从探头设计开始,到采集模式选择,再到预处理三步走,最后得到高质量光谱数据用于后续分析。每一步都环环相扣,哪一步出问题,后面都白干。


公众号:蓝海资料掘金营,微信deep3321