Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

filtfilt

El filtrado digital de fase cero

Descripción

ejemplo

y = filtfilt(b,a,x) realiza el filtrado digital de fase cero procesando los datos de entrada, tanto en las direcciones hacia delante como hacia atrás.x Después de filtrar los datos en la dirección de avance, invierte la secuencia filtrada y la vuelve a ejecutar a través del filtro.filtfilt El resultado tiene las siguientes características:

  • Distorsión de fase cero.

  • Una función de transferencia de filtro igual a la magnitud cuadrada de la función de transferencia de filtro original.

  • Un orden de filtro que es el doble del orden del filtro especificado por y.ba

minimiza la puesta en marcha y la finalización de los transitorios haciendo coincidir las condiciones iniciales.filtfilt No utilizar con el diferenciador y los filtros FIR de Hilbert, porque el funcionamiento de estos filtros depende en gran medida de su respuesta de fase.filtfilt

y = filtfilt(sos,g,x) la fase cero filtra los datos de entrada, utilizando el filtro de sección de segundo orden (Biquad) representado por la matriz y los valores de escala.xsosg

y = filtfilt(d,x) la fase cero filtra los datos de entrada, utilizando un filtro digital.xd Se utiliza para generar según las especificaciones de frecuencia-respuesta.designfiltd

Ejemplos

contraer todo

El filtrado de fase cero ayuda a conservar las entidades en una forma de onda de tiempo filtrada exactamente donde se producen en la señal sin filtrar.

Para ilustrar el uso del filtrado de fase cero, considere la posibilidad de una forma de onda de electrocardiograma.filtfilt

wform = ecg(500);  plot(wform) axis([0 500 -1.25 1.25]) text(155,-0.4,'Q') text(180,1.1,'R') text(205,-1,'S')

El complejo QRS es una característica importante en el ECG. Aquí comienza alrededor del punto de tiempo 160.

Corrompe el ECG con ruido aditivo. Restablezca el generador de números aleatorios para obtener resultados reproducibles. Construya un filtro de equiripple FIR de paso bajo y filtre la forma de onda ruidosa utilizando tanto la fase cero como el filtrado convencional.

rng default  x = wform' + 0.25*randn(500,1); d = designfilt('lowpassfir', ...     'PassbandFrequency',0.15,'StopbandFrequency',0.2, ...     'PassbandRipple',1,'StopbandAttenuation',60, ...     'DesignMethod','equiripple'); y = filtfilt(d,x); y1 = filter(d,x);  subplot(2,1,1) plot([y y1]) title('Filtered Waveforms') legend('Zero-phase Filtering','Conventional Filtering')  subplot(2,1,2) plot(wform) title('Original Waveform')

El filtrado de fase cero reduce el ruido en la señal y preserva el complejo QRS al mismo tiempo que ocurre en el original. El filtrado convencional reduce el ruido en la señal, pero retrasa el complejo QRS.

Repite lo anterior usando un filtro de sección de segundo orden de Butterworth.

d1 = designfilt('lowpassiir','FilterOrder',12, ...     'HalfPowerFrequency',0.15,'DesignMethod','butter'); y = filtfilt(d1,x);  subplot(1,1,1) plot(x) hold on plot(y,'LineWidth',3) legend('Noisy ECG','Zero-Phase Filtering')

Argumentos de entrada

contraer todo

Coeficientes de función de transferencia, especificados como vectores. Si utiliza un filtro All-Pole, introduzca for.1b Si utiliza un filtro All-Zero (FIR), escriba for.1a

Ejemplo: y especifique un filtro Butterworth de tercer orden con una frecuencia normalizada de 3 dB de 0,5 π Rad/sample.b = [1 3 3 1]/6a = [3 0 1 0]/3

Tipos de datos: double

Señal de entrada, especificada como un vector, matriz o matriz N-D con valores reales o con valores complejos. opera a lo largo de la primera dimensión de matriz con un tamaño mayor que 1.filtfiltx

Ejemplo: es una señal de vector de fila de un solo canal.cos(pi/4*(0:159))+randn(1,160)

Ejemplo: es una señal de dos canales.cos(pi./[4;2]*(0:159))'+randn(160,2)

Tipos de datos: double
Soporte de números complejos:

Coeficientes de sección de segundo orden, especificados como una matriz. es una matriz de-por-6, donde el número de secciones,, debe ser mayor o igual que 2.sosKK Si el número de secciones es menor que 2, a continuación, trata la entrada como un vector de numerador.filtfilt Cada fila de corresponde a los coeficientes de un filtro de segundo orden (Biquad).sos La fila TH corresponde a.isos[bi(1) bi(2) bi(3) ai(1) ai(2) ai(3)]

Ejemplo: especifica un filtro Butterworth de tercer orden con una frecuencia normalizada de 3 dB de 0,5 π Rad/sample.s = [2 4 2 6 0 2;3 3 0 6 0 0]

Tipos de datos: double

Factores de escala, especificados como vector.

Tipos de datos: double

Filtro digital, especificado como objeto.digitalFilter Se utiliza para generar un filtro digital basado en las especificaciones de respuesta de frecuencia.designfilt

Ejemplo: especifica un filtro Butterworth de tercer orden con una frecuencia normalizada de 3 dB de 0,5 π Rad/sample.d = designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5)

Tipos de datos: double

Argumentos de salida

contraer todo

Señal filtrada, devuelta como vector, matriz o matriz N-D.

Referencias

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

[2] Mitra, Sanjit K. Digital Signal Processing. 2nd Ed. New York: McGraw-Hill, 2001.

[3] Gustafsson, F. “Determining the initial states in forward-backward filtering.” IEEE® Transactions on Signal Processing. Vol. 44, April 1996, pp. 988–992.

Capacidades ampliadas

Introducido antes de R2006a