步骤 10:降采样
降低采样率加速后续计算
1. 目标
将采样率从原始(如 1000 Hz)降低到目标值(如 200/250/500 Hz)。降采样后所有后续步骤(坏导检测、插值、参考、ICA、epoch)都将在低采样率数据上运行,速度可提升数倍到数十倍。
2. 何时使用 / 何时跳过
- 强烈建议使用:数据原始 ≥ 1000 Hz 时
- 可跳过:数据原始 ≤ 200 Hz 时(再降会丢失高频信息)
3. 前置条件
- 已执行步骤 09:带通与陷波已完成
⚠️ 降采样前置条件:带通上限必须 ≤ 目标采样率的 1/2(Nyquist)。例如降到 250 Hz,则
lowpass必须 ≤ 125 Hz。MNE 默认会自动调整,但建议显式确认。
4. 核心代码
Python
import mne
# ====== 方式 A:最常用:降到 200 或 250 Hz ======
# ERP 研究常用
original_duration = raw.times[-1] # 记录原始时长用于验证
raw.resample(sfreq=200.0, npad='auto')
# ====== 方式 B:降到 500 Hz(保留更多高频 ERP 成分) ======
raw.resample(sfreq=500.0, npad='auto')
# ====== 方式 C:保持原采样率 ======
# 不调用此方法,或显式设为原值
# raw.resample(sfreq=raw.info['sfreq']) # 无操作
# ====== 验证 Nyquist ======
nyquist = raw.info['sfreq'] / 2
print(f"降采样后 Nyquist 频率: {nyquist} Hz")
assert raw.info['lowpass'] <= nyquist, \
f"滤波上限 {raw.info['lowpass']} Hz 超过 Nyquist {nyquist} Hz,需先回到步骤 08 重新带通"
5. 参数详解
| 参数 | 含义 | 推荐值 |
|---|---|---|
sfreq |
目标采样率 | 200 / 250 / 500 Hz |
npad |
抗混叠 padding | 'auto'(默认)或具体整数 |
window |
重采样窗函数 | 'boxcar'(默认)/ 'hann' |
目标采样率选择建议
| 研究类型 | 推荐 sfreq | 理由 |
|---|---|---|
| ERP(P300/MMN) | 200–250 Hz | 足够时域精度;速度最快 |
| 包含 gamma 频段(30–80 Hz) | 500 Hz | 保留更多高频成分 |
| 时间精度敏感 | ≥ 500 Hz | 保留原始信息 |
| 单被试超大样本(>10⁶ epoch) | 100–200 Hz | 计算性能优先 |
6. 验证方法
Python
# 验证 1:采样率已改变
print(f"新采样率: {raw.info['sfreq']} Hz")
assert raw.info['sfreq'] == 200.0 # 或目标值
# 验证 2:时长不变(点数变少,但物理时长不变)
print(f"时长: {raw.times[-1]:.2f} s")
assert abs(raw.times[-1] - original_duration) < 0.5 # 允许小误差
# 验证 3:PSD 形状不变(除最高频)
raw.compute_psd(fmax=100).plot()
# 期望:低中频段形态与降采样前一致
# 验证 4:可视化
raw.plot(duration=2, n_channels=20)
# 期望:信号与降采样前视觉一致(除抗混叠外)
7. 常见错误
| 错误 | 原因 | 解决方案 |
|---|---|---|
ValueError: ... Nyquist |
带通上限超过目标采样率的一半 | 回到步骤 08,把 h_freq 调低 |
| 降采样后信号出现混叠 | 抗混叠滤波未做 | MNE 默认会自动设置,但需确保 h_freq 已设 |
| 误把 epoch 的采样率也改掉 | epoch 创建后才降采样 | 在 epoch 之前降采样更高效 |
| 降采样后丢失触发对齐精度 | 触发信号被降采样"模糊" | 触发通道不应被 resample,或用 npad 控制 |
8. 官方来源
| 资源类型 | 链接 |
|---|---|
raw.resample |
https://mne.tools/stable/generated/mne.io.Raw.html#mne.io.Raw.resample |
| 教程 | https://mne.tools/stable/auto_tutorials/preprocessing/30_filtering_resampling.html |
9. 学术引用
Widmann, A., et al. (2012). Filter effects and filter artifacts in the analysis of electrophysiological data. Frontiers in Psychology, 3, 233.