簡體   English   中英

如何用黃油 function 在 Matlab 中構建帶通濾波器?

[英]How to build a bandpass filter in Matlab with the butter function?

我正在嘗試從我的 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] 是什么。 我會很感激任何意見。

我通常 go 超過個別功能本身 - 你做了一點混淆。 desginfilt butter ...中指定順序 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);

我已經填寫了我工作領域的標准值。 四階是這里的壓倒性標准。 在您的情況下,您只需使用 go

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'類型,因為如果您將數組指定為輸入,function 就會意識到這一點;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM