我正在尝试通过LP过滤并从原始过滤器中减去输出来对信号进行HP过滤。为了获得经过LP滤波的信号,我使用三阶Butterworth滤波器对16,000个采样信号进行了前向滤波。截止频率为0.5 Hz @ 250 Hz。没有窗口。

在大约85%的样本中,此方法的输出似乎与实际经过HP滤波的信号完全重叠。但是,在输出的末尾,有一个似可疑的类似Sinc的现象。


是什么原因引起的?
我可以做些什么改变以使该方法可行?

这是两个信号叠加。蓝色是经过HP过滤的,红色是通过减法获得的。



这里是每个样本的绝对差。他们永远不会完全平等;最小差异为8e-12。 87%的值低于0.01。



(如果有更好的方法可以从LP过滤器的$ H(z)$中获得HP过滤器, d乐于学习。)

评论

您可以包含用于生成图的MATLAB代码吗?数据并不重要;您可以根据需要使用随机样本进行模拟。

#1 楼

Methinks @ hotpaw2在正确的轨道上。我的猜测是filtfilt不能正确处理反向过滤器的初始条件。这听起来像是一个非常棘手的问题-我认为我不能责怪Mathworks弄错它...

修复程序对我来说似乎很容易:将信号的末尾归零sinc消失,并删除过滤器后的填充(现在为非零!)。

#2 楼

您正在为其中一个执行向后过滤,而为另一个进行仅向前过滤。因此,这两个滤波器在一个或两个边沿上的行为会有所不同。

如果信号是非常平稳的并且在数据窗口长度内正好是周期性的,则可以尝试将数据循环环绕,并通过以下方式开始过滤器它们的脉冲响应长度。

评论


$ \ begingroup $
对不起,如果我不够清楚。我要比较的信号(蓝色)也被向前和向后过滤(filtfilt和butter(3,0.5 / 250,高))。信号来自心电图,我不能指望它是周期性的。
$ \ endgroup $
–安德烈亚斯(Andreas)
2011年11月8日17:25



$ \ begingroup $
我误会了吗?我无法理解赞成意见,因为第一段显然是错误的。
$ \ endgroup $
–安德烈亚斯(Andreas)
2011年11月10日在8:42