一些由电源线造成的伪影具有某些特定范围的频率(比如,由电网产生的电力线噪声,主要由50Hz(或60Hz取决于实验的地理位置)的尖峰组成)。因此可以通过滤波来固定。
本文分别使用陷波滤波器、低通滤波、高通滤波来对EEG数据去除电源线等噪声。
陷波滤波器(Notch Filter)简介:
陷波滤波器指的是一种可以在某一个频率点迅速衰减输入信号,以达到阻碍此频率信号通过的滤波效果的滤波器。陷波滤波器属于带阻滤波器的一种,其阻带很窄,因此也称点阻滤波器。常常用于去除固定频率分量或阻带很窄的地方。如用于去除直流分量,去除某些特定频率分量.
本案例介绍了如何在MNE-Python中过滤数据。
代码语言:javascript复制import numpy as np
import mne
from mne.datasets import sample
data_path = sample.data_path()
raw_fname = data_path '/MEG/sample/sample_audvis_raw.fif'
proj_fname = data_path '/MEG/sample/sample_audvis_eog_proj.fif'
"""
提取0秒到20秒之间的数据
"""
tmin, tmax = 0, 20
"""
读取原始数据
通过在加载前剪切原始数据来节省内存
"""
raw = mne.io.read_raw_fif(raw_fname)
raw.crop(tmin, tmax).load_data()
raw.info['bads'] = ['MEG 2443', 'EEG 053'] # bads 2 more
"""
设置 频率在2Hz到300Hz之间
"""
fmin, fmax = 2, 300
"""
FFT大小为n_fft,在理想情况下为2的幂
"""
n_fft = 2048
# 选择一通道的子集
selection = mne.read_selection('Left-temporal')
picks = mne.pick_types(raw.info, meg='mag', eeg=False, eog=False,
stim=False, exclude='bads', selection=selection)
raw.plot_psd(area_mode='range', tmax=10.0, picks=picks, average=False)
用陷波滤波去除电源线噪声
去除电力线噪声可以直接在原始对象上使用陷波滤波器,指定要切断的频率阵列:
代码语言:javascript复制raw.notch_filter(np.arange(60, 241, 60), picks=picks, fir_design='firwin')
raw.plot_psd(area_mode='range', tmax=10.0, picks=picks, average=False)
用低通滤波去除电源线噪声
如果只对低频感兴趣,可以在电力线噪声的峰值以下进行低通滤波。
代码语言:javascript复制# 50hz以下的低通滤波
raw.filter(None, 50., fir_design='firwin')
raw.plot_psd(area_mode='range', tmax=10.0, picks=picks, average=False)
高通滤波消除缓慢漂移
为了消除缓慢的漂移,可以使用高通滤波。
代码语言:javascript复制raw.filter(1., None, fir_design='firwin')
raw.plot_psd(area_mode='range', tmax=10.0, picks=picks, average=False)
如果想要一步完成低通和高通滤波,可以做一个所谓的带通滤波器,如下所示:
代码语言:javascript复制# 1 Hz-50 Hz范围内的带通滤波
raw.filter(1, 50., fir_design='firwin')
raw.plot_psd(area_mode='range', tmax=10.0, picks=picks, average=False)