Skip to content

第 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()

png

png

注意滤波后的图在 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() 在记录之后,以数学方式切换参考方案。

下一章:第 5 章 —— 用 ICA 去除伪迹