matlab - MATLAB函数过滤器中 'zf'的内容到底是什么

标签 matlab filtering signal-processing

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

我很困惑。 “zf”的内容到底是什么?

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

非常感谢

最佳答案

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

例如,我们可以将数据分成两部分,xnewx,然后使用 filter 函数,

[y,zf] = filter(b,a,x);
newy = filter(b,a,newx,zf); 

对于具有 ab 的过滤器,

enter image description here

我们将引用 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/

相关文章:

arrays - MATLAB的numel和length函数的区别

matlab - 常量属性中方法的函数句柄

linq - 如何在 Linq 中过滤子集合

javascript - 为什么使用多个条件过滤对象数组会返回空数组?

algorithm - 模式匹配检测信号边缘?

android - 在android中绘制音频文件的频谱图

string - 在编写值向量和换行符时避免多次调用 fprintf

javascript - 从 ES6/ES7 中的特定结构化对象数组中提取值

android - 我可以在智能手机上每秒执行多少次 FFT? (用于执行语音识别)

matlab - dlmwrite 循环使用