低通滤波器Matlab

时间:2011-12-02 14:35:39

标签: matlab signal-processing smoothing

在matlab中有没有办法创建一个低通滤波器,我知道我可以使用滤波器功能但不知道如何使用它,我已经为我的低通H(z)= 1给出了以下公式(1 - z ^ -4)^ 2/16(1 - z ^ -1)^ 2,截止频率为20Hz

2 个答案:

答案 0 :(得分:3)

filter功能允许您将过滤器应用于矢量。您仍需要提供滤波器系数。如果您查看the documentation for filter,您会发现需要指定两个向量ba,其元素是z的系数为降幂,其中z是z中的频域变量-转变。由于您将过滤器的表达式作为z变换给出,因此很容易找到系数。首先,让我们写出过滤器的分子:

(1/16)*(1 - z^-4)^2 = (1/16)*(1 - 2z^-4 + z^-16)
= (1/16)*(1 + 0z^-1 + 0z^-2 + 0z^-3 - 2z^-4 + 0z^5 + 0z^-6 ... + z^-16)

因此b向量为b = (1/16)*[1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1]。同样,a向量为a = [1 -2 1]。现在,您只需执行x即可过滤数据向量y以获得结果y = filter(b,a,x);

说了这么多,你在上面指定的H(z)肯定不是低通滤波器。它更像是梳状滤波器的一些奇怪的级联。

如果你想设计自己的过滤器,并假设你有信号处理工具箱,最简单的事情是使用Matlab的fir1函数设计一个过滤器:

h = fir1(N, 20/(Fs/2)); %# N is filter length, Fs is sampling frequency (Hz)

然后您可以在filter函数中使用

y = filter(h, 1, x); %# second param is 1 because this is an FIR filter

你需要自己选择N.通常,较大的N值会产生更好的滤波器,其中更好的=拒绝20 Hz以上的更多频率。如果您的N值开始变得如此之大以至于它会导致奇怪的行为(计算错误,执行速度慢,结果数据中出现不可接受的启动/结束瞬态),您可能会考虑使用更复杂的滤波器设计。 Mathworks文档中有an overview种各种数字滤波器设计技术。

答案 1 :(得分:2)

您给出的公式:H(z)= 1(1 - z ^ -4)^ 2/16(1 - z ^ -1)^ 2是滤波器的Z变换。它是一个有理的函数,这意味着您的过滤器是一个递归(IIR)过滤器。 Matlab有一个名为filter(b,a,X)的函数。 b是分子的系数,其中z的功率减小,即i。在你的情况下:(1 * z ^ -0 + 0 * z ^ -1 + 0 * z ^ -2 + 0 * z ^ -3 + 0 * z ^ -4)^ 2,你可以使用{{1}数量方块:

conv()

b = [1 0 0 0 -1]

和分母的系数是:

b = conv(b,b)

a = [1 -1]

然后您调用过滤器a = 16 * conv(a,a),其中y = filter(b,a,x)是您的输入数据。

您还可以使用x

检查过滤器的频次响应

希望有所帮助。