What is the difference between filter and conv in Matlab?

27,479

Solution 1

filter can handle FIR and IIR systems, while conv takes two inputs and returns their convolution. So conv(h,x) and filter(h,1,x) would give the same result. The 1 in filter indicates that the recursive coefficients of the filter are just [1]. But if you have an IIR filter, you can't use conv. filter can also return the filter states, so that it can be used in subsequent calls without incurring filter transients.

See the conv and filter documentation for details.

Solution 2

conv(x,b) performs the complete convolution. The length of the result is length(x)+ length(b)-1. filter(b,[1],x) gives an output of the same length than x. It doesn’t flush the delay line of the filter.

Assume x is a row vector. Make x0 = [x zeros(1,length(b)-1)]; now filter(b,[1],x0) is the same as conv(x,b). This is because the additional 0’s are used to flush the delay line.

Which one is more reasonable? It depends of what you need!

Share:
27,479
nikos
Author by

nikos

Updated on July 05, 2022

Comments

  • nikos
    nikos almost 2 years

    I am trying to calculate the output of a LTI system. I came across two different Matlab functions that are supposed to be appropriate for the job: filter and conv. What is the difference between the two of them?

  • nikos
    nikos over 12 years
    so as far as i got it from what i read, if it's an IIR system and i use conv, i will get the right output only for an amount of samples equals to the length of h. Is that correct?
  • mtrw
    mtrw over 12 years
    Consider the filter H(z) = [1 - 2z^-1 + z^-2]/[1 - z^-1]. If you set the input to x = [1 0 0 0], you'll get the results [1 -2 1 0] with conv([1,-2,1],x) and [1 -1 0 0] with filter([1,-2,1],[1,-1],x).
  • LWZ
    LWZ over 8 years
    Actually conv(b,x) and filter(b,1,x) are not exactly the same. filter will give you an output with same length as x, while conv will give an output with length of length(x)+length(b)-1.