近红外光谱脑功能成像(fNIRS):1.光学原理、变量选取与预处理

一、朗伯-比尔定律与修正的朗伯-比尔定律

        朗伯-比尔定律 是一个描述光通过溶液时被吸收的规律。想象你有一杯有色液体,比如一杯红茶。当你用一束光照射这杯液体时,光的一部分会被液体吸收,导致透过液体的光变弱。朗伯-比尔定律告诉我们,透过液体的光的强度减少的程度与以下三个因素有关:

  1. 光的传输路径长度:如果你增加液体的深度(即光穿过的路径更长),光被吸收得更多,透过液体的光就更少。
  2. 吸光物质的浓度:如果液体中吸收光的物质(比如茶叶中的色素)更多,光被吸收得更多,透过液体的光就更少。
  3. 消光系数:这是一个物质的特性,表示这种物质吸收光的能力。不同的物质有不同的消光系数。

朗伯-比尔定律的数学表达式是:

OD=ϵ⋅C⋅L

其中:

  • OD是光密度(Optical Density),表示光被吸收的程度。
  • ϵ 是消光系数,表示物质吸收光的能力。
  • C 是吸光物质的浓度。
  • L 是光穿过的路径长度。

        修正的朗伯-比尔定律 是在朗伯-比尔定律的基础上考虑了光在生物组织中的散射效应。在生物组织中,光不仅会被吸收,还会因为与组织中的微粒碰撞而改变方向,这种现象叫做散射。散射使得光在组织中的实际路径比直线更长,因此光被吸收得更多。

        修正的朗伯-比尔定律考虑了这一点,并引入了两个新的参数:

  1. 路径长度修正因子(DPF):这个因子表示由于散射效应,光在组织中的实际路径长度是直线长度的多少倍。
  2. 其他因素引起的光强衰减总和(G):这个参数表示除了吸光物质之外,其他因素(如颅骨、脑脊液等)引起的光强衰减。

        修正的朗伯-比尔定律的数学表达式是:

OD=ϵ⋅C⋅DPF⋅L+G

        在实际应用中,由于 G 很难测量,通常我们只关注吸光物质浓度的相对变化,而不是绝对值。通过测量不同时间点的光衰减量,并利用修正的朗伯-比尔定律,可以求解出血红蛋白浓度的相对变化,这对于研究脑功能等生物学过程非常有用。

二、因变量与自变量选取

       在认知心理学领域,fNIRS脑成像实验通过操纵自变量(如不同刺激或行为)来记录血液动力学响应的变化,以此作为因变量,探索认知功能的神经基础。因变量在fNIRS研究中通常表现为血液动力学响应的变化,具体可以取的值包括氧合血红蛋白和脱氧血红蛋白的浓度变化、脑区血流量的变化等

        自变量是实验者可以操纵的因素,其不同取值称为不同水平或条件。自变量可以通过操作化定义转换为具体、可量化的指标,以便于实验操作和结果分析。例如,受试者对任务的参与程度可以通过可能获得的报酬数量来量化,通过设置不同等级的报酬来实现对受试者参与程度这个变量的操纵。自变量可以根据数据类型(类别变量或连续变量)、来源(作业/任务变量、环境变量、受试者变量)和可操作性进行分类。类别变量的例子如性别(男/女),连续变量的例子如学习成绩(0—100的任意取值)。

        单因素设计通过比较实验条件与基线条件来计算神经响应指标。减法法则要求比较两种任务的反应时差异,以分离特定认知过程的反应时。因变量在这种情况下可以取的值包括反应时、正确率等行为响应指标,以及神经活动引起的局部血液动力学响应。

        共性法则通过多个减法实验求得共性部分,提高脑区与认知成分关联的可能性。因素设计同时操纵多个自变量,每个因素设置多个水平,以探索因素间的交互作用。因变量在因素设计中可以取的值包括不同实验条件下神经活动的变化,如脑区血红蛋白浓度的变化。

        参数设计将感兴趣的变量视为连续变量,通过在多个水平上观察和记录因变量的值,来确定自变量与神经响应之间的具体关系模式。因变量在参数设计中可以取的值包括随着自变量变化,脑活动的变化模式,如线性或非线性关系。

