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

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

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

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

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 el formato

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

que identifica tanto filtros de respuesta finita al impulso (FIR) como de respuesta infinita al impulso (IIR) [1]. En este caso, X(z) es la transformada Z de la señal de entrada x, Y(z) es la transformada Z de la señal de salida y, na es el orden del filtro feedback y nb es el orden del filtro feedforward. Debido a la normalización, suponga que a(1) = 1.

Para una señal discreta con L elementos, también puede expresar la función de transferencia racional como la ecuación de diferencia

a(1)y(L)=b(1)x(L)+b(2)x(L1)+...+b(nb+1)x(Lnb)a(2)y(L1)...a(na+1)y(Lna).

Asimismo, puede representar la función de transferencia racional utilizando su implementación traspuesta II de forma directa, como en el siguiente diagrama de un filtro IIR digital. En el diagrama, na = nb = n–1. Si las órdenes del filtro feedback y feedforward son diferentes o na ≠ nb, puede tratar los términos de orden superior como 0. Por ejemplo, para un filtro con a = [1,2] y b = [2,3,2,4], puede asumir que a = [1,2,0,0].

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 el punto de muestra m la proporcionan las ecuaciones de diferencias del dominio del 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).

De forma predeterminada, la función filter inicializa los retardos del filtro como cero, donde wk(0) = 0. Esta inicialización asume que las entradas y salidas pasadas son cero. Para incluir entradas pasadas distintas de cero en los datos presentes, especifique las condiciones iniciales de los datos presentes como retardos del filtro. Puede considerar que los retardos del filtro son las condiciones finales que se obtienen de aplicar la misma función de transferencia a las entradas pasadas (y las salidas pasadas). Puede especificar el cuarto argumento de entrada zi cuando se usa filter para establecer los retardos del filtro, donde wk(0) = zi(k). También puede especificar el segundo argumento de entrada zf cuando se usa filter para acceder a las condiciones finales, donde wk(L) = zf(k).

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

|