【问题标题】:Understanding filters in matlab了解matlab中的过滤器
【发布时间】:2013-08-03 14:05:25
【问题描述】:

我当然知道过滤器会过滤某些类型的噪音。我只想了解过滤器在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 文档也没那么有用。

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

【问题讨论】:

  • 这个问题似乎是题外话,因为它是关于数字信号处理概念而不是实现。试试 dsp.stackexchange.com
  • @Dan 我不得不部分不同意。海报询问了matlab中的实现,即主题(文档是否有用是另一个问题)。如果您删除“或任何地方”这个词,它就会变成一个主题问题。
  • Matlab 中的实现 仅适用于 MathWorks 员工。至于滤波器应用的理解,这还是一个纯DSP的问题。

标签: matlab filter noise


【解决方案1】:

我同意filter help file 中的描述不是那么容易阅读。

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

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

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


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

【讨论】:

  • 感谢您的回答。我不想要任何噪音。我希望噪音看起来像变形的形状。如果您也沿 y 添加过滤器并绘制它,您将在上图中看到。如果您对实现此目的的更简单的过滤器有建议,如果您也可以分享,那就太好了。
【解决方案2】:

documentation 状态

FILTER 一维数字滤波器。 Y = FILTER(B,A,X) 过滤向量 X 中的数据 由向量 A 和 B 描述的过滤器来创建过滤的 数据 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 为过滤器提供原始表达式。

【讨论】:

    猜你喜欢
    • 2011-02-03
    • 2020-07-08
    • 2011-07-27
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    相关资源
    最近更新 更多