我正在处理来自硬件的EEG信号(2 kHz采样频率),并且内置滤波器无法正常工作。 FIR会产生延迟,并且IIR不稳定。

目标信号的范围是4 Hz至360 Hz,目的是从信号中清除实用信号(AC 50 Hz)。主要限制是获取尽可能多的未接触(无噪音,无扰动和无泄漏)的样本。这里的权衡是伽马脑电波从大约40 Hz开始,然后上升到50 Hz甚至更高。 FIR可以提供超过130 dB的衰减,但2 kHz的延迟约为180 ms。我的目标是在30 ms的延迟中至少获得60 dB)?

通带的起点是49赫兹,最终为51赫兹(实际上,它看起来像这样:https://www.swissgrid.ch/en/home/operation/regulation/grid-stability.html),所以它随时间变化并且非平稳的。

评论

请提供有关您需要通过的信号的更多信息-陷波需要紧密度如何,以及对感兴趣信号的要求是什么?您可以放松得越多-尤其是您正在通过和想要离开之间的过渡带,延迟就越小。你可以做高通吗?

@DanBoschen谢谢您的答复。我希望现在已经清楚了。如果没有,我将以其他方式描述它:我的采样频率为2kHz,不幸的是50Hz的冲击波读取了4-360Hz。我想从该范围中挽救尽可能多的频率槽-因此限制条件是未触及的样本,可忽略的延迟,短过渡带和49-51Hz范围内的高信号阻尼。我知道不可能满足所有因素,但是也许使用FIR根本不是一个好方法。我不能做高通或低通,只能切得越紧越好。

我已经建议在此处发布二阶IIR陷波滤波器的帖子,我建议尝试-您可以调整陷波系数以获得延迟限制内的最小陷波带宽。如果您还没有尝试过,请让我为您找到链接。降低采样率也将使您受益-在采样前使用正确的滤波器,可以实现1 KHz甚至800 Hz。这样一来,您就可以为相同的延迟设置更紧密的切口。

(但是模拟滤波也会有延迟)

这是链接:dsp.stackexchange.com/questions/31028/…在matlab,八度音阶或python(scipy.signal)中使用grpdelay函数调整陷波宽度时监视延迟。

#1 楼

您可以使用我在这篇文章中描述的二阶IIR陷波滤波器二阶陷波滤波器的传递函数-该文章演示了一个具有1 KHz采样的50 Hz IIR陷波。

[更新:正如@ user47050在评论中指出的那样,IIR陷波也将具有最小的延迟,而不管陷波带宽如何,因为IIR陷波滤波器中的主导延迟特定于IIR陷波中的信号分量。滤波器的抑制带宽,而不是您想要通过的信号。接下来的优点并不一定是消除延迟问题,而是仅对大约50Hz(但相位和幅度缓慢变化)的干扰提供跟踪抑制,同时最大程度地减小对相邻感兴趣频率的影响。]

但是要提供零延迟的干扰消除,请考虑下图所示的反馈信号消除伺服系统。这不会对您的信号造成任何延迟,但会对干扰信号的变化产生延迟的响应。结果将取决于干扰的相对稳定性。如果干扰是相对缓慢变化的正弦波音调,则应该可以很好地工作。

这是一个全数字调零回路,可以将信号调低到信号的均方根功率电平(此时可以不再估算取消系数)。绿色粗体线表示复数信号:50 Hz PLL是具有正弦/余弦输出的NCO,其后的乘法器是全复数乘法器(本质上是矢量调制器,可提供对幅度或相位的完全控制),而后的乘法器第二个BPF本质上是一个正交下变频器,提供残余量的幅度和相位的量度。



可以这样描述其工作方式:假设输入信号具有50 Hz的强信号,该信号足够强,以至于与前50 Hz BPF的滤波结合,PLL可以与音频同相(音频需要比PLL输入端的噪声强6 dB)。这将提供50 Hz信号的锁相副本,作为正交NCO输出。正交PLL基本上是一个非常紧密的跟踪滤波器,为消除的目的提供了干净的副本。

接下来,我们有一个消除环路,带有消除后的带通滤波器,用于检测残留并调整复数。减法之前调整50 Hz PLL输出的增益和相位的系数。我展示了将50 Hz BPF输出正交降频转换为复基带的方法(通过与复数PLL输出相乘),并累加结果,将找到具有收敛增益系数k的零。这是使用随机梯度下降方法的抵消循环。累加器累积在正交下变频器的I和Q输出上测得的残余误差,从而对“矢量调制器”乘法器进行正确设置,从而产生真实的正弦波输出,该正弦波输出的大小将与干扰信号的相位相反在输入。

该图可以简化,因为可以消除第一个50 Hz PLL BPF并用恒定的50 Hz正弦/余弦发生器代替PLL,因为矢量调制器提供了完整的旋转相位控制,可用于调整正或负频率根据需要,以及根据需要获得的收益以提供所需的取消。 50 Hz BPF + PLL的建议用法是,一旦消除环路收敛(由于PLL会跟踪输入并且可以设计为具有更大的环路带宽),则可以对输入信号中的相位变化提供更快的校正是可行的而不是零点环路)-但是,如果干扰中幅度的变化占主导,那么使用PLL不会带来很大优势。

