ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Brainstorm处理fNIRS数据全流程实战:从导入到事件相关平均

Brainstorm处理fNIRS数据全流程实战:从导入到事件相关平均 Brainstorm处理fNIRS数据这件事我在一年多前第一次尝试的时候差点被一堆光学通道和浓度单位绕晕。后来用顺手了才发现这个软件处理近红外数据其实比想象中靠谱尤其在可视化方面比不少专用fNIRS工具要直观太多。如果你正打算用手头的近红外数据做分析又不想一上来就啃MATLAB脚本这篇实战记录应该能帮你省下不少试错的时间。这篇文章围绕Brainstorm对fNIRS数据的完整分析流程展开覆盖数据导入、光极位置设置、浓度转换、预处理、事件相关平均等关键环节。内容既适合刚接触近红外数据分析的研究生也适合已经用其他软件处理过fNIRS、想换到Brainstorm试试的同行。1. 整体设计思路为什么选择Brainstorm处理近红外数据1.1 fNIRS分析的常见痛点与Brainstorm的定位近红外光谱脑功能成像fNIRS这几年在认知神经科学、教育学、人机交互等领域越来越常见优势是便携、对运动相对耐受、被试舒适度高。但提到数据分析很多人第一反应是Homer、NIRSLab或者厂商自带的软件再不然就是自己写MATLAB脚本。这些工具各有优点可一遇到多模态数据整合、可视化展示、统计比较流程就变得支离破碎。Brainstorm是个开源软件最初主要面向MEG和EEG后来把fNIRS的模块也整合了进来。它最大的优势是提供了一个相对统一的处理框架从原始光强数据到血氧浓度变化再到组水平统计都能在一个图形界面里完成。对于实验室里同时采集EEG和fNIRS的项目来说这种一体化设计格外方便不用在多个软件之间来回切换。我自己的体会是Brainstorm处理fNIRS并不是要取代Homer这类专用工具而是提供另一种思路基于数据库管理的处理流程所有中间结果都有清晰的节点记录每一步操作都可回溯、可复现。这一点在论文审稿阶段特别有价值因为你能清楚说明数据处理流程到底做了什么。1.2 Brainstorm处理fNIRS的核心流程框架用Brainstorm处理fNIRS整体流程可以概括为创建协议、导入数据、设置光极位置、转换浓度、质量检查与预处理、平均分析、统计分析。这个框架对应MEG/EEG处理思路的延伸只是信号来源从电生理信号变成了光学信号。跟Homer那种偏脚本式的工作流不同Brainstorm把每个处理步骤都封装成可点击的节点胶水代码少很多。你要做的其实是理解每一步背后的物理意义而不是纠结于语法细节。比如导入数据时软件会问你光极位置文件、波长信息、源-探测器间距等这些参数直接影响后面的浓度转换结果务必弄清楚每个字段的含义。2. 数据准备与导入从原始文件到Brainstorm工程2.1 准备fNIRS数据文件的基本要求在动手导入之前先确认你的数据文件格式是Brainstorm支持的。目前主流的近红外设备如NIRx、Hitachi、Artinis等都可以导出常见的文本或MATLAB格式而Brainstorm原生支持.nirs和SNIRF格式。SNIRF是近几年推广的标准化格式如果你用的设备支持导出SNIRF优先选这个因为通道空间信息、波长、采样率都会打包在一个文件里导入省事不少。如果只有厂商原始格式比如NIRx的.hdr/.wl1/.wl2组合建议先用设备自带软件或Homer转换成.nirs或SNIRF再导入Brainstorm。这里有个注意点转换时一定要保留源-探测器距离信息有些软件导出时默认不写入距离参数后面做浓度转换就会报错或者结果不对。提示我习惯在导入前把所有数据文件重命名为“被试编号_任务/条件”的格式比如Sub01_rest、Sub02_task1。Brainstorm的数据库结构是按Subject/ Condition组织的前期命名规范能省去后期整理的大量时间。2.2 创建Brainstorm协议并导入原始数据打开Brainstorm后第一步是创建Protocol协议可以把它理解为一个独立的数据分析工程。同一次实验的数据最好放在一个Protocol里不同实验或不同分析目的再另建Protocol避免数据混乱。创建好Protocol后双击进入在左侧数据库浏览器的空白处右键选择Import data。找到你的.nirs或SNIRF文件选中后向导会弹出选项。这里有几项要逐一确认采样率软件通常会从文件头读取但要核对是否与实验设置一致。事件标记Triggers/Markers确认标记通道是否正确识别尤其注意有些设备把刺激标记存储在辅助通道里需要手动指定。数据单位近红外原始数据一般是光强raw intensity或光密度optical densityBrainstorm导入后会记录这个单位。导入完成后数据库浏览器里会出现新的subject和data文件双击data文件可以查看原始信号波形。这时可能看到信号曲线忽高忽低属正常现象还没做浓度转换先不要急着下结论。2.3 导入数据的常见格式解析与排查如果导入后发现通道数不对或者信号幅值异常大/小多半是文件读取时单位或通道顺序出了问题。可以按下面的顺序排查先用文本编辑器打开.nirs文件如果体积不大确认数据矩阵维度与通道数量是否一致。查看SDSource-Detector配对的第3列是否包含源-探测器距离若全是0则准备手动补全。文件里的trigger信息是否在辅助通道若Brainstorm识别成了普通通道需要在导入设置里指定。我在处理NIRx设备数据时遇到过好几次采样率读取错误的情况明明实验设置是7.8125 Hz软件却读成了10 Hz。这种问题不会报错但会直接影响后续所有时间相关的分析所以导入后用事件标记的时间戳反推一下实际采样率是个顺手就能做的验证办法。3. 光极位置配置影响空间定位的关键环节3.1 光极位置为什么重要fNIRS的空间分辨率虽然在所有脑成像技术里不算高但光极位置决定了探测区域对应的脑区位置错了后面所有脑区层面的推论都没有意义。Brainstorm的优势在于能把fNIRS通道位置对应到标准脑模板上进而用类似MEG/EEG的可视化方式展示。这一步有两种常见做法一种是根据设备厂商提供的10-20系统坐标手动输入另一种是直接读入数字化仪记录的3D坐标。如果两者都没有Brainstorm也提供了根据排布自动放置的选项但精度会打折扣。建议条件允许的情况下务必用数字化仪记录每个光极的3D空间坐标这对后续与MRI结构像配准、源定位分析都大有帮助。3.2 在Brainstorm中设置与检查光极位置导入原始数据后在通道文件上右键选择Edit channel file就可以进入通道编辑界面。这里能看到所有通道的列表每个通道包含位置标签和坐标值。需要确保三件事每个通道的位置标签与实际物理位置一致。坐标单位是毫米mm且参考空间一致如MNI空间或Native空间。源和探测器的类型标记正确别把源标成探测器或反之。位置配置完成后用3D可视化检查是推荐流程。在Brainstorm里打开通道的3D视图旋转查看光极是否落在合理的头皮区域通道连线是否构成预期的探测路径。我第一次导入时没仔细检查后来发现有一侧通道整体偏移了大约2 cm相当于探测的脑区完全变了直接按这个结果分析的话结论就是错的。3.3 使用标准空间模板注册光极位置如果实验没有采集个体结构像可以使用Brainstorm自带的ICBM152标准脑模板进行空间配准。这时光极位置需要转换为MNI坐标Brainstorm提供了一些常用模板的转换选项如10-20系统鼻根-左耳前点-右耳前点的坐标体系。操作步骤是在通道文件导入向导中选择“Use template”然后选择与实验排布最接近的模板。模板与实际摆放总会有些差异不必追求完全一致但要求整体拓扑结构对应。实测下来模板化处理对组水平分析影响不大但如果要做个体水平的源定位建议还是用数字化仪采集的实际坐标。4. 浓度转换原理为什么必须从光强算到血氧浓度4.1 修正的Beer-Lambert定律MBLL核心思想fNIRS直接测量的是从源光极发出、经过大脑组织散射吸收后到达探测器光极的光强变化。这个光强变化本身和脑血流动力学活动并不直接对应需要依据修正的Beer-Lambert定律Modified Beer-Lambert Law, MBLL转换成含氧血红蛋白HbO和脱氧血红蛋白HbR浓度的相对变化。MBLL的核心公式是光密度变化ΔOD等于吸收系数ε、浓度变化ΔC、光程因子DPF和源-探测器距离d之间的乘积关系。由于大脑是强散射介质光在组织里实际传播路径不等于源-探测器的直线距离所以要加上差分路径因子进行修正。不同波长下的HbO和HbR吸收系数不同所以至少需要两个波长的光强数据才能联立方程解出两种血红蛋白各自的浓度变化。4.2 在Brainstorm中执行浓度转换的具体步骤在Brainstorm中执行浓度转换前需要确认导入的数据是在哪个阶段、波长是哪个值。选中data文件右键选择“Convert to concentrations”或类似选项软件会弹出设置窗口要求填入以下参数波长1和波长2的数值。两种波长对应的吸收系数通常由设备厂商给出Brainstorm也内置了常见波长默认值。差分路径因子DPF取值。源-探测器距离。参数填好后运行转换数据库里会生成一个新的文件通常显示为“HbO/HbR”浓度数据。这个文件就是后续分析的基础。转换完成后建议先画一下HbO和HbR的波形看看是否呈大致镜像关系——这是血流动力学信号的一个典型特征如果完全不相关甚至同向变化多半是浓度转换参数设置有问题。注意关于DPF取多少不能盲目照搬文献。DPF与年龄、脑区、波长都有关系婴幼儿和成人的DPF差异明显。学术论文里常用的成人额区DPF大约在5~7之间但最好参考与实验被试群体匹配的文献来确定。4.3 浓度转换后的信号检查与常见陷阱浓度转换完成后最常遇到的问题是HbO幅值大于HbR且信号变化趋势上出现了漂移。前者正常因为fNIRS对HbO的灵敏度通常更高后者就需要在预处理阶段通过滤波和去漂移来处理。常见的陷阱有几个。第一源-探测器距离错误导致浓度的绝对幅值整体偏大或偏小。第二波长输入错误比如设备是760nm和850nm却填成了735nm和850nm算出来的浓度曲线形态会异常。第三DPF设置不当会影响幅值但这个参数在组水平相对比较中影响较小因为所有被试统一使用相同DPF主要影响个体绝对定量。第四有些软件会把单位转换为μM微摩尔Brainstorm的默认单位可能与你的习惯不一样记录文档里要写清楚论文里注意统一。5. 预处理流程去伪迹与信号质量的系统检查5.1 质量检查识别坏通道与高噪声数据浓度转换得到HbO/HbR数据之后别急着做平均和分析先做质量检查。fNIRS信号对探头与头皮的接触状态极其敏感头发遮挡、探头翘起、运动拉扯都会让某个通道的噪声水平明显升高。在Brainstorm中可以通过查看每个通道的功率谱密度来判断噪声水平。正常情况下fNIRS信号应该集中在0.01~0.1 Hz的低频范围与血流动力学响应的时间特性一致如果某个通道在更高频段也出现明显异常尖峰或整体噪声底抬高就标记为坏通道。还可以观察信号的峰峰值是否异常明显超出大部分通道范围的需要记下来。另一个实用方法是比较HbO与HbR曲线的相关性。在干净通道中任务诱发的典型响应应表现为HbO上升、HbR下降呈现负相关或大致镜像的模式。如果某通道两曲线高度同向变化或呈现巨大尖峰通常代表光耦合不好应标记为坏通道并在后续分析中排除。5.2 运动伪迹识别与处理方法运动伪迹是fNIRS数据里最让人头疼的问题。头动、吞咽、说话等都会造成光强突变在浓度数据上表现为尖锐的小幅或大幅尖峰。Brainstorm提供了数据编辑器可以用来手动剔除或修正这些伪迹。一个效率较高的做法是先把原始光强数据未转换浓度前叠加查看因为很多运动伪迹在光强数据上比浓度数据更明显。发现明显尖峰后可以选中这些时间段选择“Reject time segments”或“Mark as artifact”等方式标记。有些教程推荐使用样条插值来修正运动伪迹Brainstorm里不一定有对应功能但你可以用信号编辑器里的滤波或平滑操作来消除高频尖峰然后以标记好的坏区段为准做后续平均。如果运动伪迹的范围过大遍布全脑通道建议直接删除该被试的这段数据。不要逼着自己在大量伪迹数据上做复杂的修正那样容易引入更多偏差。基于我自己的处理经验运动伪迹集中出现在任务开始后的前10秒内大概率是指示语或任务切换时被试的身体姿势调整所致。建议实验设计时在任务开始前加入更长的静息基线或提示缓冲期。5.3 滤波参数选择带通滤波设置与经验值fNIRS滤波的目标基本一致去除缓慢漂移低频和生理噪声高频。血流动力学响应本身的频带很低所以低频截止频率通常设为0.01 Hz用于去除基线漂移高频截止频率通常设在0.1~0.5 Hz之间上限太低会削弱任务相关信号太高又会放行脉搏和呼吸噪声。Brainstorm的频率滤波操作很直观可以选择Band-pass filter然后设置低截止和高截止值。我通常设0.01~0.1 Hz作为默认分析参数因为认知任务诱发的血流动力学反应在这个频段内。如果你的实验关注的是静息态功能连接需要保留更低的频段比如0.01~0.08 Hz这需要根据实验目的调整。有一点要特别注意滤波操作应该在浓度转换之后进行还是在光强数据上进行学术界存在不同习惯。我在Brainstorm中倾向于先转换浓度、再做滤波因为浓度数据才是我们最终关心的生理量对浓度数据滤波更直观且便于检查。但如果你需要严格遵循某些分析流水线那就按对应流水线的要求来做。5.4 预处理顺序的建议从原始数据到干净信号预处理流程的顺序对结果影响很大一个比较合理的顺序是导入原始光强数据检查信号质量标记坏通道。执行浓度转换。使用带通滤波去除低频漂移与高频噪声。剔除或修正运动伪迹如果伪迹严重先剔除时间段再做滤波也行视数据质量而定。对每个通道计算信噪比或方差最终确定有效通道。保存处理后的数据进入平均分析或单试次分析阶段。这个顺序并不是绝对的但总体原则是先去除明显的噪声源再做信号范围的限制性滤波。顺序颠倒可能导致噪声被滤波操作部分掩盖后期不好排查。6. 事件相关平均与基本统计分析实操6.1 事件相关平均的原理与操作路径在完成了预处理之后就可以进入统计分析阶段。fNIRS的事件相关平均与EEG的ERPs事件相关电位思路一脉相承把每个刺激出现前后的时间窗口同步对齐再将多个试次叠加平均从而得到与该事件相关的血流动力学响应的平均变化曲线。在Brainstorm中导入数据时已经附带刺激标记。预处理完毕后选中处理好的数据右键选择“Compute average”或类似操作软件会根据标记把数据分段并计算平均。关键设置包括时间窗口范围一般设置为刺激前5~10秒到刺激后15~20秒因为血流动力学响应有延迟并会持续一段时间。基线校正通常取刺激前2~5秒作为基线将此段时间内的平均信号水平校为零。单独平均条件与总平均如果有多个实验条件可以选择分开平均也可以合并。6.2 单被试平均结果解读波形与地形图平均结果显示出来后先观察典型的血流动力学响应波形刺激开始后HbO曲线通常在大约4~6秒内上升达到峰值然后再回落HbR曲线呈现相反趋势下降后在6~10秒左右达到最低点再回升。在Brainstorm里还能以地形图topography即头皮表面的通道拓扑图的方式查看平均结果。这个功能很直观点和点之间的区域通过插值形成连续的脑区激活图方便定位主要的激活区域。具体操作是在平均文件中打开地形图视图选择特定时间点或时间窗口控件会显示出这个时间点上通道间的空间分布。这种可视化对检查结果是否符合先验预期很有帮助。6.3 基于时间窗口的个体水平统计检验平均波形只是直观展示真正要回答“这个条件下是否显著激活”需要对时间窗口做统计检验。常见做法是提取某个时间窗口内的平均幅值如刺激后5~10秒然后进行单样本t检验比较是否与0有显著差异。在Brainstorm中可以用“Extract values”或类似功能导出选定时间窗口内的平均浓度值再做t检验。这里有个要点时间窗口的选择要在看到结果之前根据假设确定避免事后挑窗口带来的多重比较问题。如果实在没有先验一个折中方法是报告多个时间窗口的结果或使用cluster-based permutation等矫正方法。6.4 组水平分析与后续分析方向提示如果实验包含多个被试Brainstorm支持在Process1界面批量处理所有被试的数据然后进行组水平的统计分析。组水平分析通常是将每个被试的有效通道平均数值导出再用SPSS、R或MATLAB做混合效应模型或重复测量方差分析。原因是Brainstorm自带的组水平统计功能相对基础复杂的模型还是交给专业统计软件更合适。这篇系列文章先讲到个体水平的事件相关平均组水平统计和更高级的时频分析后面可以另起一篇专门展开。7. 常见问题与排查技巧实录7.1 导入时报错或数据空白时的排查顺序导入阶段最常见的问题就是软件读入文件后数据库里出现空数据节点打不开信号。多数原因出在文件格式兼容性上推荐按以下顺序排查确认文件扩展名与内容格式一致用设备软件重新导出一次换个格式如.nirs换SNIRF再试确认最新版Brainstorm已安装。如果是从Homer导出的.nirs文件检查是否存在MATLAB版本兼容问题必要时在Homer里另存为SNIRF格式。7.2 浓度转换结果异常的可能原因浓度转换后曲线形态异常优先检查波长输入和DPF参数。比较典型的现象是HbO、HbR同向大幅变化或转换后信号幅值小到与噪声无法区分。前者多半是源-探测器距离填错后者多半是波长或吸收系数填错。还有一类情况是两个波长的光强变化方向完全相同导致联立方程的解不稳定这种时候需要回到原始光强数据核查两个波长的信号质量是否正常。7.3 通道位置与坐标常见问题光极位置设置出错的现象包括通道分布与脑区预期不符、3D视图里光极全部堆在原点附近、坐标单位与模板不匹配。处理办法是在通道编辑界面逐项核验坐标数值必要时手动修改或重新导入。数字化仪采集的坐标如果坐标系定义不同如参考点不同需要在导入向导中进行坐标变换避免张冠李戴。7.4 预处理后信号仍然较差时怎么办经过滤波和去伪迹后如果信号仍然不理想可以从三个角度检查被试头型/发量影响信号质量数据采集阶段的问题无法靠后期处理完全挽歌通道位置是否在颞叶等信噪比较低的区域这类通道天然噪声大实验任务本身是否引起了大型动作伪迹比如需要口头回答的任务会带来持续的头动。这时候选择去掉低信噪比通道或在该被试上重新采集相关数据都比各种后期补救更有意义。7.5 常见问题速查表现象可能原因解决建议导入后数据为空文件格式不兼容或损坏用设备软件重新导出换SNIRF格式采样率不对文件头信息读取错误用事件时间戳反推采样率并手动修正通道位置错位坐标参考空间不一致检查坐标单位与参考点重新导入坐标浓度幅值异常大源-探测器距离错误或DPF不当核对距离参数调整DPF取值HbO/HbR同向波动波长或吸收系数设置有误与设备厂商确认波长与吸收系数运动伪迹遍布全脑被试头动过多剔除该时间段的试次或标记坏通道平均后无激活反应事件标记未导入检查触发通道设置重新导入标记实用技巧是每完成一个处理步骤后就停下来检查一下中间结果别一口气跑到最后再回头找问题那样定位问题会特别困难。我踩过的坑基本都源于跳步和过早进入批量处理现在都改成了先单被试全流程跑通再批量全样本处理。8. 实操心得与后续扩展建议8.1 几个节省时间的实际操作习惯第一建立标准操作流程文档记录每个被试数据的参数设置和使用版本因为Brainstorm升级后默认参数可能变化。第二尽量使用非交互界面批处理减少鼠标重复操作Brainstorm的Process1界面支持脚本录制和批处理虽然看起来要花时间学但长久来看收益很高。第三定期备份Protocol数据库文件不要只相信本地盘上的原始数据。8.2 fNIRS数据分析的常见误区提醒常见误区之一是把fNIRS数据分析过类似EEG的时间分辨率试图解释几十毫秒级别的差异这在物理上就不合理。fNIRS更适合考察秒级时间尺度的脑活动变化。误区之二是过度解读HbO幅值的绝对大小。因为DPF和距离参数影响较大fNIRS更适合组内条件和组间差异的比较而不是对不同个体或不同研究之间进行直接定量对比。误区之三是认为HbO和HbR必须同时显著才认为是有效激活这一要求有时过于严苛实验设计需要结合具体文献来判断。8.3 后续分析方向的扩展处理完事件相关平均后后续可以考虑的方向包括时频分析考察任务相关的振荡特征、功能连接分析探究脑区间的协同变化、基于GLM的逐试次分析以及结合结构MRI的源定位重建。这些方向中时频与功能连接分析对实验设计的要求更苛刻需要在数据采集阶段就做好规划。8.4 如果你用的是自己的采集设备最后补充一个容易忽略的点不同设备厂商的数据格式虽然都可以转换到SNIRF但转换过程中可能丢失部分元信息如标记通道定义、光源波长精确值等。建议保留好原始的厂商数据作为唯一真实来源所有转换文件都可以随时再从原始文件生成。若发现Brainstorm导入后事件标记与原始数据不一致回到原始数据检查标记是否以独立通道存储比在Brainstorm中猜测参数更靠谱。我在之后的实际使用中又把配套的事件相关分析和组水平比较的细节也整理了一遍包括具体参数怎么设、碰到异常结果怎么排查这些内容更适合分两次讲所以会放到系列第二篇和第三篇里。手头正好有近红外数据卡在某个步骤的朋友可以对照这篇里的流程先跑一遍卡住了再回头看看问题排查那一节很多疑问应该能直接解决。
返回列表