脑机接口基础学习12---信号空间投影SSP应用

2024-03-20 12:40

本文主要是介绍脑机接口基础学习12---信号空间投影SSP应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

投影矩阵根据您试图投射出的噪声种类而变化,信号空间投影(SSP)是一种比较有无感兴趣信号的测量值来估算投影矩阵应该是什么的方法。例如:您可以进行其他“空房间”测量,以记录没有对象存在时传感器上的活动。通过查看空房间测量中各MEG传感器的活动空间模式,可以创建一个或多个N维向量,以给出传感器空间中环境噪声的“方向”(类似于上面示例中“触发器的影响”的向量)。SSP通常也用于消除心跳和眼睛运动伪影,提取伪影周围的时间段(epochs)并求平均值来估计噪声的方向。有关示例,请参见使用SSP修复工件。一旦知道了噪声向量,就可以创建一个与其正交的超平面,并构造一个投影矩阵,将实验记录投影到该超平面上。这样,测量中与环境噪声相关的部分就可以被移除。同样,应该清楚的是,投影降低了数据的维数–你仍然会有相同数量的传感器信号,但他们不会都是线性独立的-但通常有数十或数百个传感器,而你要消除的噪声子空间只有3-5维,因此自由度的损失通常是没有问题的。
MNE-Python 中的投影(projector)
在示例数据中,已经使用空房间记录执行了SSP,但是投影与原始数据一起存储,并且尚未应用(或者说,投影尚未激活),在这里,我们将加载示例数据并将其裁剪为60秒,可以在以下 read_raw_fif()的输出中看到投影:
1.导入工具库

import os
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D  #noqa
from scipy.linalg import svd
import mne

2.加载数据

sample_data_folder=r'E:\脑机接口资料\MNE-sample-data'
sample_data_raw_file=os.path.join(sample_data_folder,'MEG','sample','sample_audvis_raw.fif')
raw=mne.io.read_raw_fif(sample_data_raw_file)
raw.crop(tmax=60).load_data()

在这里插入图片描述
在MNE-Python中,环境噪声矢量是通过主成分分析(通常缩写为PCA)来计算的,这就是为什么SSP投影仪通常有“PCA-v1”这样的名称。(顺便说一句,由于执行主成分分析的过程在幕后使用了奇异值分解,因此在已发表的论文中也经常看到类似“投影仪是使用SVD计算的”这样的短语)投影仪存储在raw.info的projs字段中:在MNE-Python中,使用主成分分析(通常缩写为“PCA”)来计算环境噪声向量,这就是SSP投影通常使用“PCA-v1”之类的名称的原因。(顺便说一下,由于执行PCA的过程在后头使用了奇异值分解,所以在已发表的论文中经常会看到类似“使用SVD计算投影”之类的短语)投影(projector)存储在raw.info的projs字段中:

print(raw.info['projs'])

raw.info[‘projs’]是投影对象的普通Python列表,可以通过索引来访问各个投影。投影对象(Projection object)本身类似于Python dict,因此可以使用其.keys()方法查看它包含哪些字段(通常不需要直接访问其属性,但如有必要,可以这样做):

first_projector=raw.info['projs'][0]
print(first_projector)
print(first_projector.keys())

在这里插入图片描述
Raw,Epoch和Evoked对象都有一个布尔类型的proj属性,该属性指示对象中是否存储有任何未应用/不活动的投影。换句话说,如果至少有一个投影并且所有投影都处于活动状态,则proj属性为True。此外,每个投影还具有一个
布尔活动字段:

print(raw.proj)
print(first_projector['active'])

在这里插入图片描述
3.计算投影
在MNE Python中,SSP向量可以使用以下通用函数计算:
‘mne.compute_proj_raw’
‘mne.compute_proj_epochs’
‘mne.compute_proj_ecoked’
这些函数所做的一般假设是,传递的数据包含要通过投影修复的工作的原始数据、时间段或平均值。在实践中,这通常涉及空房间记录或平均EEG或EOG伪造的连续原始数据

