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

问题描述 投票:0回答:1

我试图从我的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]。我将感谢任何输入。

matlab bandpass-filter
1个回答
1
投票

我通常会先看一下各个函数本身--你做了一个小小的混淆。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' 不需要,因为如果你指定一个数组作为输入,函数就会知道这一点;)

© www.soinside.com 2019 - 2024. All rights reserved.