我知道为了过滤大块数据,可以使用具有适当过滤系数的函数“filter”, 并将最终条件 'zf' 传递给下一个 block 作为其初始条件 'zi'。
我很困惑。 “zf”的内容到底是什么?
它是否保存了最后的相关输入样本? (在纯 FIR 滤波器中) 最后相关的输出样本? (在 IIR 中) 当最后的输入和最后的输出都相关时,它有什么意义?
非常感谢
最佳答案
如果我们有大量数据或内存不足,zf
和 zi
选项会派上用场。
例如,我们可以将数据分成两部分,x
和 newx
,然后使用 filter
函数,
[y,zf] = filter(b,a,x);
newy = filter(b,a,newx,zf);
对于具有 a
和 b
的过滤器,
我们将引用 length(a) -1
y
样本和 length(b) -1
样本>x
.
因此,为了在下半场继续我们的过滤,我们将需要来自上半场的 max(length(a),length(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
是如何工作的。
关于matlab - MATLAB函数过滤器中 'zf'的内容到底是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27275060/