Main Content

Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

Introducción práctica al diseño de filtros digitales

En este ejemplo se muestra cómo diseñar filtros FIR e IIR basados en especificaciones de respuesta de frecuencia mediante la función de la caja de herramientas de procesamiento de señales® producto.designfilt El ejemplo se concentra en filtros de paso bajo, pero la mayoría de los resultados también se aplican a otros tipos de respuesta.

Este ejemplo se centra en el diseño de filtros digitales en lugar de en sus aplicaciones. Si desea obtener más información sobre las aplicaciones de filtro digital, consulte el ejemplo.Introducción práctica al filtrado digital

Diseño de filtro FIR

Especificaciones del filtro Lowpass

El filtro de paso bajo ideal es aquel que deja sin cambios todos los componentes de frecuencia de una señal por debajo de una frecuencia de corte designada,

<math display="block">
<mrow>
<msub>
<mrow>
<mi>ω</mi>
</mrow>
<mrow>
<mi>c</mi>
</mrow>
</msub>
</mrow>
</math>
, y rechaza todos los componentes anteriores
<math display="block">
<mrow>
<msub>
<mrow>
<mi>ω</mi>
</mrow>
<mrow>
<mi>c</mi>
</mrow>
</msub>
</mrow>
</math>
. Debido a que la respuesta de impulso necesaria para implementar el filtro de paso bajo ideal es infinitamente larga, es imposible diseñar un filtro FIR lowpass ideal. Las aproximaciones de longitud finita a la respuesta de impulso ideal conducen a la presencia de ondas en la banda de paso (
<math display="block">
<mrow>
<mi>ω</mi>
<mo><</mo>
<msub>
<mrow>
<mi>ω</mi>
</mrow>
<mrow>
<mi>c</mi>
</mrow>
</msub>
</mrow>
</math>
) y la banda de parada (
<math display="block">
<mrow>
<mi>ω</mi>
<mo>></mo>
<msub>
<mrow>
<mi>ω</mi>
</mrow>
<mrow>
<mi>c</mi>
</mrow>
</msub>
</mrow>
</math>
) del filtro, así como a un ancho de transición distinto de cero entre la banda de paso y la banda de parada.

Tanto las ondas de banda de paso/banda de parada como la anchura de transición son desviaciones indeseables pero inevitables de la respuesta de un filtro de paso bajo ideal cuando se aproxima con una respuesta de impulso finito. Estas desviaciones se describen en la siguiente figura:

  • Los diseños prácticos de FIR suelen consistir en filtros que tienen un ancho de transición y ondas máximas de banda de paso y banda de parada que no superan los valores permitidos. Además de esas especificaciones de diseño, se debe seleccionar el orden del filtro o, equivalentemente, la longitud de la respuesta de impulso truncada.

Una metáfora útil para las especificaciones de diseño en el diseño del filtro es pensar en cada especificación como uno de los ángulos en el triángulo que se muestra en la figura siguiente.

El triángulo se utiliza para comprender los grados de libertad disponibles al elegir las especificaciones de diseño. Debido a que la suma de los ángulos es fija, a lo sumo se pueden seleccionar los valores de dos de las especificaciones. La tercera especificación será determinada por el algoritmo de diseño en particular. Además, al igual que con los ángulos en un triángulo, si hacemos una de las especificaciones más grande / más pequeño, afectará a una o ambas de las otras especificaciones.

Los filtros FIR son muy atractivos porque son inherentemente estables y se pueden diseñar para tener fase lineal. Sin embargo, estos filtros pueden tener respuestas transitorias largas y pueden resultar costosas desde el punto de vista computacional en ciertas aplicaciones.

Diseños FIR de pedido mínimo

Los diseños de orden mínimo se obtienen especificando frecuencias de banda de paso y banda de parada, así como una ondulación de banda de paso y una atenuación de banda de parada. A continuación, el algoritmo de diseño elige la longitud mínima del filtro que cumple con las especificaciones.

Diseñe un filtro FIR de paso bajo de orden mínimo con una frecuencia de banda de paso de 0,37*pi rad/sample, una frecuencia de banda de parada de 0,43*pi rad/sample (por lo tanto, el ancho de transición es igual a 0,06*pi rad/sample), una ondulación de banda de paso de 1 dB y una atenuación de banda de parada de 30 dB.

Fpass = 0.37;  Fstop = 0.43; Ap = 1; Ast = 30;  d = designfilt('lowpassfir','PassbandFrequency',Fpass,...   'StopbandFrequency',Fstop,'PassbandRipple',Ap,'StopbandAttenuation',Ast);  hfvt = fvtool(d);

El orden de filtro resultante se puede consultar mediante la función.filtord

N = filtord(d)
N = 39 

