我一直在到处搜索,但我似乎无法理解2009年这里提供的以下示例。
我试图在Matlab中对一组数据实现一个简单的低通滤波器,这是我在SO上提到的下面的例子
xfilt = filter(a, [1 a-1], x);
其中a = T/τ
,T
=样本之间的时间,τ
(tau(是滤波器时间常数。
现在,系数是给我带来最大麻烦的。基于一阶拉普拉斯传递函数如下:
(1/Ts) / (1 + (1/Ts))
,其中(1/Ts) = a
如果知道上面函数的分母系数是如何找到的,那就太好了。
根据filter
文档,第一个参数是有理传递函数的分子系数,我们称它们为[b0 b1 b2 ...]
,第二个参数是有理转移函数的分母系数
由于你想要一个单极低通滤波器,时域方程是:
A0*y(n) = B0*x(n) - A1*y(n-1);
您可以简化上述方程,使a0 = 1;
、b0 = B0/A0
和a1 = A1/A0;
成为
y(n) = b0*x(n) - a1*y(n-1);
出于稳定性原因,如果您不想改变增益,您将修复b0 - a1 = 1;
y(n) = b0*x(n) - (b0-1)*y(n-1);
等价的传递函数是
H(z) = b0 / (1 + (b0-1)*z^-1);
因此分子系数为b0
,分母系数为1
和b0-1
。因此写入xfilt = filter(b0, [1 b0-1], x);
如果fc
是频率切割并且Fs
是频率采样,则b0 = 2*pi*fc/Fs
。