Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

filter

filtro digital 1-D

Descripción

ejemplo

y = filter(b,a,x) filtra los datos de entrada x utilizando una función de transferencia racional definida por los coeficientes del numerador y del denominador b y a respectivamente.

Si a(1) no es igual a 1, entonces, filter normaliza los coeficientes del filtro dividiendo cada uno entre a(1). Por lo tanto, a(1) debe ser distinto de cero.

  • Si x es un vector, entonces, filter devuelve los datos filtrados como un vector del mismo tamaño que x.

  • Si x es una matriz, entonces, filter actúa a lo largo de la primera dimensión y devuelve los datos filtrados para cada columna.

  • Si x es una matriz multidimensional, entonces el comando filter actúa a lo largo de la primera dimension de la matriz cuyo tamaño no es igual a 1.

ejemplo

y = filter(b,a,x,zi) utiliza las condiciones iniciales zi para los retrasos del filtro. La longitud del vector zi debe ser igual a max(length(a),length(b))-1.

ejemplo

y = filter(b,a,x,zi,dim) actúa a lo largo de la dimensión dim. Por ejemplo, si x es una matriz, filter(b,a,x,zi,2) devuelve los datos filtrados para cada fila.

ejemplo

[y,zf] = filter(___) adicionalmente devuelve las condiciones finales zf de los retrasos del filtro, utilizando cualquiera de las sintaxis anteriores.

Ejemplos

contraer todo

Un filtro de media móvil es un método común utilizado para suavizar datos ruidosos. En este ejemplo se utiliza la función filter para calcular los promedios a lo largo de un vector de datos.

Cree un vector fila de 1 por 100 de datos sinusoidales que esté dañado por ruido aleatorio.

t = linspace(-pi,pi,100);
rng default  %initialize random number generator
x = sin(t) + 0.25*rand(size(t));

Un filtro de media móvil desliza una ventana de longitud a lo largo de los datos, calculando los promedios de los datos contenidos en cada ventana. La siguiente ecuación de diferencias define un filtro de media móvil de un vector :

Para un tamaño de ventana igual a 5, calcule los coeficientes del numerador y del denominador de la función de transferencia racional.

windowSize = 5; 
b = (1/windowSize)*ones(1,windowSize);
a = 1;

Encuentre la media móvil de los datos y compárela con los datos originales.

y = filter(b,a,x);

plot(t,x)
hold on
plot(t,y)
legend('Input Data','Filtered Data')

En este ejemplo se filtra una matriz de datos con la siguiente función de transferencia racional.

Cree una matriz de datos de entrada aleatorios de 2-por-15.

rng default  %initialize random number generator
x = rand(2,15);

Defina los coeficientes del numerador y del denominador para la función de transferencia racional.

b = 1;
a = [1 -0.2];

Aplique la función de transferencia a lo largo de la segunda dimensión de x y devuelve el filtro digital 1-D de cada fila. Grafique la primera fila de los datos originales contra los datos filtrados.

y = filter(b,a,x,[],2);

t = 0:length(x)-1;  %index vector

plot(t,x(1,:))
hold on
plot(t,y(1,:))
legend('Input Data','Filtered Data')
title('First Row')

Grafique la segunda fila de los datos de entrada contra los datos filtrados.

figure
plot(t,x(2,:))
hold on
plot(t,y(2,:))
legend('Input Data','Filtered Data')
title('Second Row')

Utilice las condiciones iniciales y finales para los retardos del filtro para filtrar datos en secciones, especialmente si las limitaciones de memoria son una consideración.

Genere una secuencia grande de datos aleatorios y divida la en dos segmentos, x1 y x2.

x = randn(10000,1);

x1 = x(1:5000);
x2 = x(5001:end);

Toda la secuencia, x, es la concatenación vertical de x1 y x2.

Defina los coeficientes del numerador y del denominador para la función de transferencia racional,

b = [2,3];
a = [1,0.2];

Filtre las subsecuencias x1 y x2 una a la vez. Devuelva las condiciones finales del filtrado de x1 para guardar el estado interno del filtro al final del primer segmento.

[y1,zf] = filter(b,a,x1);

Utilice las condiciones finales obtenidas de filtrar x1 como condiciones iniciales para filtrar el segundo segmento, x2.

y2 = filter(b,a,x2,zf);

y1 son los datos filtrados de x1y y2 son los datos filtrados de x2. La secuencia filtrada completa es la concatenación vertical de y1 y y2.

Filtre la secuencia completa simultáneamente para comparar.

y = filter(b,a,x);

isequal(y,[y1;y2])
ans = logical
   1