Puede utilizar la función para obtener información sobre los parámetros utilizados para diseñar el filtroinfo

info(d)
ans = 17x44 char array
    'FIR Digital Filter (real)                   '
    '-------------------------                   '
    'Filter Length  : 40                         '
    'Stable         : Yes                        '
    'Linear Phase   : Yes (Type 2)               '
    '                                            '
    'Design Method Information                   '
    'Design Algorithm : Equiripple               '
    '                                            '
    'Design Specifications                       '
    'Sample Rate     : N/A (normalized frequency)'
    'Response        : Lowpass                   '
    'Specification   : Fp,Fst,Ap,Ast             '
    'Passband Ripple : 1 dB                      '
    'Stopband Edge   : 0.43                      '
    'Passband Edge   : 0.37                      '
    'Stopband Atten. : 30 dB                     '

  • el designfilt función elige un algoritmo de diseño equisioso de forma predeterminada. Los filtros equisisisisivas de fase lineal son deseables porque para un orden dado tienen la menor desviación máxima posible del filtro ideal.

Tenga en cuenta, sin embargo, que los diseños de pedido mínimo también se pueden obtener utilizando una ventana Kaiser. A pesar de que el método de ventana Kaiser produce un orden de filtro más grande para las mismas especificaciones, el algoritmo es menos costoso computacionalmente y menos propenso a tener problemas de convergencia cuando las especificaciones de diseño son muy estrictas. Esto puede ocurrir si la aplicación requiere un ancho de transición muy estrecho o una atenuación de banda de parada muy grande.

Diseñe un filtro con las mismas especificaciones que las anteriores utilizando el método de ventana Kaiser y compare su respuesta con el filtro equiripple.

dk = designfilt('lowpassfir','PassbandFrequency',Fpass,...   'StopbandFrequency',Fstop,'PassbandRipple',Ap,...   'StopbandAttenuation',Ast, 'DesignMethod', 'kaiserwin');  addfilter(hfvt,dk); legend(hfvt,'Equiripple design', 'Kaiser window design')

 N = filtord(dk)
N = 52 

Especificación de parámetros de frecuencia en hertzios

Si conoce la frecuencia de muestreo a la que operará el filtro, puede especificar la frecuencia de muestreo y las frecuencias en hercios. Rediseñar el filtro equisiondel de orden mínimo para una frecuencia de muestreo de 2 kHz.

Fpass = 370; Fstop = 430; Ap = 1; Ast = 30; Fs = 2000;   d = designfilt('lowpassfir','PassbandFrequency',Fpass,...   'StopbandFrequency',Fstop,'PassbandRipple',Ap,...   'StopbandAttenuation',Ast,'SampleRate',Fs);    hfvt = fvtool(d);

Orden fija, anchura de transición fija

Los diseños de orden fijo son útiles para aplicaciones que son sensibles a la carga computacional o imponen un límite en el número de coeficientes de filtro. Una opción es fijar el ancho de transición a expensas del control sobre la atenuación de ondulación/banda de parada de banda de paso.

Considere un filtro FIR de paso bajo de 30o orden con una frecuencia de banda de paso de 370 Hz, una frecuencia de banda de parada de 430 Hz y una frecuencia de muestreo de 2 kHz. Hay dos métodos de diseño disponibles para este conjunto particular de especificaciones: equision y mínimos cuadrados. Vamos a diseñar un filtro para cada método y comparar los resultados.

N = 30; Fpass = 370; Fstop = 430; Fs = 2000;   % Design method defaults to 'equiripple' when omitted deq = designfilt('lowpassfir','FilterOrder',N,'PassbandFrequency',Fpass,...   'StopbandFrequency',Fstop,'SampleRate',Fs);  dls = designfilt('lowpassfir','FilterOrder',N,'PassbandFrequency',Fpass,...   'StopbandFrequency',Fstop,'SampleRate',Fs,'DesignMethod','ls');  hfvt = fvtool(deq,dls); legend(hfvt,'Equiripple design', 'Least-squares design')

Los filtros Equiripple son ideales para aplicaciones en las que se debe cumplir una tolerancia específica, como el diseño de un filtro con una atenuación mínima de banda de parada determinada o una ondulación de banda de paso máxima dada. Por otro lado, estos diseños pueden no ser deseables si queremos minimizar la energía del error (entre el filtro ideal y el filtro real) en la banda de paso/banda de parada.

  • Si desea reducir la energía de una señal tanto como sea posible en una determinada banda de frecuencia, utilice un diseño de mínimos cuadrados.

En los ejemplos anteriores, los filtros diseñados tenían la misma ondulación en la banda de paso y en la banda de parada. Podemos usar pesas para reducir la ondulación en una de las bandas mientras mantenemos el orden del filtro fijo. Por ejemplo, si desea que la ondulación de la banda de parada sea una décima parte de la de la banda de paso, debe dar a la banda de parada diez veces el peso de la banda de paso. Rediseñar el filtro equisiosioactivo usando ese hecho.

