第 3 层 · 通道清理层 · 第 8 步 / 共 25 步

步骤 08:带通滤波

0.1–40 Hz 带通滤波,去除低频与高频噪声

🕐 18 分钟🎯 难度:进阶🔗 核心 API:raw.filter⬅️ 前置:步骤 7

1. 目标

在频域上保留感兴趣的信号(如 0.1–40 Hz)、剔除噪声与漂移。带通是几乎所有 ERP 研究的必备步骤,会显著影响后续 ICA、阈值拒绝、autoreject 的有效性。

2. 何时使用 / 何时跳过

  • 必须使用:几乎所有 EEG/ERP 实验
  • 可跳过:仅在分析超高频(如 gamma 100+ Hz)或纯直流(DC)信号时
  • 高通特殊:若计划做 ICA,建议高通 ≥ 1 Hz,避免 ICA 拆出超低频漂移成分

3. 前置条件

  • 已执行步骤 07:原始坏导已标记

4. 核心代码

Python
import mne

# ====== 方式 A:标准 ERP 带通 ======
raw.filter(
    l_freq=0.1,    # 高通:剔除超低频漂移、DC offset
    h_freq=40.0,   # 低通:剔除肌电、高频干扰
    picks=['eeg', 'eog', 'ecg'],
    method='fir',  # 推荐 FIR,无相位偏移
    phase='zero',  # 零相位(双向滤波)
    fir_design='firwin',
    skip_by_annotation='edge',
)

# ====== 方式 B:低通 + 高通分别设置 ======
# 低通(消除 50 Hz 工频的更高次谐波也用此)
raw.filter(l_freq=None, h_freq=40.0, picks=['eeg'])

# 高通(保留低频 ERP 成分如 P300、CNV)
raw.filter(l_freq=0.1, h_freq=None, picks=['eeg'])

# ====== 方式 C:保留低频 ERP 研究 ======
# 用于 N400、MMN、P600 等需要保留慢成分的研究
raw.filter(l_freq=0.01, h_freq=30.0, picks=['eeg'])

# ====== 方式 D:儿童 / 高噪声数据 ======
raw.filter(l_freq=0.3, h_freq=30.0, picks=['eeg'])

# ====== 方式 E:ICA 前的特定滤波 ======
# ICA fit 建议:l_freq=1.0, h_freq=None(保留更多 ICA 信息)
# 但必须在拟合 ICA 前临时应用,后续按需重置
# raw_for_ica = raw.copy().filter(l_freq=1.0, h_freq=None)

5. 参数详解

参数 含义 推荐值
l_freq 高通(Hz) 0.1(一般)/ 1.0(ICA 前)/ 0.01(保留慢成分)
h_freq 低通(Hz) 40(标准)/ 30(儿童)/ 100(高频分析)
method 滤波算法 'fir'(推荐);'iir'(更快但有相位风险)
phase 相位特性 'zero'(零相位)/ 'zero-double'(双向)
fir_design FIR 设计方法 'firwin'(默认,窗函数法)
skip_by_annotation 跳过带 annotation 的数据 'edge'(推荐)
n_jobs 并行核数 1(一般);-1(全核)

6. 验证方法

Python
# 验证 1:检查滤波后频谱
raw.compute_psd(fmax=80).plot(average=True)
# 期望:低于 0.1 Hz 与高于 40 Hz 衰减明显

# 验证 2:检查 info 中的高低通
print(f"滤波后: highpass={raw.info['highpass']}, lowpass={raw.info['lowpass']}")
assert raw.info['highpass'] >= 0.1
assert raw.info['lowpass'] <= 40

# 验证 3:可视化
raw.plot(duration=5, n_channels=30)
# 期望:低频漂移消失、信号更稳定

# 验证 4:时域振幅不应有剧烈变化(过强滤波导致)
data, _ = raw[:5, :5000]  # 前 5 导、前 5 秒
peak_to_peak = (data.max() - data.min()) * 1e6
print(f"峰峰振幅: {peak_to_peak:.1f} µV")
# 期望:100~500 µV(正常)

7. 常见错误

错误 原因 解决方案
l_freq=0 引入了 DC 漂移 0 Hz 等价于未滤波 用 l_freq=0.1 或更高
h_freq=50 与 notch 冲突 notch 也消除 50 Hz 把 h_freq 设为 ≤ notch 频率 - 2
滤波后 ERP 振幅明显变小 滤波过窄丢失了核心频段 调宽 h_freq 至 30–40 Hz
滤波后出现边缘伪迹 FIR padding 不足 提高 l_trans_bandwidth 与 h_trans_bandwidth(默认自动)
用 IIR 后 ERP 时序错位 IIR 默认非零相位 改 method='fir' 或加 phase='zero'

8. 官方来源

资源类型 链接
raw.filter https://mne.tools/stable/generated/mne.io.Raw.html#mne.io.Raw.filter
滤波教程 https://mne.tools/stable/auto_tutorials/preprocessing/30_filtering_resampling.html
FIR vs IIR 对比 https://mne.tools/stable/auto_tutorials/preprocessing/30_filtering_resampling.html
notch_filter(步骤 09) https://mne.tools/stable/generated/mne.io.Raw.html#mne.io.Raw.notch_filter

9. 学术引用

Widmann, A., & Schröger, E. (2012). Filter effects and filter artifacts in the analysis of electrophysiological data. Frontiers in Psychology, 3, 233.

Luck, S. J. (2014). An Introduction to the Event-Related Potential Technique (2nd ed.), Chapter 4. MIT Press.