Main Content

filter

Filtrado digital 1D

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.

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.

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.

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 de tamaño mayor que 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 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 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 [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 descripción entrada-salida de la operación filter en un vector en el dominio de la transformada Z es una función de transferencia racional. Una función de transferencia racional tiene la forma

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

que identifica tanto filtros FIR como IIR [1]. na es el orden del filtro feedback y nb el orden del filtro feedforward. Debido a la normalización, suponga que a(1) = 1.

También puede expresar la función de transferencia racional como la ecuación de diferencia

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).

Asimismo, puede representar la función de transferencia racional utilizando su implementación traspuesta II de forma directa, como en el siguiente diagrama. En este caso, na = nb = n-1.

Block diagram that illustrates the direct-form II transposed implementation of an IIR digital filter with order n-1.

La operación de filter en la muestra m la proporcionan las ecuaciones de diferencia del dominio tiempo.

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

  • 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

Historial de versiones

Introducido antes de R2006a

Consulte también

|