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.

Introducción práctica al diseño de filtro digital

Este ejemplo muestra cómo diseñar filtros FIR e IIR basados en las especificaciones de respuesta de frecuencia utilizando la función en el producto Signal Processing Toolbox®.designfilt El ejemplo se concentra en los filtros de paso bajo, pero la mayoría de los resultados se aplican también 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

Lowpass Filter Specifications

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 de paso bajo FIR 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 suspensión (
<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 detención.

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

  • Practical FIR designs typically consist of filters that have a transition width and maximum passband and stopband ripples that do not exceed allowable values. In addition to those design specifications, one must select the filter order, or, equivalently, the length of the truncated impulse response.

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 de abajo.

El triángulo se utiliza para entender los grados de libertad disponibles al elegir las especificaciones de diseño. Debido a que la suma de los ángulos es fija, uno puede a lo más seleccionar los valores de dos de las especificaciones. La tercera especificación será determinada por el algoritmo de diseño en particular. Por otra parte, 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 pueden diseñarse para tener una fase lineal. No obstante, estos filtros pueden tener respuestas transitorias largas y pueden resultar costosos computacionalmente en ciertas aplicaciones.

Minimum-Order FIR Designs

Los diseños de orden mínima se obtienen especificando frecuencias de banda de paso y de banda de parada, así como una ondulación de banda de paso y una atenuación de banda de stopband. El algoritmo de diseño elige la longitud mínima de 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 stopband de 0.43 * PI Rad/sample (por lo tanto, el ancho de transición equivale a 0.06 * PI Rad/Sample), una ondulación de banda de paso de 1 dB y una atenuación de banda 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             '
    'Stopband Atten. : 30 dB                     '
    'Passband Ripple : 1 dB                      '
    'Stopband Edge   : 0.43                      '
    'Passband Edge   : 0.37                      '

  • The designfilt function chooses an equiripple design algorithm by default. Linear-phase equiripple filters are desirable because for a given order they have the smallest possible maximum deviation from the ideal filter.

Sin embargo, tenga en cuenta que los diseños de orden mínimo también se pueden obtener utilizando una ventana de Kaiser. Aunque el método de ventana de Kaiser produce un orden de filtro más grande para las mismas especificaciones, el algoritmo es menos costoso computacionalmente y menos probabilidades de 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 la banda de suspensión muy grande.

Diseñe un filtro con las mismas especificaciones que las anteriores utilizando el método de ventana de Kaiser y compare su respuesta con el filtro de 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 

Specifying Frequency Parameters in Hertz

Si conoce la frecuencia de muestreo a la que funcionará el filtro, puede especificar la frecuencia de muestreo y las frecuencias en hercios. Rediseñe el filtro equiripple 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);

Fixed Order, Fixed Transition Width

Los diseños de orden fijo son útiles para las 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 la anchura de la transición a expensas del control sobre la atenuación de la banda de paso ondulación/del stopband.

Considere un filtro FIR de paso bajo de orden 30-th 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: equiripple y mínimos cuadrados. Permítanos 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 la banda de suspensión 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 real) en el passband/stopband.

  • If you want to reduce the energy of a signal as much as possible in a certain frequency band, use a least-squares design.

En los ejemplos anteriores, los filtros diseñados tenían la misma ondulación en la banda de paso y en la banda de suspensión. Podemos usar pesas para reducir la ondulación en una de las bandas mientras mantenemos el orden de filtro fijo. Por ejemplo, si desea que la ondulación de banda de suspensión sea una décima parte de la que en la banda de paso, debe dar a la banda de parada diez veces el peso de la banda de paso. Rediseño del filtro de equiripple utilizando 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')

Fixed Order, Fixed Cutoff Frequency

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

  • You can use different windows to control the stopband attenuation while keeping the filter order unchanged.

Por ejemplo, considere un filtro FIR de paso bajo de orden 100-TH con una frecuencia de corte de 60 Hz y una frecuencia de muestreo de 1 kHz. Compare los diseños que resultan del uso de una ventana de Hamming y una ventana de Chebyshev con 90 dB de atenuación mínimos.

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 banda de stopband; ancho de transición fijo; y una frecuencia fija de media potencia (3dB).

Diseño de filtro 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 de filtro crece inversamente proporcional al ancho de transición. Mediante el uso de retroalimentación, 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 decae a cero.

  • IIR filters are useful when computational resources are at a premium. However, stable, causal IIR filters cannot have perfectly linear phase. Avoid IIR designs in cases where phase linearity is a requirement.

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

Butterworth Filters

Los filtros Butterworth son filtros IIR máximos planos. La planitud en la banda de paso y la banda de parada hace que la banda de transición sea muy amplia. 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, banda de paso máxima de 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');

Chebyshev Type I Filters

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

  • Butterworth and Chebyshev Type I filters both have maximally flat stopbands. For a given filter order, the tradeoff is between passband ripple and transition width.

Diseña un filtro Chebyshev tipo I con las mismas especificaciones que el filtro Butterworth.

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

Chebyshev Type II Filters

  • Chebyshev Type II filters have maximally flat passbands and equiripple stopbands.

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 una ondulación de banda de stopband.

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

Elliptic Filters

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

  • Elliptic filters attain a given transition width with the smallest order.

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.

  • For the same specification constraints, the Butterworth method yields the highest order and the elliptic method yields the smallest.

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]);

Matching Exactly the Passband or Stopband Specifications

Con los diseños de orden mínimo, el orden ideal debe redondearse al entero siguiente. Esta orden fraccionaria adicional permite que el algoritmo supere realmente las especificaciones.

  • Use the 'MatchExactly' parameter to constrain the design algorithm to match one band exactly. The other band exceeds its specification.

Por defecto, los diseños de Chebyshev tipo I coinciden con la banda de paso, Butterworth y Chebyshev tipo II coinciden con la banda de suspensión, y los diseños elípticas coinciden con la banda de paso y la banda de suspensión (mientras que se excede la frecuencia de borde de la banda stopband):

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 los diseños coincidentes tienen una ondulación de exactamente 1 dB en el valor de frecuencia de banda de paso de 100 Hz.

Group Delay Comparison

Con los filtros IIR, tenemos que considerar no sólo el equilibrio de ancho de onda/transición, sino también el grado de distorsión de fase. Sabemos que es imposible tener una fase lineal a lo largo de todo el intervalo Nyquist. Por lo tanto, es posible que queramos ver qué tan lejos de lineal está 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.

  • If phase is an issue, keep in mind that Butterworth and Chebyshev Type II designs have the flattest group delay and thus introduce the least distortion.

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

Conclusiones

En este ejemplo, aprendió a utilizar para obtener una variedad de filtros FIR y IIR de paso bajo con diferentes restricciones y métodos de diseño. también se puede utilizar para obtener los 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 filtro

Leer más

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