步骤 09:工频陷波
50/60 Hz 工频陷波,去除电力线干扰
1. 目标
消除电力线干扰(50 Hz 中国/欧洲;60 Hz 北美)及其低次谐波(100/150 Hz 或 120/180 Hz)。不替代带通——它是带通的"补丁"。
2. 何时使用 / 何时跳过
- 应当使用:所有室内采集的 EEG 数据(中国必加 50 Hz + 100 Hz + 150 Hz)
- 可跳过:电池供电 + 已屏蔽良好的设备 + 在电源滤波良好的实验环境
3. 前置条件
- 已执行步骤 08:带通滤波已完成
4. 核心代码
Python
import mne
# ====== 方式 A:单频率陷波(中国 50 Hz) ======
raw.notch_filter(
freqs=50.0,
picks=['eeg', 'eog', 'ecg'],
method='fir',
phase='zero',
)
# ====== 方式 B:基础频率 + 谐波(中国) ======
raw.notch_filter(
freqs=[50, 100, 150],
picks=['eeg', 'eog', 'ecg'],
method='fir',
)
# ====== 方式 C:北美 ======
raw.notch_filter(freqs=[60, 120, 180])
# ====== 方式 D:使用窄带 IIR 陷波(更锐利) ======
raw.notch_filter(
freqs=50,
method='iir',
iir_params=dict(order=4, ftype='butter'),
)
# ====== 方式 E:自动化检测(慎用) ======
# MNE 无自动检测接口,推荐手动设值
5. 参数详解
raw.notch_filter(freqs, picks=None, ..., notch_widths=None, method='fir', iir_params=None, mt_bandwidth=None, p_value=0.05, phase='zero', ...)
| 参数 | 含义 | 推荐值 |
|---|---|---|
freqs |
要陷波的频率(Hz) | 中国 [50] 或 [50, 100, 150];北美 [60] 或 [60, 120, 180] |
method |
滤波算法 | 'fir'(默认);'iir';'spectrum_fit'(现代推荐) |
phase |
相位特性 | 'zero'(默认,零相位) |
picks |
参与滤波的通道 | ['eeg', 'eog', 'ecg'](务必包含 EOG/ECG!) |
notch_widths |
陷波宽度 | FIR / spectrum_fit 法的参数(method='iir' 时由 iir_params 控制带宽) |
iir_params |
IIR 算法参数 | 仅 method='iir' 时使用 |
⚠️
notch_widths是 FIR 和 spectrum_fit 法的参数;IIR 法的带宽控制由iir_params决定(如dict(order=4, ftype='butter'))。本教材原稿描述反向,已修正。⚠️ 务必对 EOG/ECG 也施加 notch:它们的工频成分如果不消,会通过步骤 13 的平均参考回流到 EEG。
6. 验证方法
Python
# 验证 1:PSD 检查(50 Hz 处应明显塌陷)
psd = raw.compute_psd(fmax=200, picks='eeg')
freqs = psd.freqs
idx_50 = np.argmin(np.abs(freqs - 50))
idx_49 = np.argmin(np.abs(freqs - 49))
idx_51 = np.argmin(np.abs(freqs - 51))
psd_data = psd.get_data()
print(f"50 Hz 功率 (idx={idx_50}): {psd_data[:, idx_50].mean():.2e}")
print(f"49 Hz 功率 (idx={idx_49}): {psd_data[:, idx_49].mean():.2e}")
# 期望:50 Hz 功率 << 49 Hz 功率(差 1-3 个数量级)
# 验证 2:可视化
psd.plot()
# 期望:50 Hz 处有明显的"V"形凹槽
# 验证 3:时域
raw.plot(duration=2, scalings=dict(eeg=20e-6))
# 期望:50 Hz 周期性"嘶嘶"声消失
7. 常见错误
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 没对 EOG/ECG 滤波 | 只对 EEG 滤波 → 50 Hz 通过平均参考回流 | 显式加 picks=['eeg', 'eog', 'ecg'] |
| 滤波后信号出现 ringing | IIR 阶数过高 | 改用 method='fir',或降阶 |
| 误除目标 ERP 成分 | 陷波频率刚好等于 ERP 主频(罕见) | 检查 ERP 关键成分频谱,确认无重叠 |
| 谐波没去干净 | 只陷波 50 Hz,但 100 Hz 仍存在 | 加 [50, 100, 150] |
| 设备已用硬件陷波,再次 notch 引入伪迹 | 重复滤波 | 检查设备文档,跳过本步骤 |
8. 官方来源
| 资源类型 | 链接 |
|---|---|
raw.notch_filter |
https://mne.tools/stable/generated/mne.io.Raw.html#mne.io.Raw.notch_filter |
| 滤波教程 | https://mne.tools/stable/auto_tutorials/preprocessing/30_filtering_resampling.html |
9. 学术引用
American Clinical Neurophysiology Society. (2008). Guideline 1: Minimum technical standards for EEG recording. Journal of Clinical Neurophysiology, 25(2), 71-82.