三、数据预处理

  1. 去漂移(Detrending)

    • 原因成像系统(如机器)在工作过程中逐渐升温环境温度和光照的改变受试者缓慢的头动,通常表现为较长时间范围内的缓慢波动。这种漂移会使fNIRS信号的基线发生改变,影响信号的稳定性和准确性。
    • 方法:通过拟合信号中的线性或非线性趋势项,然后从原始信号中减去这些趋势项来实现去漂移。
    • 数学原理:去漂移是通过拟合信号中的线性或非线性趋势项,然后从原始信号中减去这些趋势项来实现的。
    • 公式:假设原始信号为 y(t),拟合的趋势项为 T(t),去漂移后的信号为 y_{d}(t),则有:

      y_{d}(t) = y(t) - T(t)

  2. 周期性噪声滤波(Filtering)

    • 原因:周期性噪声包括机器噪声(如工频噪声50Hz和随机热噪声高于2Hz)和生理噪声(如心率约1Hz、呼吸约0.2—0.3Hz、Mayer wave约0.1Hz和极低频的生理波动低于0.01Hz)。这些噪声成分具有明显的周期性波动特点,会影响信号的纯净度。
    • 方法:通过高通滤波、低通滤波和带通滤波等频域滤波方法去除信号中具有明显周期性波动特点的噪声成分。
    • 数学原理:滤波是通过在频域中去除特定频率成分来实现的。高通滤波、低通滤波和带通滤波是常用的滤波方法。
    • 公式:假设原始信号为 y(t),滤波后的信号为 y_{f}(t),滤波器的传递函数为 H(f),则有:

      Y_{f}(f) = Y(f) \cdot H(f)

  3. 头动噪声和浅层噪声去除

    • 头动噪声去除
      • 原因:受试者头动可能导致光极与头皮接触不良,这种头动噪声往往体现为信号中的大幅跳变。由于其出现时间和位置都较为随机,传统的频域滤波预处理方法很难去除这种噪声。
      • 方法:通过异常点检测方法检测到头动噪声,将任意时间点信号的幅值与一段时间内信号的平均幅值做对比,并且设置一定的阈限来标出异常点,然后去除这些异常点。
      • 数学原理:头动噪声通常表现为信号中的大幅跳变,可以通过异常点检测方法来识别和去除。
      • 公式:假设信号的均值为 μ,标准差为 σ,阈值为 k,则异常点检测公式为:异常点←∣y(t)−μ∣>k⋅σ
    • 浅层噪声去除
      • 原因:头皮、颅骨和脑膜等浅层组织中含丰富的毛细血管,呼吸、心跳等生理波动及任务相关的自主神经活动都会引起这些毛细血管中血红蛋白浓度的变化,从而导致fNIRS光衰减量的变化(即浅层生理噪声)。
      • 方法:通过短间隔通道法或空间滤波方法去除浅层噪声。短间隔通道法利用额外的短间距fNIRS通道记录浅层生理噪声,再从信号中将其去除。
      • 数学原理:浅层噪声可以通过短间隔通道法或空间滤波方法来去除。短间隔通道法利用额外的短间距fNIRS通道记录浅层生理噪声,然后从信号中减去这些噪声。
      • 公式:假设浅层噪声信号为 n(t),原始信号为 y(t),去除浅层噪声后的信号为 y_{n}(t),则有:y_{n}(t) = y(t) - n(t)

四、Python代码实现

