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
Filtro de media móvil
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')
Filtrar filas de una matriz
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')
Especificar las condiciones iniciales
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.
Filtrar datos en secciones
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
b
— Coeficientes del numerador de una función de transferencia racional
vector
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í
a
— Coeficientes del denominador de una función de transferencia racional
vector
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í
x
— Datos de entrada
vector | matriz | arreglo multidimensional
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í
zi
— Condiciones iniciales para los retardos del filtro
[]
(predeterminado) | vector | matriz | arreglo multidimensional
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í
dim
— Dimensión en la que operar
escalar entero positivo
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 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
y
— Datos filtrados
vector | matriz | arreglo multidimensional
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
zf
— Condiciones finales para los retardos del filtro
vector | matriz | arreglo multidimensional
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
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
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
Arreglos altos
Realice cálculos con arreglos que tienen más filas de las que caben en la memoria.
Notas y limitaciones de uso:
La sintaxis [y,zf] = filter(___)
de dos salidas no es compatible cuando dim > 1
.
Para obtener más información, consulte Arreglos altos.
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Notas y limitaciones de uso:
Si se proporciona,
dim
debe ser una constante.Consulte Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder).
Generación de código de GPU
Genere código CUDA® para GPU NVIDIA® mediante GPU Coder™.
Notas y limitaciones de uso:
Si se proporciona,
dim
debe ser una constante.Consulte Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder).
Entorno basado en subprocesos
Ejecute código en segundo plano con MATLAB® backgroundPool
o acelere código con Parallel Computing Toolbox™ ThreadPool
.
Esta función es totalmente compatible con entornos basados en subprocesos. Para obtener más información, consulte Ejecutar funciones de MATLAB en un entorno basado en subprocesos.
Arreglos GPU
Acelere código mediante la ejecución en una unidad de procesamiento gráfico (GPU) mediante Parallel Computing Toolbox™.
Notas de uso:
y = filter(d,x)
es compatible con el objetodigitalFilter
d
y la entradagpuArray
x
. En el caso de los filtros IIR, los objetosdigitalFilter
almacenan coeficientes de filtro como matriz de secciones de segundo orden (SOS). En el caso de una entradagpuArray
, no es necesario convertir la matriz SOS a ungpuArray
.
Para obtener más información, consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Arreglos distribuidos
Realice particiones de arreglos grandes por toda la memoria combinada de su cluster mediante Parallel Computing Toolbox™.
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
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)