如果没有PLL,这将简化为以下框图。在这里,所有操作都是在复杂的基带上完成的,因此使用了低通滤波器而不是带通滤波器(我很可能将其实现为指数平均滤波器)。 k是复数收敛增益,c是确定的复数校正系数,它将缩放所生成的50 Hz抵消信号的增益和相位(如前所述,c是随时间变化的相位与时间的关系,以适应可能产生的小频率偏移也存在)。

PLL实现方案具有优于二阶IIR陷波滤波器的明显优势,因为它可以在PLL的跟踪范围内,在相对较宽的带宽上跟踪和消除音频干扰。如果不进一步研究下面的实现方式,我不确定它的性能将超过二阶IIR陷波滤波器,但是考虑到它比PLL方法简单得多,因此值得考虑。



作为具有2KHz采样率的固定50 Hz信号源,音调发生器的实现很简单,但是如果将其扩展到其他应用并为固定50 Hz复杂音调发生器使用NCO,则最终会得到可调节的单音调消除器,它将在LPF带宽范围内,在NCO的任何频率设置附近捕获并消除任何单音!消除环路会将50 Hz干扰源归零到从滤波器发出的本底噪声-因此,滤波器越紧密,只要信号在滤波器带宽之内,零陷越深。

抵消的数量取决于输入信号幅度和相位的时间变化率。上面所示的方法对感兴趣的主信号具有零延迟,但它是根据过去的滞后时间T估算干扰的特性,其中T受低通滤波器和环路的带宽(延迟)影响归零环路的带宽(由k设置),因此将对可以拒绝多少干扰信号的噪声带宽有一个上限频率(该噪声带宽在干扰信号的功率谱密度中可见,基本上是AM和PM噪声边带)。该归零环路是针对这种干扰的高通滤波器。这是需要的,因为感兴趣的信号与噪声是无法区分的。

如果这种方法证明是有用的,则可以通过使用递归最小二乘法(RLS自适应算法)确定基于误差项应用于矢量调制器的复数权重来进一步改进正交下变频器。收敛速度更快,但会降低计算复杂性。

评论


$ \ begingroup $
如果您追求任何更复杂的解决方案,请在此处发布结果!
$ \ endgroup $
–丹·博申(Dan Boschen)
20年1月8日14:35

$ \ begingroup $
它应该起作用,我不确定是否有必要。尽管基于PLL的设计应该在其锁定范围内的任何地方给出无限的零值(经过非常仔细的设计),但我认为,如果仔细研究所有数学知识,就会发现带有固定频率振荡器的版本正在发展具有与普通的陷波滤波器相同的频率响应。
$ \ endgroup $
– TimWescott
20年1月8日在19:49

$ \ begingroup $
它将使您更接近陷波滤波器无法获得的两件事:零延迟和无限细的陷波(在固定音调的情况下,干扰非常明显,只要干扰程度缓慢变化,它将接近该值)。当输入不变时,不需要PLL组件,因为其余部分将收敛到滤波器带宽内的偏移
$ \ endgroup $
–丹·博申(Dan Boschen)
20年1月8日在19:57

$ \ begingroup $
二阶IIR滤波器不能有明显的延迟,因为它的“内存”只有2个大槽,它使用这些槽来跟踪其无效的50Hz正弦波的相位和幅度。基本上,滤波器是一个PLL,它以指数衰减对输入中50Hz分量的复振幅的变化作出反应,其时间常数随滤波器的选择性而变大。信号通过而没有相关的延迟;延迟仅涉及跟踪(并由此得到补偿)50Hz分量的变化有多快。
$ \ endgroup $
–user47050
20年1月8日在23:39

$ \ begingroup $
@Dan Boschen:该组延迟仅与带宽内的信号分量相关,且持续时间长于反向带宽。因此,衰减的缓慢变化的噪声会遭受明显的群延迟(即将其关闭,您会得到180°漂移的50Hz波,并具有缓慢的指数衰减,从原始的50Hz补偿开始)。信号本身直接通过,并且二阶IIR滤波器不具有“存储”功能,因为它几乎可以通过所有频率。
$ \ endgroup $
–user47050
20年1月8日在23:54