deqw = designfilt('lowpassfir','FilterOrder',N,'PassbandFrequency',Fpass,...   'StopbandFrequency',Fstop,'SampleRate',Fs,...   'PassbandWeight',1,'StopbandWeight',10);  hfvt = fvtool(deq,deqw); legend(hfvt,'Equiripple design', 'Equiripple design with weighted stopband')

Orden fija, frecuencia de corte fija

Puede diseñar filtros con orden de filtro fijo y frecuencia de corte mediante un método de diseño de ventana.

  • Puede utilizar diferentes ventanas para controlar la atenuación de la banda de parada mientras mantiene el orden del filtro sin cambios.

Por ejemplo, considere un filtro FIR de paso bajo de 100o orden con una frecuencia de corte de 60 Hz y una frecuencia de muestreo de 1 kHz. Compare los diseños resultantes del uso de una ventana Hamming y una ventana Chebyshev con 90 dB de atenuación de lóbulo lateral.

dhamming = designfilt('lowpassfir','FilterOrder',100,'CutoffFrequency',60,...   'SampleRate',1000,'Window','hamming');  dchebwin = designfilt('lowpassfir','FilterOrder',100,'CutoffFrequency',60,...   'SampleRate',1000,'Window',{'chebwin',90});  hfvt = fvtool(dhamming,dchebwin); legend(hfvt,'Hamming window', 'Chebyshev window')

Hay otras formas en las que puede especificar un filtro con orden fijo: frecuencia de corte fija, ondulación de banda de paso y atenuación de la banda de parada; ancho de transición fijo; y la frecuencia fija de media potencia (3dB).

Diseño de filtros IIR

Uno de los inconvenientes de los filtros FIR es que requieren un orden de filtro grande para cumplir con algunas especificaciones de diseño. Si las ondas se mantienen constantes, el orden del filtro crece inversamente proporcional al ancho de transición. Mediante el uso de comentarios, es posible cumplir con un conjunto de especificaciones de diseño con un orden de filtro mucho más pequeño. Esta es la idea detrás del diseño del filtro IIR. El término "respuesta de impulso infinito" (IIR) se deriva del hecho de que, cuando se aplica un impulso al filtro, la salida nunca se descompone a cero.

  • Los filtros IIR son útiles cuando los recursos computacionales están en una prima. Sin embargo, los filtros IIR estables y causales no pueden tener una fase perfectamente lineal. Evite los diseños IIR en los casos en que la linealidad de fase sea un requisito.

Otra razón importante para usar filtros IIR es su retardo de grupo pequeño en relación con los filtros FIR, lo que resulta en una respuesta transitoria más corta.

Filtros Butterworth

Los filtros Butterworth son filtros IIR más planos. La planitud en la banda de paso y la banda de parada hace que la banda de transición sea muy ancha. Se requieren pedidos grandes para obtener filtros con anchos de transición estrechos.

Diseñe un filtro Butterworth de orden mínimo con frecuencia de banda de paso 100 Hz, frecuencia de banda de parada 300 Hz, ondulación máxima de banda de paso 1 dB y atenuación de banda de parada de 60 dB. La frecuencia de muestreo es de 2 kHz.

Fp = 100; Fst = 300; Ap = 1; Ast = 60; Fs = 2e3;  dbutter = designfilt('lowpassiir','PassbandFrequency',Fp,...   'StopbandFrequency',Fst,'PassbandRipple',Ap,...   'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','butter');

Filtros Chebyshev Tipo I

Los filtros Chebyshev Tipo I alcanzan anchos de transición más pequeños que los filtros Butterworth del mismo orden al permitir la ondulación de banda de paso.

  • Los filtros Butterworth y Chebyshev Type I tienen bandas de parada máximamente planas. Para una orden de filtro determinada, el equilibrio es entre la ondulación de banda de paso y el ancho de transición.

Diseñe un filtro Chebyshev Tipo I con las mismas especificaciones que el filtro Butterworth anterior.

dcheby1 = designfilt('lowpassiir','PassbandFrequency',Fp,...   'StopbandFrequency',Fst,'PassbandRipple',Ap,...   'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','cheby1');

Filtros Chebyshev Tipo II

  • Los filtros Chebyshev Tipo II tienen bandas de paso máximamente planas y bandas de parada equisiosilizadas.

Dado que las atenuaciones extremadamente grandes normalmente no son necesarias, es posible que podamos alcanzar el ancho de transición requerido con un orden relativamente pequeño al permitir alguna ondulación de banda de parada.

