MATLAB函数filter中'zf'的内容到底是什么

Day*_*mer 4 matlab filtering signal-processing

我知道,为了过滤块中的大量数据,可以使用具有适当过滤系数的函数“filter”,并将最终条件“zf”传递到下一个块作为其初始条件“zi”。

我很困惑。“zf”的具体内容是什么?

它是否保存最后的相关输入样本?(在纯 FIR 滤波器中)最后的相关输出样本?(在 IIR 中)当最后的输入和最后的输出都相关时,它保持什么?

多谢

Ras*_*hid 6

如果我们有大量数据或者内存不足,zfzi选项将会派上用场。

例如,我们可以将数据分为两部分xnewx,并使用filter如下函数:

[y,zf] = filter(b,a,x);
newy = filter(b,a,newx,zf); 
Run Code Online (Sandbox Code Playgroud)

a对于带有和的过滤器b

在此输入图像描述

我们将回顾 的length(a) -1样本ylength(b) -1的样本x

因此,为了在下半场继续进行过滤,我们将需要max(length(a),length(b)) -1上半场的电话。

实施例1

y[n] = x[n] + 2 * x[n-1] + 3 * x[n-2];
Run Code Online (Sandbox Code Playgroud)

a = 1;
b = [1 2 3];
Run Code Online (Sandbox Code Playgroud)

输入和输出的示例是,

x = [1     2     3     4     5     6     7     8     9];
y = [1     4    10    16    22    28    34    40    46];
zf = [42  27]';
Run Code Online (Sandbox Code Playgroud)

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];
Run Code Online (Sandbox Code Playgroud)

实施例2

x = 1 : 9;
b = [1 1 1];
a = [1 2];
[y,zf] = filter(b,a,x);
Run Code Online (Sandbox Code Playgroud)

这对应于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]';
Run Code Online (Sandbox Code Playgroud)

现在来看下半部分的第一个值:

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];
Run Code Online (Sandbox Code Playgroud)

所以我认为现在很明显,它是如何zf运作的。