#2 楼

这是一个不确定性原理的问题:由于频域中准则的狭窄性要求在时域中具有一定的观察宽度,因此没有一种方法可以制造出几乎没有延迟的可靠滤波器来抑制50Hz附近的狭窄频带。基本上,不能独立地最小化时间和频率上现象的紧凑性。在这一方面,Gabor小波在某种程度上是“最佳的”。滤波器越窄,对干扰变化的反应就越慢。我在这里不使用FIR滤波器,而是使用一个短而陡峭的IIR陷波滤波器。

这将抑制持续的嗡嗡声,并且会对通过50Hz的信号做出较快的响应(它们将被广泛接受并且对抑制操作的影响不会很大,最终会消失。 2级50Hz IIR滤波器或多或少是一个阻尼50Hz振荡器,它缓慢地与源信号同步,并从源信号中减去其输出。它受到源信号及其输出的差异的激励,因此趋向于跟踪输入的50Hz分量。电源插头,您已经有一个噪声模型,该模型与问题信号锁相。主电源嗡嗡声存在于几种没有锁相的版本中,这是非常不寻常的(尽管一旦备用发电机或安全网络开始运行,这并非不可能),并且算法至少会适应缓慢的漂移。

评论


$ \ begingroup $
调谐到50 Hz带宽的固定二阶IIR滤波器不会根据输入信号适应其中心频率-它具有固定的抑制带,可以准确预测在任何给定频率下将抑制多少信号。
$ \ endgroup $
–丹·博申(Dan Boschen)
20年1月9日,0:13

$ \ begingroup $
(请参阅我的文章,其中显示了数字二阶IIR滤波器的频率响应及其预期的抑制能力:输入频率不会改变该响应:dsp.stackexchange.com/questions/31028/…)
$ \ endgroup $
–丹·博申(Dan Boschen)
20年1月9日,0:14

$ \ begingroup $
@Dan Boschen:您会发现市电嗡嗡声也不会适应其频率:电力公司基本上保证与市电频率同步的时钟在一个月内不会超过几秒钟。当然,有备用电源的医院可能会有更多波动。
$ \ endgroup $
–user47050
20年1月9日,0:35

$ \ begingroup $
@ user47050:电源线的平均频率非常准确,但会随时间变化。电力公司摇摇欲坠,以便长期平均是正确的。
$ \ endgroup $
– JRE
20年1月9日,12:18

$ \ begingroup $
@JRE:正如我所说:IIR陷波滤波器跟踪假设的(精确的)50Hz噪声的幅度和相位。电力公司的校正是通过加速/减速相位来实现的,只要频率差在其带宽之内,IIR滤波器就可以比较好地跟随这种变化。频率关闭时,您会听到一些噪音,但没有瞬变现象。
$ \ endgroup $
–user47050
20年1月9日,12:53

#3 楼

我加入这个社区只是为了回答您的问题,因为大约两年前我在ECG领域遇到了类似的问题。一种简单的数字陷波滤波器解决方案,它可以将信号延迟要滤除的频率周期的一半,然后将其与当前信号进行平均。

在您的情况下为2 kHz采样频率,一个50 Hz的完整周期为40个采样。因此,您将信号延迟了20个样本,并为每个样本计算了当前样本和20个样本之前的平均值:
在您的情况下,延迟为10 ms。
<滤波器的结果显示在图片中:

唯一的缺点是衰减远小于所需的60 dB。我的粗略计算表明介于20 dB和30 dB之间。

评论


$ \ begingroup $
您所描述的是梳状过滤器,en.wikipedia.org / wiki / Comb_filter
$ \ endgroup $
–本
20年1月9日,13:16

$ \ begingroup $
感谢您的澄清,我只是专注于结果而不是方法。这意味着,如果我理解正确的话,还将对100 Hz,200 Hz等进行滤波。我认为,对于OP来说还不错,因为他们希望摆脱应用中的环境噪声(主交流声为50 Hz,荧光灯为100 Hz等)。因此,该过滤器用一块石头杀死了两只鸟。
$ \ endgroup $
–迈克
20 Jan 9 '20 at 14:13

$ \ begingroup $
但是,瞬态响应非常慢,这在某些应用中可能会出现问题...
$ \ endgroup $
–本
20年1月9日,14:51

$ \ begingroup $
这种方法要提到的缺点是它将是一个梳状滤波器,并且您将在50 Hz的倍数处获得陷波,并且在每个位置都将获得相对较宽的陷波(幅度响应为abs(正弦))
$ \ endgroup $
–丹·博申(Dan Boschen)
20年1月10日,11:35

$ \ begingroup $
我看到你已经说过了!考虑到相对较宽的抑制带,它仍然会消除很多感兴趣的信号-但是,如果想要对谐波进行抑制,可以通过对二阶IIR消零滤波器的系数进行零插入来做建议。在每个谐波处提供一个陡峭的零点。这将具有更长的瞬态时间,而您显示的此解决方案根本不应该有太多的瞬态信号-除非我缺少@Ben?
$ \ endgroup $
–丹·博申(Dan Boschen)
20 Jan 10 '20 at 17:49

#4 楼

我认为这是实时处理。否则,您可以简单地丢弃与组延迟相对应的样本数。

第一个解决方案-使用IIR陷波滤波器。您可以使用此解决方案

为指定频率50 Hz解析设计陷波滤波器

如果您未接近50,则群延迟将很小,可能可以忽略赫兹。但是,该滤波器仍将具有瞬态响应,这可能会出现问题。不幸的是,我无法为您解答。

第二种解决方案:假设您的50 Hz噪声具有接近恒定的幅度,则可以估计该噪声并将其减去。只要您的估计是接近的。有效延迟将为0。但是,如果噪声幅度快速变化,则可能无法正常工作。

评论


$ \ begingroup $
是的,这是用于实时处理。就像在网站上一样,50Hz几乎没有常数,但是使用IIR的解决方案似乎比预期的要好。谢谢。
$ \ endgroup $
–邪恶
20年1月8日在13:52



$ \ begingroup $
Dan Boschen提出的带有PLL的解决方案可以很好地工作,尽管PLL可以跟踪变化的频率。
$ \ endgroup $
–本
20年1月8日在14:19

$ \ begingroup $
仅当相位相同时,减法才会有效,否则结果可能会更糟(最坏情况下为1.41倍)。
$ \ endgroup $
–有关的公民
20年1月13日在14:47

$ \ begingroup $
我同意。但是,如果估算器准确且相位变化不快,它将起作用。
$ \ endgroup $
–本
20年1月13日在15:48

#5 楼

为了消除EEG信号中的主嗡嗡声,您可以利用以下事实:噪声在相位和频率上都是稳定的,尽管幅度不一定取决于整个电气环境。为此,最受欢迎的EEG分析软件均支持正弦波拟合:




通过CleanLine插件可安装EEGLAB,并可通过EEGLAB的插件菜单安装(基于MATLAB)

通过ft_preproc_dftfilter(基于MATLAB)进行FieldTrip。

通过Raw.notch_filtermethod='spectrum_fit'(基于Python)进行MNE-Python。可以通过简单地向后移动滤波信号来计算FIR组延迟并对其进行补偿。但是,正如其他地方所指出的那样,这对于实时处理可能不切实际。但是,如果您要在表面EEG中实时处理伽马带信号,请参阅我的下一个注释。

在更广泛的EEG注释中:去除4 Hz以下的EEG信号对现代标准。甚至1或2 Hz高通也仅在非常有限的区域中使用。在大多数应用领域中,通常在0.1至0.3之间进行高通。除此之外,我们知道,表面脑电图的高频(“γ”)范围受到肌肉伪影的严重污染。这是大脑信号最弱的信号区域(部分原因是头骨,脑膜和脑脊髓液起着低通滤镜的作用,请参见Duun-Henriksen等人2013作为一个很酷的生物学示例,尽管从物理)以及最多的肌肉伪影和电噪声。当参与者化学麻痹时,发现许多伽玛效应消失了Whitham等人,2007。这也解释了伽玛效应在许多领域(例如语言)的不一致之处-该信号区域的噪声导致较低的统计功效,导致键入M&S错误(Gelman和Carlin,2014年)。

#6 楼

完全有可能使用FIR或IIR技术构建陷波滤波器,该陷波滤波器对于远离陷波的频率几乎没有延迟。但是,陷波中和接近陷波的频率必须具有相当大的群延迟,因此,如果要求所有频率上的线性相位或恒定群延迟,则群延迟在所有频率上都不可避免地很大。
在大多数陷波滤波器应用中,不需要恒定的群延迟。
一个特别简单的陷波滤波器是一阶IIR高通滤波器。在这种情况下,陷波位于DC。对于模拟高通和一阶离散时间高通滤波器的等效函数,传递函数为 $ H(s)=-s \ tau /(1 + s \ tau)$。 />高通结构可用于在复杂的基带信号中的任何频率上创建一个陷波,方法是先将陷波频率旋转到DC,在高通之上应用,然后从DC旋转回陷波。