如何在Matlab中用黄油函数建立一个带通滤波器?

我试图从我的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建议使用零极点增益公式,而不是标准的 ab 系数。下面是一个例子。

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' 不需要,因为如果你指定一个数组作为输入,函数就会知道这一点;)

本文来自投稿,不代表运维实战侠立场,如若转载,请注明出处:https://www.shizhanxia.com/5091.html

(0)
上一篇 2022年6月29日 下午4:52
下一篇 2022年6月29日 下午4:52

相关推荐

发表评论

登录后才能评论