Argumentos de entrada

contraer todo

Coeficientes del numerador de la función de transferencia racional, especificados como un vector.

Tipos de datos: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Soporte de números complejos:

Coeficientes del denominador de la función de transferencia racional , especificados como un vector.

Tipos de datos: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Soporte de números complejos:

Datos de entrada, especificados como vector, matriz o matriz multidimensional.

Tipos de datos: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Soporte de números complejos:

Condiciones iniciales para los retrasos del filtro, especificados como vector, matriz o matriz multidimensional.

  • Si zi es un vector, su longitud debe ser max(length(a),length(b))-1.

  • Si zi es una matriz o matriz multidimensional, entonces, el tamaño de la dimensión principal debe ser max(length(a),length(b))-1. El tamaño de cada una de las dimensiones restantes debe coincidir con el tamaño de la dimensión de x correspondiente. Por ejemplo, considere la posibilidad de utilizar filter a lo largo de la segunda dimensión (dim = 2) de una matriz multidimensional x de 3-por-4-por-5. El arreglo zi debe tener el tamaño [max(length(a),length(b))-1]-por-3-por-5.

El valor predeterminado, especificado por [], inicializa todos los retrasos del filtro a cero.

Tipos de datos: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Soporte de números complejos:

Dimensión a lo largo de la cual se desea operar, especificada como un escalar entero positivo. Si no se especifica ningún valor, la opción predeterminada es la primera dimensión de la matriz cuyo tamaño es diferente de 1.

Considere una matriz de entrada de dos dimensiones, x.

  • Si dim = 1, entonces, filter(b,a,x,zi,1) opera a lo largo de las filas de x y devuelve el filtro aplicado a cada columna.

  • Si dim = 2, entonces, filter(b,a,x,zi,2) opera a lo largo de las columnas de x y devuelve el filtro aplicado a cada fila.

Si dim es mayor que ndims(x), entonces, filter devuelve x.

Tipos de datos: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Argumentos de salida

contraer todo

Datos filtrados, devueltos como vector, matriz o matriz multidimensional del mismo tamaño que los datos de entrada, x.

Si x es de tipo single, entonces, filter se calcula de forma nativa en single precision, y entonces, y es también de tipo single. De lo contrario, y se devuelve como tipo double.

Tipos de datos: double | single

Las condiciones finales para los retardos del filtro, devueltos como vector, matriz, o matriz multidimensional.

  • Si x es un vector, entonces, zf es un vector de columna de longitud max(length(a),length(b))-1.

  • Si x es una matriz o matriz multidimensional, entonces, zf es una matriz de vectores columna, de longitud max(length(a),length(b))-1, de tal forma que el número de columnas en zf equivale al número de columnas de x. Por ejemplo, considere la posibilidad de utilizar filter a lo largo de la segunda dimensión (dim = 2) de una matriz multidimensional x de 3-por-4-por-5. El array zf tiene tamaño [max(length(a),length(b))-1]-por-3-por-5.

Tipos de datos: double | single

Más acerca de

contraer todo

Función de transferencia racional

La relación de entrada-salida de la operación filter aplicada a un vector en el dominio de la transformada Z es una función de transferencia racional. Una función de transferencia racional es de la forma,

Y(z)=b(1)+b(2)z1+...+b(nb+1)znb1+a(2)z1+...+a(na+1)znaX(z),

que maneja los filtros FIR e IIR[1]. na es el orden de filtrado de retroalimentación, y nb es el orden de filtrado de prealimentación.

También puede expresar la función de transferencia racional como la siguiente ecuación en diferencias,

a(1)y(n)=b(1)x(n)+b(2)x(n1)+...+b(nb+1)x(nnb)a(2)y(n1)...a(na+1)y(nna).

Además, puede representar la función de transferencia racional utilizando su implementación transpuesta de forma directa II, como en el diagrama siguiente. Debido a la normalización, asuma a(1) = 1.

La operación de filter en el ejemplo m está dada por las ecuaciones en diferencias en el dominio temporal

y(m)=b(1)x(m)+w1(m1)w1(m)=b(2)x(m)+w2(m1)a(2)y(m)       =                 wn2(m)=b(n1)x(m)+wn1(m1)a(n1)y(m)wn1(m)=b(n)x(m)a(n)y(m).

Sugerencias

  • Si tiene el Signal Processing Toolbox™, puede diseñar un filtro, d, utilizando designfilt. A continuación, puede utilizar Y = filter(d,X) para filtrar los datos.

Referencias

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice-Hall, 1999.

Capacidades ampliadas

Consulte también

| | | |

Introducido antes de R2006a