如果我们有大量数据或内存不足,zf和zi选项将派上用场.
例如,我们可以将数据分为x和newx两部分,并使用过滤函数,如,
[y,zf] = filter(b,a,x);
newy = filter(b,a,newx,zf);
对于a和b为的过滤器,
我们将参考长度(a)-1个样本的y和长度(b)-1个样本的x.
因此,为了在下半场继续我们的过滤器,我们将需要来自前半部分的max(长度(a),长度(b))-1个调用.
例1
y[n] = x[n] + 2 * x[n-1] + 3 * x[n-2];
这是,
a = 1;
b = [1 2 3];
示例输入和输出是,
x = [1 2 3 4 5 6 7 8 9];
y = [1 4 10 16 22 28 34 40 46];
zf = [42 27]';
在newx上实现过滤器,对于我们的前两个样本,
newy[1] = newx[1] + 2*9 + 3*8 = newx[1] + 42 = newx[1] + zf[1];
newy[2] = newx[2] + 2 * newx[1] + 3*9 = newx[2] + 2 * newx[1] + zf[2];
例2
x = 1 : 9;
b = [1 1 1];
a = [1 2];
[y,zf] = filter(b,a,x);
这对应于y [n] = x [n] x [n-1] x [n-2] -2 * y [n-1].
输入和输出是:
x = [1 2 3 4 5 6 7 8 9];
y = [1 1 4 1 10 -5 28 -35 94];
zf = [-171 9]';
现在是下半场的第一个值:
newy[1] = newx[1] + 9 + 8 - 2 * 94 = newx[1] - 171 = newx[1] + zf(1);
newy[2] = newx[2] + newx[1] + 9 - 2*newy[1] = newx[2] + newx[1] + zf(2) - 2*newy[1];
所以我认为现在非常明显,zf是如何工作的.