filter 函数允许您对向量应用过滤器。您仍然需要提供滤波器系数。如果查看the documentation for filter,您会发现需要指定两个向量b 和a,其元素是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 = filter(b,a,x);得到一个结果y。
话虽如此,您在上面指定的 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 的各种数字滤波器设计技术。