filter
Filtrado digital 1D
Descripción
filtra los datos de entrada y
= filter(b
,a
,x
)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 quex
.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.
Ejemplos
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 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 :
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.
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
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
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: Sí
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: Sí
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: Sí
Condiciones iniciales para los retardos del filtro, especificadas como vector, matriz o arreglo multidimensional.
Si
zi
es un vector, su longitud debe sermax(length(a),length(b))-1
.Si
zi
es una matriz o un arreglo multidimensional, el tamaño de la primera dimensión debe sermax(length(a),length(b))-1
. El tamaño de cada dimensión restante debe coincidir con el tamaño de la dimensión correspondiente dex
. Por ejemplo, considere utilizarfilter
en la segunda dimensión (dim = 2
) de un arreglo de 3 por 4 por 5x
. El arreglozi
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: Sí
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 dex
y devuelve el filtro aplicado a cada columna.Si
dim = 2
,filter(b,a,x,zi,2)
opera en las filas dex
y devuelve el filtro aplicado a cada fila.
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
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 longitudmax(length(a),length(b))-1
.Si
x
es una matriz o un arreglo multidimensional,zf
es un arreglo de vectores columna de longitudmax(length(a),length(b))-1
, de forma que el número de columnas dezf
equivale al número de columnas dex
. Por ejemplo, considere utilizarfilter
en la segunda dimensión (dim = 2
) de un arreglo de 3 por 4 por 5x
. El arreglozf
tiene el tamaño de[max(length(a),length(b))-1]
por 3 por 5.
Tipos de datos: double
| single
Más acerca de
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
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
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]
.
La operación de filter
en el punto de muestra m la proporcionan las ecuaciones de diferencias del dominio del tiempo
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 coeficientesb
de un filtro FIR, utilicey = filter(b,1,x)
.Si tiene Signal Processing Toolbox™, utilice
y = filter(d,x)
para filtrar una señal de entradax
con un objetodigitalFilter
(Signal Processing Toolbox)d
. Para generard
basándose en las especificaciones de respuesta-frecuencia, utilicedesignfilt
(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
La función filter
es compatible con arreglos altos con las siguientes notas y limitaciones de uso:
La sintaxis
[y,zf] = filter(___)
de dos salidas no es compatible cuandodim > 1
.Cuando utiliza
y = filter(d,x)
con un objetodigitalFilter
(Signal Processing Toolbox)d
, la funciónfilter
no admite arreglos altos para la señal de entradax
.
Para obtener más información, consulte Arreglos altos.
Notas y limitaciones de uso:
Para los argumentos de entrada
b
ya
:Debe especificar el vector de entrada como un vector de tamaño fijo o de longitud variable en el tiempo de generación del código. La primera o la segunda dimensión del vector pueden ser de tamaño variable. El resto de dimensiones debe tener un tamaño fijo de 1.
Para el argumento de entrada
x
:Si no especifica ninguna dimensión, el generador de código opera en la primera dimensión del arreglo de entrada que sea de tamaño variable o cuyo tamaño no sea igual a 1. Si esta dimensión es de tamaño variable en el tiempo de generación del código y tiene el valor 1 en el tiempo de ejecución, puede producirse un error en el tiempo de ejecución. Para evitar este error, especifique la dimensión.
Si se utiliza, el argumento
dim
debe ser una constante en el tiempo de generación del código.
Notas y limitaciones de uso:
Los argumentos
b
ya
deben ser vectores en el tiempo de generación del código. Esto significa que al menos una de las dos primeras dimensiones de cada argumento deben tener un tamaño fijo de 1.Argumento de salida
Si no especifica ninguna dimensión, el generador de código opera en la primera dimensión del arreglo de entrada que sea de tamaño variable o cuyo tamaño no sea igual a 1. Si esta dimensión es de tamaño variable en el tiempo de generación del código y tiene el valor 1 en el tiempo de ejecución, puede producirse un error en el tiempo de ejecución. Para evitar este error, especifique la dimensión.
Si se utiliza, el argumento
dim
debe ser una constante en el tiempo de generación del código.
Esta función es totalmente compatible con entornos basados en subprocesos. Para obtener más información, consulte Ejecutar funciones de MATLAB en entornos basados en subprocesos.
La función filter
es totalmente compatible con los arreglos de GPU. Para ejecutar la función en una GPU, especifique los datos de entrada como un gpuArray
(Parallel Computing Toolbox). Para obtener más información, consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
También puede aplicar un filtro digital 1D en la GPU utilizando la sintaxis y = filter(d,x)
, donde d
es un objeto digitalFilter
(Signal Processing Toolbox) y x
es un objeto gpuArray
. No es necesario convertir los coeficientes del objeto digitalFilter
en un objeto gpuArray
.
Esta función es totalmente compatible con los arreglos distribuidos. Para obtener más información, consulte Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Historial de versiones
Introducido antes de R2006a
Consulte también
Temas
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)