代码如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import detrend, butter, filtfiltnp.random.seed(0)  # 模拟生成
t = np.linspace(0, 100, 1000)
y = np.sin(0.1 * t) + 0.1 * np.random.randn(1000)  # 添加正弦信号和噪声
y += 0.01 * t  # 添加线性漂移# 去漂移
y_detrend = detrend(y)# 周期性噪声滤波
def butter_bandpass_filter(data, lowcut, highcut, fs, order=4):nyq = 0.5 * fslow = lowcut / nyqhigh = highcut / nyqb, a = butter(order, [low, high], btype='band')filtered = filtfilt(b, a, data)return filteredfs = 10  # 采样频率
lowcut = 0.5
highcut = 2.0
y_filtered = butter_bandpass_filter(y_detrend, lowcut, highcut, fs)# 头动噪声去除
def remove_spikes(data, threshold=3):mean = np.mean(data)std = np.std(data)outliers = np.abs(data - mean) > threshold * stddata_clean = np.copy(data)data_clean[outliers] = meanreturn data_cleany_no_spikes = remove_spikes(y_filtered)# 浅层噪声去除(实际应用中需要额外的短间距通道数据)
y_no_shallow = y_no_spikes - 0.1 * np.random.randn(1000)  fig, axs = plt.subplots(5, 1, figsize=(10, 15), sharex=True)plt.rcParams['font.family'] = 'serif'
plt.rcParams['font.size'] = 12
plt.rcParams['lines.linewidth'] = 1.5
plt.rcParams['lines.linestyle'] = '-'axs[0].plot(t, y, color='blue')
axs[0].set_title('Original Signal', fontsize=14)
axs[0].grid(True)axs[1].plot(t, y_detrend, color='green')
axs[1].set_title('Detrended Signal', fontsize=14)
axs[1].grid(True)axs[2].plot(t, y_filtered, color='red')
axs[2].set_title('Filtered Signal', fontsize=14)
axs[2].grid(True)axs[3].plot(t, y_no_spikes, color='purple')
axs[3].set_title('Signal without Spikes', fontsize=14)
axs[3].grid(True)axs[4].plot(t, y_no_shallow, color='orange')
axs[4].set_title('Signal without Shallow Noise', fontsize=14)
axs[4].grid(True)plt.xlabel('Time (s)', fontsize=14)
plt.tight_layout()
plt.show()

结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/38874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis主从复制哨兵模式集群管理

主从复制: 主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡&…

HbuilderX:安卓打包证书.keystore生成与使用

前置条件 已安装jdk或配置好jre环境。 .keystore生成 打开cmd,切换到目标路径,输入以下命令, keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore 输入密钥库口令(要记住), 然后输入一系列信息, …

ui.perfetto.dev sql 查询某个事件范围内,某个事件的耗时并降序排列

ui.perfetto.dev sql 查询某个事件范围内,某个事件的耗时并降序排列 1.打开https://ui.perfetto.dev 导入Chrome Trace Json文件2.ParallelMLP.forward下的RowParallelLinear.forward3.点击Query(SQL),在输入框中输入以下内容,按CtrlEnter,显示查询结果4.点击Show timeline,点击…

2024年07年01日 Redis数据类型以及使用场景

