2

我当然知道过滤器会过滤某些类型的噪音。我只想了解过滤器在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 文档也不是很有帮助。

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

4

2 回答 2

3

文件指出

FILTER 一维数字滤波器。Y = FILTER(B,A,X) 使用向量 A 和 B 描述的滤波器对向量 X 中的数据进行滤波,以创建滤波后的数据 Y。滤波器是标准差分方程的“直接形式 II 转置”实现:

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视为平滑参数。

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

在此处输入图像描述

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

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

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

在此处输入图像描述

感谢Peter贡献了过滤器的原始表达式。

于 2013-08-02T11:54:34.350 回答
1

我同意过滤器帮助文件中的描述不是那么容易阅读。

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

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

对于它的价值,如果您单击文档文件中的“算法”,您可以看到它实际上是如何工作的。它包含一个图形和一个写出的传递函数。


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

于 2013-08-02T11:38:36.580 回答