Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Matlab中用butter函数构造带通滤波器?_Matlab_Bandpass Filter - Fatal编程技术网

如何在Matlab中用butter函数构造带通滤波器?

如何在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

我试图从我的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,'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');