Main Content

La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.

filtfilt

Filtrado digital de fase cero

Descripción

ejemplo

y = filtfilt(b,a,x) realiza filtrado digital de fase cero procesando los datos de entrada, x, tanto en dirección directa como inversa. Después de filtrar los datos en dirección directa, filtfilt invierte la secuencia filtrada y la vuelve a pasar por el filtro. El resultado tiene las características siguientes:

  • Distorsión de fase cero.

  • Una función de transferencia de filtro igual a la magnitud al cuadrado de la función de transferencia del filtro original.

  • Un orden del filtro que es el doble del orden de filtro que especifican b y a.

filtfilt minimiza los transitorios de inicio y final estableciendo una correspondencia con las condiciones iniciales. No utilice filtfilt con filtros FIR diferenciadores y de Hilbert, porque el funcionamiento de esos filtros depende en gran medida de su respuesta de fase.

y = filtfilt(sos,g,x) filtra de fase cero los datos de entrada, x, utilizando el filtro de la sección de segundo orden (bicuadrado) que la matriz sos y los valores g representan.

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

Ejemplos

contraer todo

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

Utilice filtfilt para filtrar de fase cero una forma de onda de un electrocardiograma (ECG) sintético. La función que genera la forma de onda se encuentra al final del ejemplo. El complejo QRS es una característica importante del ECG. Aquí, comienza alrededor del punto de tiempo 160.

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

Figure contains an axes object. The axes object contains 4 objects of type line, text.

Corrompa el ECG con ruido aditivo. Reinicie el generador de números aleatorios para obtener resultados reproducibles. Construya un filtro FIR equiripple de paso bajo y filtre la forma de onda con ruido utilizando tanto el filtrado de fase cero como el 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')

Figure contains 2 axes objects. Axes object 1 with title Filtered Waveforms contains 2 objects of type line. These objects represent Zero-phase Filtering, Conventional Filtering. Axes object 2 with title Original Waveform contains an object of type line.

El filtrado de fase cero reduce el ruido de la señal y mantiene el complejo QRS en el mismo momento en el que se produce en la original. El filtrado convencional reduce el ruido de la señal pero demora el complejo QRS.

Repita lo anterior utilizando un filtro de la 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')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Noisy ECG, Zero-Phase Filtering.

Esta es la función que genera la forma de onda del ECG.

function x = ecg(L)
%ECG Electrocardiogram (ECG) signal generator.
%   ECG(L) generates a piecewise linear ECG signal of length L.
%
%   EXAMPLE:
%   x = ecg(500).';
%   y = sgolayfilt(x,0,3); % Typical values are: d=0 and F=3,5,9, etc. 
%   y5 = sgolayfilt(x,0,5); 
%   y15 = sgolayfilt(x,0,15); 
%   plot(1:length(x),[x y y5 y15]);

%   Copyright 1988-2002 The MathWorks, Inc.

a0 = [0,1,40,1,0,-34,118,-99,0,2,21,2,0,0,0]; % Template
d0 = [0,27,59,91,131,141,163,185,195,275,307,339,357,390,440];
a = a0 / max(a0);
d = round(d0 * L / d0(15)); % Scale them to fit in length L
d(15)=L;

for i=1:14,
       m = d(i) : d(i+1) - 1;
       slope = (a(i+1) - a(i)) / (d(i+1) - d(i));
       x(m+1) = a(i) + slope * (m - d(i));
end

end

Argumentos de entrada

contraer todo

Coeficientes de la función de transferencia, especificados como vectores. Si utiliza un filtro de todos los polos, introduzca 1 para b. Si utiliza un filtro (FIR) cero, introduzca 1 para a.

Ejemplo: b = [1 3 3 1]/6 y a = [3 0 1 0]/3 especifican un filtro Butterworth de tercer orden con una frecuencia de 3 dB normalizados de 0,5π rad/muestra.

Tipos de datos: double

Señal de entrada, especificada como un vector con valor real o complejo, matriz o arreglo N-D. x debe tener un valor finito. filtfilt opera en la dimensión del primer arreglo de x con un tamaño mayor que 1.

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

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

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

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

Ejemplo: s = [2 4 2 6 0 2;3 3 0 6 0 0] especifica un filtro Butterworth de tercer orden con 3 dB normalizados de frecuencia 0,5π rad/muestra.

Tipos de datos: double

Factores de escala, especificados como vector.

Tipos de datos: double

Filtro digital, especificado como un objeto digitalFilter. Utilice designfilt para generar un filtro digital según las especificaciones de frecuencia-respuesta.

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

Tipos de datos: double

Argumentos de salida

contraer todo

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

Referencias

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

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

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

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a