Contenido principal

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

filter

Filtrado digital 1D

Descripción

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.

Si a(1) no es igual a 1, filter normaliza los coeficientes del filtro con a(1). Por tanto, a(1) debe ser distinto de cero.

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

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

  • Si x es un arreglo multidimensional, filter actúa en la primera dimensión del arreglo cuyo tamaño no es igual a 1.

ejemplo

y = filter(b,a,x,zi) usa condiciones iniciales zi para los retardos del filtro. La longitud de zi debe ser igual a max(length(a),length(b))-1.

ejemplo

y = filter(b,a,x,zi,dim) actúa en 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(___) también devuelve las condiciones finales zf de los retardos del filtro, utilizando cualquiera de las sintaxis anteriores.

ejemplo

Ejemplos

contraer todo

Un filtro de media móvil es un método común utilizado para suavizar datos ruidosos. Este ejemplo utiliza la función filter para calcular medias en el vector de datos.

Cree un vector fila de 1 por 100 de datos sinusoidales que esté corrompido 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 windowSize a lo largo de los datos, calculando las medias de los datos contenidos en cada ventana. La siguiente ecuación de diferencia define un filtro de media móvil de un vector x:

y(n)=1windowSize(x(n)+x(n-1)+...+x(n-(windowSize-1))).

En un tamaño de ventana de 5, calcule los coeficientes del numerador y el denominador para 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 represéntela en comparación con los datos originales.

y = filter(b,a,x);

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

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Input Data, Filtered Data.

Este ejemplo filtra una matriz de datos con la siguiente función de transferencia racional.

H(z)=b(1)a(1)+a(2)z-1=11-0.2z-1

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 el denominador para la función de transferencia racional.

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

Aplique la función de transferencia en la segunda dimensión de x y devuelva el filtro digital 1D de cada fila. Represente la primera fila de los datos originales en comparación con 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')

Figure contains an axes object. The axes object with title First Row contains 2 objects of type line. These objects represent Input Data, Filtered Data.

Represente la segunda fila de los datos de entrada en comparación con los datos filtrados.

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

Figure contains an axes object. The axes object with title Second Row contains 2 objects of type line. These objects represent Input Data, Filtered Data.

Defina un filtro de media móvil con un tamaño de ventana de 3.

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

Encuentre la media móvil de 3 puntos de un vector fila de datos de 1 por 6.

x = [2 1 6 2 4 3];
y = filter(b,a,x)
y = 1×6

    0.6667    1.0000    3.0000    3.0000    4.0000    3.0000

De forma predeterminada, la función filter inicializa los retardos del filtro como cero, asumiendo que las entradas y salidas pasadas sean cero. En este caso, los dos primeros elementos de y son la media móvil de 3 puntos del primer elemento y los dos primeros elementos de x, respectivamente. En otras palabras, el primer elemento 0.6667 es la media de 3 puntos de 2 y el segundo elemento 1 es la media de 3 puntos de 2 y 1.

Para incluir entradas y salidas pasadas adicionales en los datos, especifique las condiciones iniciales como retardos del filtro. Estas condiciones iniciales para las entradas presentes son las condiciones finales que se obtienen de aplicar la misma función de transferencia a las entradas pasadas (y las salidas pasadas). Por ejemplo, incluya las entradas pasadas de [1 3]. Sin retardos del filtro, las salidas pasadas son (0+0+1)/3 y (0+1+3)/3.

x_past = [1 3];
y_past = filter(b,a,x_past)
y_past = 1×2

    0.3333    1.3333

No obstante, puede continuar aplicando la misma función de transferencia para generar más salidas distintas de cero, asumiendo que las colas de estas entradas pasadas sean cero. Estas otras entradas son (1+3+0)/3 y (3+0+0)/3, que representan las condiciones finales obtenidas de las entradas pasadas. Para calcular estas condiciones finales, especifique el segundo argumento de salida de la función filter.

[y_past,zf] = filter(b,a,x_past)
y_past = 1×2

    0.3333    1.3333

zf = 2×1

    1.3333
    1.0000

Para incluir las entradas pasadas en los datos presentes, especifique los retardos del filtro utilizando el cuarto argumento de entrada de la función filter. Utilice las condiciones finales de los datos pasados como condiciones iniciales para los datos presentes.

y = filter(b,a,x,zf)
y = 1×6

    2.0000    2.0000    3.0000    3.0000    4.0000    3.0000

En este caso, el primer elemento de y se convierte en la media móvil de 3 puntos de 1, 3 y 2, que es 2, y el segundo elemento de y se convierte en la media móvil de 3, 2 y 1, que es 2.

Utilice condiciones iniciales y finales para los retardos del filtro para filtrar datos en secciones, especialmente si se están considerando limitaciones de memoria.

Genere una secuencia de datos grande aleatoria y divídala 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 el denominador para la función de transferencia racional

H(z)=b(1)+b(2)z-1a(1)+a(2)z-1=2+3z-11+0.2z-1.

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

Filtre las subsecuencias x1 y x2 de una en una. Genere las condiciones finales del filtrado x1 para almacenar el estado interno del filtro en el extremo final del primer segmento.

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

Utilice las condiciones finales del filtrado x1 como condiciones iniciales para filtrar el segundo segmento x2.

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

y1 son los datos filtrados de x1 e y2 son los datos filtrados de x2. Toda la secuencia filtrada es la concatenación vertical de y1 e y2.

Filtre la secuencia completa simultáneamente para hacer una comparación.

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 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 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 arreglo multidimensional.

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

Condiciones iniciales para los retardos del filtro, especificadas como vector, matriz o arreglo multidimensional.

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

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

El valor predeterminado, especificado por [], inicializa todos los retardos de filtro en cero.

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

Dimensión en la que operar, especificada como escalar entero positivo. Si no especifica la dimensión, el valor predeterminado es la primera dimensión del arreglo cuyo tamaño no es igual a 1.

Considere un arreglo de entrada bidimensional, x.

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

    filter(b,a,x,zi,1) column-wise operation

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

    filter(b,a,x,zi,2) row-wise operation

Si dim es mayor que ndims(x), filter considera que x tiene dimensiones adicionales hasta dim con tamaños de 1. Por ejemplo, si x es una matriz con un tamaño de 2 por 3 y dim = 3, filter opera a lo largo de la tercera dimensión de x como si tuviera el tamaño de 2 por 3 por 1.

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 arreglo multidimensional del mismo tamaño que los datos de entrada x.

Si x es del tipo single, filter calcula de forma nativa en precisión simple e y es también del tipo single. De lo contrario, y se devuelve como tipo double.

Tipos de datos: double | single

Condiciones finales para los retardos del filtro, devueltas como vector, matriz o arreglo multidimensional.

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

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

Tipos de datos: double | single

Más acerca de

contraer todo

Sugerencias

  • Para usar la función filter con los coeficientes b de un filtro FIR, utilice y = filter(b,1,x).

  • Si tiene Signal Processing Toolbox™, utilice y = filter(d,x) para filtrar una señal de entrada x con un objeto digitalFilter (Signal Processing Toolbox) d. Para generar d basándose en las especificaciones de respuesta-frecuencia, utilice designfilt (Signal Processing Toolbox).

  • Consulte Filtrado digital (Signal Processing Toolbox) para obtener más información sobre funciones de filtrado.

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

expandir todo

Historial de versiones

Introducido antes de R2006a