What is the difference between filter and conv in Matlab?
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!
nikos
Updated on July 05, 2022Comments
-
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
andconv
. What is the difference between the two of them? -
nikos over 12 yearsso 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 ofh
. Is that correct? -
mtrw over 12 yearsConsider the filter
H(z) = [1 - 2z^-1 + z^-2]/[1 - z^-1]
. If you set the input tox = [1 0 0 0]
, you'll get the results[1 -2 1 0]
withconv([1,-2,1],x)
and[1 -1 0 0]
withfilter([1,-2,1],[1,-1],x)
. -
LWZ over 8 yearsActually
conv(b,x)
andfilter(b,1,x)
are not exactly the same.filter
will give you an output with same length asx
, whileconv
will give an output with length oflength(x)+length(b)-1
.