0.01 Hz的高通滤波器,适用于EEG缓慢漂移


10

我正在尝试为脑电图(EEG)数据集制作一个高通滤波器,以消除非常缓慢的漂移。但是,0.3 Hz左右的频率对于研究这些数据非常重要。

我使用Matlab,并尝试了各种方法。似乎使用FIR滤波器可以实现3 dB的极低dB衰减。例如,我使用了:

h=fdesign.highpass('Fst,Fp,Ast,Ap',0.005,0.01,3,1,250); % i needed to cut 
d=design(h,'butter');
fvtool(d)

但是,此滤波器会在数据开始时产生直流漂移,因此我不希望丢失这些第一个数据点。

我已经阅读了您的页面,其中有一个聪明的主意是设计一个低通滤波器,稍后再从实际数据中减去它。我用等波纹滤光片进行了过滤,结果正常,但基线上升。我现在不想运行平均去除,因为这是分析协议的下一步。

有什么建议么?


1
那么问题只是滤波器的初始响应?您是否可以仅在这些预先记录的数据前加零,还是实时的?
endlith 2011年

低通减法也会遇到您遇到的问题。问题是每个滤波器都有延迟。截止频率很高的滤波器(如您想要的滤波器)可能会有很长的延迟。我不确定为什么接下来要进行平均清除;您显示的滤波器的DC增益为零,因此没有可去除的平均值(由于滤波器的延迟,输出开始时的瞬态周期除外)。
詹森·R

Answers:


6

您需要一台时间机器:为了避免在出现直流冲击,您需要了解滤波器的状态,就像它在开始录制之前就已经在运行一样。无论您使用哪种过滤器,都不会发生这种情况。Ť=0

这是一个技巧,可能对您有用。假设您有一个抽头FIR滤波器(或IIR滤波器,其N采样后的脉冲响应会充分衰减到0 )。提取信号的前N个样本,将其反转,然后将其添加到信号的开头。实际上,我们定义一个新的信号= - = ˚F ,用于滤波的目的。当您对它进行过滤时,过滤器状态将已被初始信号“启动”:删除第一个NñññGŤ=G-Ť=FŤñ 输出的采样和DC冲击应该已经消失了。

不用说,该方案有很多陷阱-对于初学者而言,实时处理更困难,并且如果信号导数在较高时,您仍然会遇到前几个样本的信任问题。但是它应该摆脱颠簸。Ť=0


6

看一下filtfilt函数。它提供了零相位响应和完美的阶跃响应。特别是,filtfilt过滤的阶跃响应属性可以解决您的问题。


0

我做了罗托勒特先生解释的把戏,并认为这是我能做的最好的事情。

如果您采用连续采样/硬件补偿的方法,那么效率可能会使您对DC阻止程序感兴趣,如Randy Yates和Richard Lyons在dsp Tips&Tricks 2008年3月中所述。



-1

您不在乎DC的绝对值,对吗?

为什么不只为数据添加静态偏移,以使第一个数据点为零?

当然,您必须将偏移量添加到每个数据点,但这将完全避免您在使用过滤器时出现较大的阶跃响应问题。

有效地,过滤器启动初始化为零。因此,当您的数据开始时,过滤器会看到从零到您拥有的任何直流电平的巨大阶梯。

只需添加偏移量即可删除阶梯。


-1

为什么不进行平均清除?再次执行此操作的后续步骤只是无效(将减零)。


这更像是一个查询,并不是对问题的真正答案。尽管这个问题太老了,但在此时此刻似乎毫无意义,但也许可以适当地作为评论。
山姆·马洛尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.