Skip to content

第 1 章:EEG 基础

完全没接触过 Python?先看 第 0 章 —— 新手上路,它会教你如何读懂后面出现的所有代码。

本章几乎不涉及 MNE 代码 —— 它是后面一切内容建立的概念基础。读完本章后,你应该能看着一份 EEG 文件的元数据(metadata),大致明白自己在看什么。

本章内容: 1. EEG 到底测量的是什么 2. 10-20 电极命名系统 3. 频段(frequency band) 4. 常见伪迹(artifact) 5. 参考电极 6. 静息态记录 与 任务/事件相关记录 的区别

1. EEG 到底在测量什么?

当皮层中大量神经元以同步、协调的方式放电时,会产生微弱的电场。头皮上的电极捕捉到的正是由此产生的电压差 —— 量级大约在微伏(microvolt)级别(百万分之一伏特),大约比心电图(ECG)信号小 1000 倍,并且远小于周围的各种噪声源(肌肉活动、市电干扰等)。

这一点带来了几个影响深远的后果:

  • 颅骨和头皮会在空间上把信号"抹开"、模糊化,所以单个电极反映的是相当大一片皮层区域的活动,而不是某一个精确的"点"。
  • 由于信号本身极其微弱,很容易被非脑源的电活动(眼部肌肉、下颌肌肉、记录设备本身)淹没。EEG 处理流程的大部分工作,其实都是在把脑信号从这些噪声中分离出来。
  • 相比 fMRI 这类技术,EEG 拥有出色的时间分辨率(毫秒级),但空间分辨率较差。这正是为什么它是研究 ERP 的首选工具 —— ERP 关心的核心问题是大脑活动何时发生,而不是精确地在哪里发生。

2. 10-20 系统

电极位置有标准化的规范,这样不同实验室、不同设备之间的结果才能互相比较。"10-20" 系统把电极放置在头部测量基准点(鼻根到枕外隆凸、耳到耳)连线上 10% 或 20% 的位置。每个电极的名字都编码了它的位置信息:

  • 字母 = 脑区:Fp(额极)、F(额叶)、C(中央)、T(颞叶)、P(顶叶)、O(枕叶)
  • 数字 = 所在半球/距中线的远近:奇数 = 左侧,偶数 = 右侧,数字越大表示离中线越远
  • z 后缀("zero" 的意思)= 中线位置,例如 CzPzOz

所以 C3 = 中央区、左半球;O2 = 枕区、右半球;Fz = 额叶中线。M1/M2(有时写作 A1/A2)是乳突电极(耳后的骨突起处)—— 通常用作参考点,而不是直接测量皮层活动。

与其用文字描述图示,不如用 MNE 内置的 montage(电极布局)直接生成真实的图 —— 这正是我们之前用来修正你自己文件电极位置的那个对象。

10-20 电极系统

import mne
import matplotlib.pyplot as plt

# 设置字体,确保图中的中文能正常显示
plt.rcParams["font.sans-serif"] = ["Microsoft YaHei", "SimHei", "DejaVu Sans"]
plt.rcParams["axes.unicode_minus"] = False

mne.set_log_level("WARNING")

montage = mne.channels.make_standard_montage("standard_1020")
montage.plot(kind="topomap", show_names=True)
plt.show()

png

这是头部的俯视图(鼻子朝上)。找到沿中线排列的 FzCzPzOz,并注意奇数编号都聚集在左侧,偶数编号都在右侧。你自己那份记录里的 32 个通道,正是这个整体布局的一个子集。

3. 频段

EEG 信号常常被分解为几个常规频段。它们与状态的大致对应关系如下(这些只是经验性的概括,不是严格规则):

频段 范围 常见关联
Delta(δ) 1–4 Hz 深度睡眠
Theta(θ) 4–8 Hz 昏昏欲睡、记忆相关过程
Alpha(α) 8–13 Hz 放松清醒状态,尤其是闭眼时,在枕部电极最强
Beta(β) 13–30 Hz 主动思考、专注、运动活动
Gamma(γ) 30 Hz 以上 高层次认知整合;也很容易被肌肉伪迹污染

具体到 ERP 分析(也就是你的目标)来说,大多数情况下根本不需要把信号分解到这些频段里 —— 你直接处理滤波后的原始电压波形。频段分析在静息态/振荡功率相关研究中更为重要。不过了解这些术语依然很有用,因为滤波截止频率的选择(例如"为什么是 1–40 Hz?")通常正是参照这些频段决定的 —— 1 Hz 高通滤波去除了低于 delta 的缓慢漂移,40 Hz 低通滤波保留了直到低 gamma 的所有内容,同时切除了以肌肉信号为主的高频成分。

