一些由电源线造成的伪影具有某些特定范围的频率(比如,由电网产生的电力线噪声,主要由50Hz(或60Hz取决于实验的地理位置)的尖峰组成)。因此可以通过滤波来固定。
本文分别使用陷波滤波器、低通滤波、高通滤波来对EEG数据去除电源线等噪声。
陷波滤波器(Notch Filter)简介:
陷波滤波器指的是一种可以在某一个频率点迅速衰减输入信号,以达到阻碍此频率信号通过的滤波效果的滤波器。陷波滤波器属于带阻滤波器的一种,其阻带很窄,因此也称点阻滤波器。常常用于去除固定频率分量或阻带很窄的地方。如用于去除直流分量,去除某些特定频率分量.
本案例介绍了如何在MNE-Python中过滤数据。
import numpy as npimport mnefrom mne.datasets import sampledata_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)
用陷波滤波去除电源线噪声
去除电力线噪声可以直接在原始对象上使用陷波滤波器,指定要切断的频率阵列:
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)
用低通滤波去除电源线噪声
如果只对低频感兴趣,可以在电力线噪声的峰值以下进行低通滤波。
# 50hz以下的低通滤波raw.filter(None, 50., fir_design='firwin')raw.plot_psd(area_mode='range', tmax=10.0, picks=picks, average=False)
高通滤波消除缓慢漂移
为了消除缓慢的漂移,可以使用高通滤波。
raw.filter(1., None, fir_design='firwin')raw.plot_psd(area_mode='range', tmax=10.0, picks=picks, average=False)
如果想要一步完成低通和高通滤波,可以做一个所谓的带通滤波器,如下所示:
# 1 Hz-50 Hz范围内的带通滤波raw.filter(1, 50., fir_design='firwin')raw.plot_psd(area_mode='range', tmax=10.0, picks=picks, average=False)