对数据多次应用过滤器

信息处理 matlab 过滤器 低通滤波器
2022-01-25 05:07:56

我有来自实验的数据并应用低通滤波器(数字巴特沃斯滤波器,在 Matlab 中)。

我的问题是,如果我对数据应用相同的过滤器(例如 2 次)会发生什么?

有什么变化?是不是像我有双重订单?


问题指的是Matlab中的filtfilt函数:

http://www.mathworks.de/de/help/signal/ref/filtfilt.html

来源 [1] 在第 336 页上说:

在许多滤波问题中,我们希望相位特性为零或线性。对于因果滤波器,不可能有零相位。然而,对于许多滤波应用来说,如果处理不是实时执行的,那么对于 n < 0,滤波器的脉冲响应不必为零。当要过滤的数据具有有限的持续时间并存储在例如计算机存储器中时,离散时间过滤中常用的一种技术是通过相同的过滤器向前处理数据,然后向后处理

[1] 奥本海姆、艾伦 V.、罗纳德 W. 谢弗和约翰 R. 巴克。离散时间信号处理。第 2 版。新泽西州上马鞍河:Prentice Hall,1999 年。

3个回答

用终极的方式回答你的问题怎么样?如果无限次或实际上多次应用低通滤波器会发生什么?相信你理解这个更有意义。

我想首先强调一个事实 ,则将过滤器应用于次,相当于将过滤器应用于一次 FdkFd

F=FFFktimes

您问题的“最终”版本的答案是:无论您从哪里开始使用低通滤波器,都说,使用 ,当您将滤波器应用于某些离散信号,您最终将应用高斯滤波器F=[f0,f1,,fn]i=0nfi=1fi0GFd=[d0,d1,,dm]k

注意:这个结论不依赖于 1)要处理的信号是什么,2)你使用哪个,以及它是lowpassdF

这是一些ipython代码,你可能会玩。

import numpy as np
# generate a random low pass filter
F = np.random.randint(0,1000,(100,1) ).astype('float').ravel();
# ensures sum to 1
F = F / F.sum();
print "sum(F) = ", F.sum();
# create copy to buffer the last version of convolving F for k times
Fk = F.copy();
Fk_list = [];
for k in range( 5 ) :
    Fk = np.convolve( Fk, F, 'full' );
    Fk = Fk / Fk.sum();
    # donot worry about this line, see comments below
    Fk = np.asarray( filter( lambda x : x > 1e-6, Fk ) );
    Fk = Fk / Fk.sum();
    Fk_list.append( Fk );
# plot results
f, axarr = pyplot.subplots( 3, 2 );
# plot data
axarr[0,0].plot( F ),
axarr[0,0].set_title( 'k = 0' );
axarr[0,1].plot( Fk_list[0] ),
axarr[0,1].set_title( 'k = 1' );
axarr[1,0].plot( Fk_list[1] ),
axarr[1,0].set_title( 'k = 2' );
axarr[1,1].plot( Fk_list[2] ),
axarr[1,1].set_title( 'k = 3' );
axarr[2,0].plot( Fk_list[3] ),
axarr[2,0].set_title( 'k = 4' );
axarr[2,1].plot( Fk_list[4] ),
axarr[2,1].set_title( 'k = 5' );
pyplot.show();
  • 带有 filter 关键字的那行只是简单地丢弃非常小的组件,因为我想让你看到漂亮的钟形高斯。否则,结果仍然是 Gassuian,但由于我们可能包含许多超出 4 倍标准差的东西,您会看到类似峰值的东西。

以下是上述 ipython 代码的结果。如您所见,卷积到 self 的次数越多,得到的低通滤波器就越类似于高斯滤波器。F

卷积随机低通滤波器

现在让我用一个非常不同的给你另一个视觉演示,它只包含两个非零值。虽然这次你看不到在 5 次卷积中是高斯的,但长期行为,即并没有改变。经过大量的自卷积后会变成高斯样。FFk

卷积一个非常稀疏的低通滤波器

最后,您可能会问为什么会发生这种情况?因为上帝爱高斯这个结论就是所谓的“中心极限定理”(详见http://en.wikipedia.org/wiki/Central_limit_theorem)。我不会为你解释一切,因为我希望你能自己学习。但这里有一个提示:概率/离散分布、算术平均值、低通滤波器系数、线性算子和卷积,它们都是相关的。如果您在理解新事物方面有任何困难,请尝试通过您在亲密关系中已经知道的事物来理解它。

傻我!Matlab 帮助包括答案

  • 滤波器传递函数,等于原始滤波器传递函数的平方幅度
  • 、... 和 ...指定的滤波器阶数的两倍。b0b1b2a1a2

数字巴特沃斯滤波器,在 Matlab 中)。

我的问题是,如果我对数据应用相同的过滤器(例如 2 次)会发生什么?

有什么变化?是不是像我有双重订单?

不完全的。与 2 阶 Butterworth 级联的 2 阶 Butterworth产生 4 阶滤波器,但不会是 4 阶 Butterworth。它将在截止频率处降低 6 dB,而不是降低 3 dB。

要获得巴特沃斯的总频率响应,您需要对前向和后向双二阶使用不同的 Q。我不确定它们不对称会对它们产生什么影响。