如何在Matlab中用butter函数构造带通滤波器?
我试图从我的EEG数据集中提取mu抑制值,这不允许使用EEGLab。我做了大部分步骤,但我需要添加一个带通滤波器,我不知道如何添加 我需要的频带是8-13,我的采样率是1000,我被告知我需要8到10之间的顺序 MATLAB文档中列出了该示例:如何在Matlab中用butter函数构造带通滤波器?,matlab,bandpass-filter,Matlab,Bandpass Filter,我试图从我的EEG数据集中提取mu抑制值,这不允许使用EEGLab。我做了大部分步骤,但我需要添加一个带通滤波器,我不知道如何添加 我需要的频带是8-13,我的采样率是1000,我被告知我需要8到10之间的顺序 MATLAB文档中列出了该示例: [A,B,C,D] = butter(10,[500 560]/750); d = designfilt('bandpassiir','FilterOrder',20, ... 'HalfPowerFrequency1',500,'HalfPowerF
[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
函数中指定顺序20…)。
对于巴特沃斯滤波器,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);
PS:type
'bandpath'
不是必需的,因为如果将数组指定为输入,函数会意识到这一点;) 谢谢你@max。我想问你为什么15号订单?没有理由。我可能读得太多了,你说的是8-10,我刚刚记得这对我来说是一个非常高的数字=P
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');