第 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" 的意思)= 中线位置,例如Cz、Pz、Oz
所以 C3 = 中央区、左半球;O2 = 枕区、右半球;Fz = 额叶中线。M1/M2(有时写作 A1/A2)是乳突电极(耳后的骨突起处)—— 通常用作参考点,而不是直接测量皮层活动。
与其用文字描述图示,不如用 MNE 内置的 montage(电极布局)直接生成真实的图 —— 这正是我们之前用来修正你自己文件电极位置的那个对象。
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()

这是头部的俯视图(鼻子朝上)。找到沿中线排列的 Fz、Cz、Pz、Oz,并注意奇数编号都聚集在左侧,偶数编号都在右侧。你自己那份记录里的 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()

4. 常见伪迹¶
会污染 EEG 记录的非脑源电信号:
- 眨眼(EOG) —— 幅度大、变化缓慢的偏转,在额部电极(
Fp1、Fp2)处最强。在任何睁眼记录中,这都是迄今为止最常见的伪迹。 - 眼动 —— 比眨眼小,但性质类似;随着眼球(本身就是一个电偶极子)转动,会产生系统性的电压变化。
- 肌肉活动(EMG) —— 咬牙、皱眉、吞咽等动作。表现为高频的尖峰噪声,通常出现在颞部/额部电极。
- 心跳(ECG) —— 一种细微、尖锐、有节律的搏动,在靠近颈部/乳突电极处更需要留意。
- 电源线噪声 —— 一个恒定的正弦波,频率为你所在国家的市电频率(50 Hz 或 60 Hz)及其谐波,从附近电源线/设备中窜入。用陷波滤波器去除。
- 运动/电极伪迹 —— 由电极贴合不良、导线晃动,或出汗改变了阻抗,引起的突然跳变或漂移。
滤波能处理其中一部分(电源线噪声、缓慢漂移)。眼动和肌肉伪迹通常需要针对性地去除 —— 这正是 ICA(第 5 章)要做的事。
5. 参考电极¶
EEG 测量的是电压差 —— 单个电极并不存在所谓"绝对"的测量值。每个通道的数值,本质上都隐含着"这个电极减去某个参考点"的意思。选择哪个参考点,会影响你看到的具体数值,但不会影响背后真实的脑活动本身。
常见的选择:
- 某一个具体的物理电极,例如
Cz或CPz(你自己的那份记录用的正是这种方式 —— 回忆一下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 代码,并学习贯穿本教程后续内容的核心词汇(Raw、Epochs、Evoked、Info)。