我试图从我的EEG数据集中提取μ抑制值,这不允许使用EEGLab。我做了大部分的步骤,但我需要添加一个带通滤波器,我不知道如何。
我需要的频段是8-13,我的采样率是1000,我被告知我需要一个8到10之间的顺序。
MATLAB文档中列出了这个例子。
[A,B,C,D] = butter(10,[500 560]/750);
d = designfilt('bandpassiir','FilterOrder',20, ... 'HalfPowerFrequency1',500,'HalfPowerFrequency2',560, ... 'SampleRate',1500);
但是,我不确定,除了采样率和滤波顺序外,我还需要使用什么参数。另外,我也不清楚什么是[A,B,C,D]。我将感谢任何输入。
我通常会先看一下各个函数本身--你做了一个小小的混淆。butter
已经是过滤顺序(所以您指定了顺序10,并试图在 desginfilt
函数...).对于 Butterworth-滤波器,MATLAB建议使用零极点增益公式,而不是标准的 a
-b
系数。下面是一个例子。
f_low = 100; % Hz
f_high = 500; % Hz
f_sampling = 10e3; % 10kHz
assert(f_low < f_high)
f_nrm_low = f_low /(f_sampling/2);
f_nrm_high = f_heigh /(f_sampling/2);
% determine filter coefficients:
[z,p,k] = butter(4,[f_nrm_low f_nrm_high],'bandpass');
% convert to zero-pole-gain filter parameter (recommended)
sos = zp2sos(z,p,k);
% apply filter
sig_flt = sosfilt(sos,sig);
我把我工作领域的标准值填入其中 4阶是这里的绝大部分标准。在你的情况下,你会简单地用
f_low = 200; % Hz
f_high = 213; % Hz
f_sampling = 1000; % 1kHz
f_nrm_low = f_low /(f_sampling/2);
f_nrm_high = f_heigh /(f_sampling/2);
% determine filter coefficients:
[z,p,k] = butter(15,[f_nrm_low f_nrm_high],'bandpass');
PS:该 类型 'bandpath'
不需要,因为如果你指定一个数组作为输入,函数就会知道这一点;)