第 4 章:预处理 —— 滤波与重参考¶
预处理是在把连续的 Raw 信号切成 epoch 之前,先做的清理工作。本章讲解滤波(去除不需要的频率成分)和重参考(更改第 1 章提到的参考电极方案)。
import mne
import matplotlib.pyplot as plt
from pathlib import Path
# 设置字体,确保图中的中文能正常显示
plt.rcParams["font.sans-serif"] = ["Microsoft YaHei", "SimHei", "DejaVu Sans"]
plt.rcParams["axes.unicode_minus"] = False
mne.set_log_level("WARNING")
sample_folder = Path(mne.datasets.sample.data_path()) / "MEG" / "sample"
raw = mne.io.read_raw_fif(sample_folder / "sample_audvis_raw.fif", preload=True)
raw.pick(["eeg", "eog"])
raw
| General | ||
|---|---|---|
| Filename(s) | sample_audvis_raw.fif | |
| MNE object type | Raw | |
| Measurement date | 2002-12-03 at 19:01:10 UTC | |
| Participant | Unknown | |
| Experimenter | MEG | |
| Acquisition | ||
| Duration | 00:04:38 (HH:MM:SS) | |
| Sampling frequency | 600.61 Hz | |
| Time points | 166,800 | |
| Channels | ||
| EEG | and | |
| EOG | ||
| Head & sensor digitization | 146 points | |
| Filters | ||
| Highpass | 0.10 Hz | |
| Lowpass | 172.18 Hz | |
滤波¶
滤波器会去除所选频率范围之外的信号。EEG 预处理中经常出现三种:
- 高通滤波器(去除截止频率以下的成分,例如 1 Hz):消除出汗、电极/皮肤阻抗变化、放大器漂移带来的缓慢漂移。
- 低通滤波器(去除截止频率以上的成分,例如 40 Hz):消除肌肉活动等高频噪声;大多数 ERP 成分本来就分布在 30 Hz 以下。
- 带通滤波器:在一次调用中同时做高通和低通 ——
raw.filter(l_freq=1.0, h_freq=40.0)。 - 陷波滤波器:去除一个很窄的频率带,专门针对市电噪声,频率为 50 Hz(世界大多数地区)或 60 Hz(美洲及部分亚洲地区)及其谐波。
下面进行滤波,并对比滤波前后的功率谱。
raw.compute_psd(picks="eeg").plot()
plt.gcf().suptitle("滤波前")
plt.show()
raw_filt = raw.copy().filter(l_freq=1.0, h_freq=40.0)
raw_filt.compute_psd(picks="eeg").plot()
plt.gcf().suptitle("1-40 Hz 带通滤波后")
plt.show()


注意滤波后的图在 1 Hz 以下、40 Hz 以上基本没有功率了 —— 那些频段已经被去除。这个样例数据集恰好本来就没有明显的电源线噪声,但对于一份有噪声的记录(比如你自己的数据),同样的滤波调用还需要加上陷波滤波:
LINE_FREQ = 50 # 或 60,取决于你所在国家的市电频率
raw_filt.notch_filter(freqs=LINE_FREQ)
为什么要在切分 epoch 之前滤波,而不是之后? 滤波器在处理的片段两侧都需要一定的"缓冲区"数据,以避免边缘伪迹。先对完整的连续记录做滤波,再把它切成短小的 epoch,可以避免每个短 epoch 的首尾被扭曲。
重参考¶
回想第 1 章的内容:每个 EEG 数值都是"这个电极减去某个参考"的结果。你可以在记录结束后用 set_eeg_reference() 在数学上切换参考方案。ERP 研究中最常用的目标方案是平均参考:每个通道的参考变为所有 EEG 通道的均值。
raw_avg_ref = raw_filt.copy().set_eeg_reference(ref_channels="average")
raw_avg_ref
| General | ||
|---|---|---|
| Filename(s) | sample_audvis_raw.fif | |
| MNE object type | Raw | |
| Measurement date | 2002-12-03 at 19:01:10 UTC | |
| Participant | Unknown | |
| Experimenter | MEG | |
| Acquisition | ||
| Duration | 00:04:38 (HH:MM:SS) | |
| Sampling frequency | 600.61 Hz | |
| Time points | 166,800 | |
| Channels | ||
| EEG | and | |
| EOG | ||
| Head & sensor digitization | 146 points | |
| Filters | ||
| Highpass | 1.00 Hz | |
| Lowpass | 40.00 Hz | |
其他选项:set_eeg_reference(ref_channels=["M1", "M2"]) 用于双侧乳突联合参考,或者 ref_channels=["Cz"] 用于单通道参考。并不存在普遍"正确"的选择 —— 这取决于你的研究设计,以及你所在子领域/可比较的前人工作中的惯例。如果拿不准,平均参考对于探索性的 ERP 研究是一个合理的默认选择。
关于你自己数据的说明: 你的文件里的通道已经以 CPz 为参考(原始通道名中可以看到,如 Fp1-CPz 等)。这已经是一个有效的单通道参考方案,可以保持不变;如果有理由需要(例如要匹配某篇特定论文范式的惯例),也可以像这里演示的一样,重新参考到平均参考或乳突参考。
小结¶
- 带通滤波(例如 1–40 Hz)去除漂移和高频噪声;陷波滤波去除电源线噪声。
- 务必先对连续的
Raw数据做滤波,再切分 epoch。 set_eeg_reference()在记录之后,以数学方式切换参考方案。