了解matlab中的过滤器

时间:2013-08-02 10:21:34

标签: matlab filter noise

我当然知道过滤器可以过滤某种噪音。我只想了解过滤器在matlab中的工作原理。 考虑一下代码:

[x,y] = pol2cart(0:0.01:2*pi, 1);
nx = filter(.2*(1-.3), [1 -.3], cumsum(randn(size(x))));
x=x+nx;

一些变形噪声被添加到x坐标。它是如何工作的?我也不清楚理解参数的解释。 matlab文档也没那么有用。

过滤器如何工作?以及如何解释不同的参数?

2 个答案:

答案 0 :(得分:3)

documentation

  

FILTER一维数字滤波器。       Y = FILTER(B,A,X)用向量过滤向量X中的数据       由向量A和B描述的过滤器以创建过滤的       数据Y.过滤器是“Direct Form II Transposed”       执行标准差分方程:

a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)
                      - a(2)*y(n-1) - ... - a(na+1)*y(n-na)

也许最简单的过滤器示例是运行平均值。在这种情况下,由于数据中的信号不是随机的(不是不相关的),而是噪声是随机的(至少是白噪声),因此平均具有衰减噪声而有利于信号的效果。

在您的情况下,过滤器使用如下:

y = filter(scale*(1-f), [1 -f], cumsum(randn(size(t))));

这里y(n)是您将添加到信号中的噪音(变形)。在这种情况下b = scale*(1-f)a = [1 -f],我们可以写

y(n) = scale*(1-f)*x(n) + f*y(n-1)

有些事情值得注意:

(1)cumsum(randn(size(t)))表示随机游走,并且等于上面等式中的过滤器输入x(n)。这在下图中以红色绘制。添加随机游走而不仅仅是噪音(用randn生成的说法)会导致变形,而不仅仅是噪音。

(2)scale仅影响和中的第一项,顾名思义,最重要的是设定原始信号变形的整体幅度。

(3)f赞成一个词而不是另一个词。当f很大时,第一项的贡献减少,第二项的贡献增加。减少f的结果是增加数据的“不连贯性”。因此,您可以将f视为平滑参数。

以下是一些实验的结果(红色=随机游走,蓝色=正弦(信号),绿色=信号+过滤随机游走):

enter image description here

另一种影响滤波器效果的方法是考虑使用freqz计算的频率响应,如下所示:

[h,w]=freqz(b,a,10000);

对于不同的缩放和平滑参数,从以下频率响应图(横坐标中的频率,纵坐标中的幅度比例因子)中,参数对低通滤波器行为的影响变得更加清晰:

enter image description here

感谢Peter提供过滤器的原始表达式。

答案 1 :(得分:1)

我同意filter help file中的说明并不容易阅读。

要实现的一件重要事情是,他过滤器不是我通常认为的日常生活中的过滤器。它通常不用于从数据中删除一些(坏的)东西。

相反,它循环遍历数据,并对每个元素及其前身执行操作。

如果您点击文档文件中的“算法”,您可以看到它的实际工作原理。它包含一个图形和一个写出的传递函数。


总结:如果你只想添加噪音,可能会有一种更简单的方法。