String Hash List Set Sorted Set String,用的最多,对象序列化成json然后存储 1.对象缓存,单值缓存 2.分布式锁 Hash,不怎么用到 1.可缓存经常需要修改值的对象,可单独对对象某个属性进行修改 HMSET user {userI…

C++基础(三):C++入门(二)

上一篇博客我们正式进入C的学习,这一篇博客我们继续学习C入门的基础内容,一定要学好入门阶段的内容,这是后续学习C的基础,方便我们后续更加容易的理解C。 目录 一、内联函数 1.0 产生的原因 1.1 概念 1.2 特性 1.3 面试题 …

用随机森林算法进行的一次故障预测

本案例将带大家使用一份开源的S.M.A.R.T.数据集和机器学习中的随机森林算法,来训练一个硬盘故障预测模型,并测试效果。 实验目标 掌握使用机器学习方法训练模型的基本流程;掌握使用pandas做数据分析的基本方法;掌握使用scikit-l…

珠江电缆,承载您梦想的每一度电

在现代社会,电力无处不在,它不仅是经济发展的动力,更是每个人生活中不可或缺的能量来源。而在这个电力驱动的世界里,有一家企业默默地承载着千家万户的梦想,它就是珠江电缆。 连接梦想的每一度电 珠江电缆成立于2001…

绝区零国际服下载 一键下载绝区零国际服教程

绝区零是一款米哈游倾情打造的全新都市幻想动作角色扮演游戏。在游戏中,我们将扮演一名绳匠,这是为出于各种原因需要进入危险空洞的人提供指引的专业人士。您将与独特的角色一起踏上冒险之旅,携手探索空洞,对战强大敌人&#xff0…

Steam夏促怎么注册 Steam夏促账号注册教程

随着夏日的炙热渐渐充斥着每一个角落,Steam平台也赶来添热闹,推出了一系列让人眼前一亮的夏季促销活动。如果你也是游戏爱好者,我们肯定不能错过这次的steam夏促。正直本次夏日促销有着很多的游戏迎来史低和新史低,有各种各样的游…

20240703在飞凌OK3588-C开发板上刷Rockchip原厂的Buildroot20220811

20240703在飞凌OK3588-C开发板上刷Rockchip原厂的Buildroot20220811 2024/7/3 18:25 详细的刷机LOG: [BEGIN] 2024/7/3 18:18:49 rootRK3588:/# DDR Version V1.07 20220412 LPDDR4X, 2112MHz channel[0] BW16 Col10 Bk8 CS0 Row16 CS1 Row16 CS2 Die BW16 Size204…

TP8/6 更改后台入口地址admin改为myadmin 隐藏真实后台网址

原来www.xxx.com/admin 改后www.xxx.com/myadmin config/app.php // 应用映射(自动多应用模式有效)app_map > [admintest>admin],

为何同一PDF文档用不同软件打印效果不同?

通过扫描仪生成的同一PDF文档,同样的设置,为什么别的电脑打出来是白底我的打出来有灰色格子背景?这种情况通常是由于PDF阅读软件的不同造成的差异。 ### 可能的原因和解决方法: 1. **PDF阅读软件的不同**: - **解决方…

Vue3轻松创建交互式仪表盘

本文由ScriptEcho平台提供技术支持 项目地址:传送门 基于 Plotly.js 的 Vue 仪表盘组件 应用场景介绍 仪表盘是一种交互式可视化工具,用于监控和分析关键指标。它广泛应用于各种行业,例如金融、医疗保健和制造业。 代码基本功能介绍 本…

FFmpeg 命令行 音视频格式转换

📚:FFmpeg 提供了丰富的命令行选项和功能,可以用来处理音视频文件、流媒体等,掌握命令行的使用,可以有效提高工作效率。 目录 一、视频转换和格式转换 🔵 将视频文件转换为另一种格式 🔵 指定…

12个惊艳的可视化大屏:解锁数据之美,洞见未来趋势

在数字化转型的浪潮中,可视化大屏以其独特的魅力和强大的功能,成为了企业展示数据、洞察趋势的重要窗口。我们将一同探索12个惊艳的可视化大屏案例,感受数据之美,洞见未来趋势。 可视化大屏,作为数据可视化的高级形态…

vue3绘制广东深圳地图使用echarts

<!-- 饼图 --> <template><el-card><template #header> 地级市分类图 </template><div :id"id" :class"className" :style"{ height, width }"></div></el-card> </template><script …

彻底学会Gradle插件版本和Gradle版本及对应关系

看完这篇&#xff0c;保你彻底学会Gradle插件版本和Gradle版本及对应关系&#xff0c;超详细超全的对应关系表 需要知道Gradle插件版本和Gradle版本的对应关系&#xff0c;其实就是需要知道Gradle插件版本对应所需的gradle最低版本&#xff0c;详细对应关系如下表格&#xff0…

Lua、AB包热更新总结

1.AB包热更新 &#xff08;1&#xff09;AB包是一种特定的压缩文件&#xff0c;可以放模型贴图音效等等 &#xff08;2&#xff09;Resources目录下打包时只读 无法修改&#xff1b;而AB包存储的位置是自定义的&#xff0c;能够动态更新&#xff0c;同时可以决定资源包初始的大…

0703_ARM7

练习&#xff1a; 封装exti&#xff0c;cic初始化函数 //EXTI初始化 void hal_key_exti_init(int id,int exticr,int mode){//获取偏移地址int address_offset (id%4)*8;//获取寄存器编号int re_ser (id/4)1;//printf("address_offset%d,re_ser%d\n",address_o…

Excel中按列的首行字母顺序,重新排列(VBA脚本)

排序前 要求对4列数据按照第一行abcd的顺序排列 VB脚本如下&#xff1a; 要使用这个脚本&#xff0c;请按照以下步骤操作&#xff1a; 打开Excel&#xff0c;然后按下 Alt F11 打开VBA编辑器。在VBA编辑器中&#xff0c;选择“插入” > “模块”&#xff0c;在打开的模块…