Diseñe un filtro Chebyshev Tipo II de orden mínimo con las mismas especificaciones que en los ejemplos anteriores.

dcheby2 = designfilt('lowpassiir','PassbandFrequency',Fp,...   'StopbandFrequency',Fst,'PassbandRipple',Ap,...   'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','cheby2');

Filtros elípticos

Los filtros elípticos generalizan los filtros Chebyshev y Butterworth al permitir ondulación tanto en la banda de paso como en la banda de parada. A medida que las ondas se hacen más pequeñas, los filtros elípticos pueden aproximarse arbitrariamente a cerrar la magnitud y la respuesta de fase de los filtros Chebyshev o Butterworth.

  • Los filtros elípticos alcanzan un ancho de transición determinado con el orden más pequeño.

dellip = designfilt('lowpassiir','PassbandFrequency',Fp,...   'StopbandFrequency',Fst,'PassbandRipple',Ap,...   'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','ellip');

Compare la respuesta y el orden de los cuatro filtros IIR.

  • Para las mismas restricciones de especificación, el método Butterworth produce el orden más alto y el método elíptico produce el más pequeño.

FilterOrders = [filtord(dbutter) filtord(dcheby1) filtord(dcheby2) filtord(dellip)]
FilterOrders = 1×4

     7     5     5     4

hfvt = fvtool(dbutter,dcheby1,dcheby2,dellip); axis([0 1e3 -80 2]); legend(hfvt,'Butterworth', 'Chebyshev Type I',...   'Chebyshev Type II','Elliptic')

Amplíe la banda de paso para ver las diferencias de ondulación.

axis([0 150 -3 2]);

Coincidiendo exactamente con las especificaciones de Passband o Stopband

Con diseños de orden mínimo, el orden ideal debe redondearse al siguiente entero. Este orden fraccionario adicional permite que el algoritmo exceda realmente las especificaciones.

  • Utilice el 'MatchExactly' para restringir el algoritmo de diseño para que coincida exactamente con una banda. La otra banda supera su especificación.

Por abandono, los diseños de Chebyshev Tipo I coinciden con la banda de paso, Butterworth y Chebyshev Tipo II coinciden con la banda de parada, y los diseños elípticos coinciden con la banda de paso y la banda de parada (mientras que se supera la frecuencia del borde de la banda de parada):

dellip1 = designfilt('lowpassiir','PassbandFrequency',Fp,...   'StopbandFrequency',Fst,'PassbandRipple',Ap,...   'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','ellip',...   'MatchExactly','passband');  dellip2 = designfilt('lowpassiir','PassbandFrequency',Fp,...   'StopbandFrequency',Fst,'PassbandRipple',Ap,...   'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','ellip',...   'MatchExactly','stopband');  hfvt = fvtool(dellip, dellip1, dellip2); legend(hfvt,'Matched passband and stopband','Matched passband',...   'Matched stopband'); axis([0 1e3 -80 2]);

La banda de paso coincidente y ambos diseños emparejados tienen una ondulación de exactamente 1 dB en el valor de frecuencia de banda de paso de 100 Hz.

Comparación de retrasos de grupo

Con los filtros IIR, tenemos que considerar no sólo el equilibrio de ancho de ondulación/transición, sino también el grado de distorsión de fase. Sabemos que es imposible tener fase lineal a lo largo de todo el intervalo Nyquist. Por lo tanto, es posible que deseemos ver qué tan lejos de lineal es la respuesta de fase. Una buena manera de hacer esto es mirar el retardo de grupo (idealmente constante) y ver lo plano que es.

Compare el retardo de grupo de los cuatro filtros IIR diseñados anteriormente.

  • Si la fase es un problema, tenga en cuenta que los diseños Butterworth y Chebyshev Tipo II tienen el retraso del grupo más plano y, por lo tanto, introducen la menor distorsión.

hfvt = fvtool(dbutter,dcheby1,dcheby2,dellip,'Analysis','grpdelay'); legend(hfvt,'Butterworth', 'Chebyshev Type I',...   'Chebyshev Type II','Elliptic')

Conclusiones

En este ejemplo, aprendió a usar para obtener una variedad de filtros FIR e IIR de paso bajo con diferentes restricciones y métodos de diseño. también se puede utilizar para obtener diseños de paso alto, paso de banda, bandstop, magnitud arbitraria, diferenciador y Hilbert.designfiltdesignfilt Consulte el ejemplo y la documentación para obtener más información sobre todas las opciones disponibles.Galería de diseño de filtros

Lectura adicional

Para obtener más información sobre el diseño y el análisis de filtros, consulte la documentación del software ® de la caja de herramientas de procesamiento de señales. Para obtener más información sobre las aplicaciones de filtro, consulte el ejemplo.Introducción práctica al filtrado digital