下面快速看一下这些频率实际作为波形长什么样:

import numpy as np

t = np.linspace(0, 2, 1000)
bands = {"delta (2 Hz)": 2, "theta (6 Hz)": 6, "alpha (10 Hz)": 10, "beta (20 Hz)": 20, "gamma (40 Hz)": 40}

fig, axes = plt.subplots(len(bands), 1, figsize=(9, 7), sharex=True)
for ax, (label, freq) in zip(axes, bands.items()):
    ax.plot(t, np.sin(2 * np.pi * freq * t))
    ax.set_ylabel(label, rotation=0, ha="right", va="center")
    ax.set_yticks([])
axes[-1].set_xlabel("时间 (s)")
fig.suptitle("各个频段作为波形的实际样子")
plt.tight_layout()
plt.show()

png

4. 常见伪迹

会污染 EEG 记录的非脑源电信号:

  • 眨眼(EOG) —— 幅度大、变化缓慢的偏转,在额部电极(Fp1Fp2)处最强。在任何睁眼记录中,这都是迄今为止最常见的伪迹。
  • 眼动 —— 比眨眼小,但性质类似;随着眼球(本身就是一个电偶极子)转动,会产生系统性的电压变化。
  • 肌肉活动(EMG) —— 咬牙、皱眉、吞咽等动作。表现为高频的尖峰噪声,通常出现在颞部/额部电极。
  • 心跳(ECG) —— 一种细微、尖锐、有节律的搏动,在靠近颈部/乳突电极处更需要留意。
  • 电源线噪声 —— 一个恒定的正弦波,频率为你所在国家的市电频率(50 Hz 或 60 Hz)及其谐波,从附近电源线/设备中窜入。用陷波滤波器去除。
  • 运动/电极伪迹 —— 由电极贴合不良、导线晃动,或出汗改变了阻抗,引起的突然跳变或漂移。

滤波能处理其中一部分(电源线噪声、缓慢漂移)。眼动和肌肉伪迹通常需要针对性地去除 —— 这正是 ICA(第 5 章)要做的事。

5. 参考电极

EEG 测量的是电压差 —— 单个电极并不存在所谓"绝对"的测量值。每个通道的数值,本质上都隐含着"这个电极减去某个参考点"的意思。选择哪个参考点,会影响你看到的具体数值,但不会影响背后真实的脑活动本身。

常见的选择:

  • 某一个具体的物理电极,例如 CzCPz(你自己的那份记录用的正是这种方式 —— 回忆一下 Fp1-CPz 这样的通道名)。
  • 双侧乳突联合参考,把 M1+M2(或 A1+A2)取平均作为参考 —— 在 ERP 研究中很常见,因为它到大多数头皮位置的距离大致相等。
  • 平均参考,用所有电极的平均值作为参考 —— 在高密度电极阵列的 EEG 中很常见,某些分析方法也要求使用它。

只要你知道原始记录用的是哪种参考方式,就可以在记录之后随时重新参考数据(MNE 的 set_eeg_reference(),第 4 章会讲)—— 你无法还原出一个"无参考"的"真实"信号,因为这样的信号本就不存在,但你可以在不同参考方案之间做数学上的换算。

参考电极的含义

6. 静息态记录 vs. 任务/事件相关记录

  • 静息态:受试者只是静坐(睁眼或闭眼),没有任何刺激。主要通过频段功率来分析(第 3 节的那张表在这里很重要)。
  • 任务/事件相关记录(你的情况):记录中包含标记事件发生时刻的标记点("事件"/"触发(trigger)"/"标注(annotation)")—— 比如呈现了一个刺激、播放了一段声音、按下了一个按钮。有了这些标记,你就可以计算出 ERP(事件相关电位,event-related potential):把连续记录切成围绕每个事件的短小片段(epoch),再对同一类事件的许多次重复进行平均。平均这一步是关键所在 —— 单次试次中的脑反应,通常在噪声中根本看不出来,但把许多试次平均起来,随机噪声会互相抵消,而与事件保持稳定时间关系的反应则会显现出来。第 7 章我们会针对这一点建立真正的直观理解。

下一章:第 2 章 —— MNE 核心概念,我们将从这里开始写真正的 MNE 代码,并学习贯穿本教程后续内容的核心词汇(RawEpochsEvokedInfo)。