用于脑电图缓慢漂移的 0.01 Hz 高通滤波器

信息处理 过滤器
2022-01-11 12:37:20

我正在尝试为脑电图 (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)

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

我已经阅读了您的页面,一个聪明的想法是设计一个低通滤波器,稍后我将从真实数据中减去。我使用 equiripple 滤波器完成了它,它有效,但留下了基线提升。我不想现在运行平均去除,因为这是分析协议的下一步。

有什么建议?

4个回答

您需要一台时间机器:为了避免时的 DC 冲击,您需要知道过滤器的状态,就好像它在录制开始之前就已经运行一样。无论您使用哪种过滤器,这都不会发生。t=0

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

不用说,这个方案有很多陷阱——对于初学者来说,实时处理更难做到,如果信号导数在时很高,那么前几个样本仍然会有信任问题。但它应该摆脱颠簸。t=0

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

我做了 rtollert 先生解释的把戏,并认为这是我能做的最好的。

如果您走连续采样/硬件补偿的路线,那么效率可能会让您对DC 阻断器感兴趣,正如 Randy Yates 和 Richard Lyons 在 2008 年 3 月 dsp Tips & Tricks 中所描述的那样

我为指定的放大器尝试了一些效果很好的方法。matlab 代码在这里:https ://sites.google.com/site/marialstavrinou/home/dc-offset-removal-filter-in-matlab 。