通过比较使用和不使用投影的曲线图,可以看到投影仪对测量信号的影响,默认情况下,'raw.plot()'将在绘图前在后头应用投影仪(不修改:class:mne.io.Raw对象);
可以通过如下所示的布尔’proj’参数来控制它,也可以通过绘图窗口右下角的:kbd:'Proj’按钮访问投影界面,以交互方式打开和关闭它们,这里我们只看磁力计,还有一个文件开头的2秒样本

mags=raw.copy().crop(tmax=2).pick_types(meg='mag')
for proj in (False,True):fig=mags.plot(butterfly=True,proj=proj)fig.subplots_adjust(top=0.9)fig.suptitle('proj={}'.format(proj),size='xx-large',weight='bold')

在这里插入图片描述
在这里插入图片描述
如上图,未进行投影的数据proj=False的效果展示,点击‘proj’红框弹出SSP projectors vectors,可以发现都未选中激活;进行了投影的数据图为proj=True点击“proj”红框可以发现投影的信息。
4.加载和保存投影
SSP除可以减少环境噪声外,还可以用于其他类型的信号清洗,可以发现在上一个图中的磁力计信号中有两个较大的偏移,有两个较大的偏移,这些偏移没有被空房间的投影消除,这是受试者心跳的伪影。SSP也可以用于移除这些工件。样本数据包括用于降低心跳噪声的投影,这些投影与原始数据保存在单独的文件中,可以使用mne.read_proj()函数加载该文件:

ecg_proj_file=os.path.join(sample_data_folder,'MEG','sample','sample_audvis_ecg-proj.fif')
ecg_projs=mne.read_proj(ecg_proj_file)
print(ecg_projs)

在这里插入图片描述


'''
利用mne.write_proj()函数,可用于将投影数据以.fif格式保存到磁盘MNE Python推荐使用以-proj.fif(或-proj.fif.gz)来保存投影数据'''mne.write_proj('heartbeat-proj.fif',ecg_projs)

5.添加和移除投影

'''
上面,当我们打印从文件加载的ecg_projs列表时,它显示了两台用于梯度计的投影(前两台,标为'planar'),
两台用于磁力计的投影(中间两台,标为‘axial’),两台用于EEG传感器(最后两个,标记为'eeg')。我们可以使用
add_proj()方法将它们添加到Raw对象:'''
raw.add_proj(ecg_projs)'''
要删除投影,可以使用del_proj()方法,它是根据raw.info['projs']列表中的索引删除投影。如果想要用新的投影替换现有投影,可以使用raw.add_proj(ecg_projs,remove_existing=True)来实现''''''
想要了解心电图(ECG)投影仪如何影响测量的信号,我们可以再次使用投影和不使用投影的数据进行绘图
(注:plot()方法只能临时应用投影进行可视化,而不会永久更改基础数据)。我们将上面创建的mags变量
(只有空房间SSP投影)与空房间和ECG投影仪的数据进行比较:'''
mags_ecg=raw.copy().crop(tmax=2).pick_types(meg='mag')
for data,title in zip([mags,mags_ecg],['Without','With']):fig=data.plot(butterfly=True,proj=True)fig.subplots_adjust(top=0.9)fig.suptitle('{} ECG projrctor'.format(title),size='xx-large',weight='bold')

在这里插入图片描述
在这里插入图片描述
在without ECG projrctor中,meg数据中的ECG部分没有进行projector,而在with ECG projector中,meg数据中ECG部分进行了projector,结果要平滑一些

不积跬步无以至千里,以上学习内容均来自于一个微信公众号,不出意外的话每天都会坚持学习的,继续加油呀!

这篇关于脑机接口基础学习12---信号空间投影SSP应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/829483

相关文章

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

无线路由器哪个品牌好用信号强? 口碑最好的三个路由器大比拼

《无线路由器哪个品牌好用信号强?口碑最好的三个路由器大比拼》不同品牌在信号覆盖、稳定性和易用性等方面各有特色,如何在众多选择中找到最适合自己的那款无线路由器呢?今天推荐三款路由器让你的网速起飞... 今天我们来聊聊那些让网速飞起来的路由器。在这个信息爆炸的时代,一个好路由器简直就是家庭网编程络的心脏。无论你

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象