2011-12-06 42 views
15

Tengo una pregunta de MATLAB: Estoy tratando de calcular la salida de un sistema LTI y encontré dos funciones de MATLAB diferentes que se supone que son apropiadas para el trabajo, filter y conv. ¿Cuál es la diferencia entre los dos?Diferencia entre filtro y conv en MATLAB

Respuesta

10

filter puede manejar sistemas FIR e IIR, mientras que conv toma dos entradas y devuelve su convolución. Por lo tanto, conv(h,x) y filter(h,1,x) daría el mismo resultado. El filtro de 1 en indica que los coeficientes recursivos del filtro son solo [1]. Pero si tiene un filtro IIR, no puede usar conv. filter también puede devolver los estados del filtro, de modo que pueda usarse en llamadas posteriores sin incurrir en transitorios del filtro.

Consulte la documentación conv y filter para obtener más información.

+0

así que por lo que he leído, si se trata de un sistema IIR y uso 'conv', obtendré el resultado correcto solo para una cantidad de muestras igual a la longitud de' h'. ¿Es eso correcto? – nikos

+2

Considere el filtro 'H (z) = [1 - 2z^-1 + z^-2]/[1 - z^-1]'. Si configura la entrada a 'x = [1 0 0 0]', obtendrá los resultados '[1 -2 1 0]' con 'conv ([1, -2,1], x)' y ' [1 -1 0 0] 'con' filtro ([1, -2,1], [1, -1], x) '. – mtrw

+4

En realidad 'conv (b, x)' y 'filter (b, 1, x)' no son ** exactamente ** lo mismo. 'filter' le dará una salida con la misma longitud que' x', mientras que 'conv' dará una salida con longitud de' length (x) + length (b) -1'. – LWZ

8

conv(x,b) realiza la convolución completa. La longitud del resultado es length(x)+ length(b)-1. filter(b,[1],x) da una salida de la misma longitud que x. No vacía la línea de retardo del filtro.

Supongamos x es un vector de fila. Hacer x0 = [x zeros(1,length(b)-1)]; ahora filter(b,[1],x0) es lo mismo que conv(x,b). Esto se debe a que los 0 adicionales se utilizan para enjuagar la línea de retardo.

¿Cuál es más razonable? ¡Depende de lo que necesites!