# Python-EEG工具库MNE中文教程(10)-信号空间投影SSP数学原理

projector(投影)和投影背景

projector(投影)（简称proj），也称为信号空间投影（SSP），定义了应用于空间上的EEG或MEG数据的线性操作。

```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

# 定义绘制3d图像
def setup_3d_axes():
ax = plt.axes(projection='3d')
ax.view_init(azim=-105, elev=20)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.set_xlim(-1, 5)
ax.set_ylim(-1, 5)
ax.set_zlim(0, 5)
return ax```

```ax = setup_3d_axes()

# 绘制向量(3, 2, 5)
origin = np.zeros((3, 1))
point = np.array([[3, 2, 5]]).T
vector = np.hstack([origin, point])
ax.plot(*vector, color='k')
ax.plot(*point, color='k', marker='o')

# 将向量投影到x，y平面上并将其绘制
xy_projection_matrix = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 0]])
projected_point = xy_projection_matrix @ point
projected_vector = xy_projection_matrix @ vector
ax.plot(*projected_vector, color='C0')
ax.plot(*projected_point, color='C0', marker='o')

# 添加显示投影的虚线箭头
arrow_coords = np.concatenate([point, projected_point - point]).flatten()
ax.quiver3D(*arrow_coords, length=0.96, arrow_length_ratio=0.1, color='C1',
linewidth=1, linestyle='dashed')```

=

=

`trigger_effect = np.array([[3, -1, 1]]).T`

```# 计算与trigger_effect正交的平面
x, y = np.meshgrid(np.linspace(-1, 5, 61), np.linspace(-1, 5, 61))
A, B, C = trigger_effect
z = (-A * x - B * y) / C
# 切断z=0以下的平面（只是为了使绘图更精细）

```# 计算投影矩阵
U, S, V = svd(trigger_effect, full_matrices=False)
trigger_projection_matrix = np.eye(3) - U @ U.T

# 将向量投影到正交平面上
projected_point = trigger_projection_matrix @ point
projected_vector = trigger_projection_matrix @ vector

# 绘制trigger_effect及其正交平面
ax = setup_3d_axes()
ax.plot_trisurf(x, y, z, color='C2', shade=False, alpha=0.25)
ax.quiver3D(*np.concatenate([origin, trigger_effect]).flatten(),
arrow_length_ratio=0.1, color='C2', alpha=0.5)

# 绘制原始向量
ax.plot(*vector, color='k')
ax.plot(*point, color='k', marker='o')
offset = np.full((3, 1), 0.1)
ax.text(*(point + offset).flat, '({}, {}, {})'.format(*point.flat), color='k')

# 绘制投影向量
ax.plot(*projected_vector, color='C0')
ax.plot(*projected_point, color='C0', marker='o')
offset = np.full((3, 1), -0.2)
ax.text(*(projected_point + offset).flat,
'({}, {}, {})'.format(*np.round(projected_point.flat, 2)),
color='C0', horizontalalignment='right')

# 添加投影的虚线箭头
arrow_coords = np.concatenate([point, projected_point - point]).flatten()
ax.quiver3D(*arrow_coords, length=0.96, arrow_length_ratio=0.1,
color='C1', linewidth=1, linestyle='dashed')```

EEG或MEG信号的投影几乎以相同的方式工作：点x，y，z对应于单个时间点上每个传感器的值，并且投影矩阵根据信号的哪些方面（比如，什么样的噪声）。唯一真正的区别是, 在实际案例中，要处理一系列N维“点”的时间序列（每次采样一个点），而不是单个三维点(x,y,z)，其中N通常是几十个或几百个（取决于实验中EEG/MEG系统有多少个传感器）。

0 条评论

• ### EEG数据、伪影的查看与清洗

在开始脑电(EEG)数据收集和分析之前，一定要确保你的数据尽可能的干净，这意味着收集的数据只是反映了大脑的活动。理论上听起来很简单，但实际上要注意“但是”。由于...

• ### eeglab中文教程系列(14)-绘制独立成分ERP贡献

要完成该操作，必须保证已加载数据和电极位置数据，同时还要对数据进行提取epoch，并对数据进行ICA处理，操作如下：

• ### eeglab中文教程系列(4)-预处理工具

本教程为脑机学习者Rose发表于公众号：脑机接口社区(微信号：Brain_Computer)

• ### 协议森林02 小喇叭开始广播 (以太网与WiFi协议)

“小喇叭开始广播啦”，如果你知道这个，你一定是老一辈的人。“小喇叭”是五十年代到八十年代的儿童广播节目。在节目一开始，都会有一段这样的播音：“小朋友，小喇叭开始...

• ### Python气象绘图教程（十五）—Cartopy_5

本节提要：仿制中央气象台气象服务图片、关于cartopy里的投影与转换、cartopy中extent与boundary。

• ### 使用HttpClient的优解

新工作入职不久，目前仍然还在适应环境当中，笔者不得不说看别人的源码实在是令人痛苦。所幸前些日子终于将工作流畅地看了一遍，接下来就是熟悉框架技术的阶段了。 也正是...

• ### Openshift 4.4 静态 IP 离线安装系列（一）：准备离线资源

本系列文章描述了离线环境下以 UPI (User Provisioned Infrastructure) 模式安装 Openshift Container Pl...

• ### 如何在 Windows 10 中移除 Internet Explorer 浏览器 如何通过控制面板删除 Internet Explorer 浏览器通过 PowerShell 删

现在 Internet Explorer （IE）已经过时了，可以通过控制面板移除这个古老但是依然是一个伟大的浏览器

• ### 轻量级Qt键盘-中文输入

中文输入候选栏ChineseWidget使用QListWidget和样式表实现：

• ### 详解 MNIST 数据集

MNIST 数据集已经是一个被"嚼烂"了的数据集, 很多教程都会对它"下手", 几乎成为一个 "典范". 不过有些人可能对它还不是很了解, 下面来介绍一下.