MATLAB中filter和conv之间的区别

nik*_*kos 17 matlab signal-processing convolution

我有一个MATLAB问题:我正在尝试计算LTI系统的输出,并且我遇到了两个不同的MATLAB函数,这些函数应该适用于该作业,filter并且conv.他们两个有什么区别?

mtr*_*trw 13

filter可以处理FIR和IIR系统,同时conv接收两个输入并返回它们的卷积.所以conv(h,x),filter(h,1,x)并给出相同的结果.过滤器中的1表示过滤器的递归系数正好[1].但如果您有IIR过滤器,则无法使用conv.filter也可以返回过滤器状态,以便它可以在后续调用中使用而不会产生过滤器瞬变.

有关详细信息,请参阅conv过滤器文档.

  • 实际上`conv(b,x)`和`filter(b,1,x)`并不完全**相同.`filter`将为您提供与`x`长度相同的输出,而`conv`将给出长度为`length(x)+ length(b)-1`的输出. (7认同)
  • 考虑滤波器"H(z)= [1 - 2z ^ -1 + z ^ -2]/[1 - z ^ -1]`.如果你将输入设置为'x = [1 0 0 0]`,你将得到结果`[1 -2 1 0]`和`conv([1,-2,1],x)`和` [1 -1 0 0]`用`filter([1,-2,1],[1,-1],x)`. (2认同)

小智 11

conv(x,b)执行完整的卷积.结果的长度是length(x)+ length(b)-1. filter(b,[1],x)给出一个长度相同的输出x.它不会刷新过滤器的延迟线.

假设x是行向量.制作x0 = [x zeros(1,length(b)-1)]; 现在filter(b,[1],x0)是一样的conv(x,b).这是因为额外的0用于刷新延迟线.

哪一个更合理?这取决于你需要什么!