1 PROCESAMIENTO DIGITAL DE SEÑALES LABORATORIO 3 – FILTROS IRR Y FIR Francisco José Pantoja Zapata Pontificia Universidad Javeriana Cali Ingeniería Electrónica Cali, Colombia pantojazapata@javerianacali.edu.co Resumen – En este informe de laboratorio, se exponen los resultados de aplicar las técnicas de filtros FIR, específicamente filtros por ventanas y la aproximación de Chebyshev, con el fin de eliminar el ruido provocado por insectos, en una grabación del canto de un ave. Además, se realiza el mismo procedimiento, pero con ayuda de un filtro IRR con la técnica de transformación bilineal. I. Cristian Urbano Pontificia Universidad Javeriana Cali Ingeniería Electrónica Cali, Colombia @javerianacali.edu.co 3. Realizar el filtro usando la tecnología digital más adecuada para la aplicación bajo consideración. El paso 1 es altamente dependiente de la aplicación y de los detalles suministrados por el usuario. El paso 2 se realiza utilizando métodos de aproximación y optimización matemáticos. El paso 3 depende de la tecnología hardware y software utilizada para construir el filtro INTRODUCCIÓN Los filtros digitales se utilizan ampliamente en el tratamiento digital de señales provenientes de diversas aplicaciones, que incluyen tratamiento y transmisión de señales de voz, datos y vídeo entre otras. Los filtros LTI (Lineales e invariantes en el tiempo) son los que se utilizan frecuentemente debido a la simplicidad en el análisis, diseño e implementación. Un filtro digital LTI puede identificarse de forma ´única en el dominio tiempo/espacio por su respuesta impulsiones h(n), (donde, n es un ´índice entero que se utiliza como variable independiente). De forma alterna, los filtros digitales pueden caracterizarse de forma ´única en el dominio frecuencial por su respuesta en frecuencia H(ω) (donde, ω es la variable de frecuencia de valor real en radianes). Los filtros digitales LTI son de dos tipos: Filtros FIR (Finite-duration Impulse Response, para los cuales la respuesta impulsional h(n) es diferente de cero para un número finito de muestras; y filtros IIR (Infinite-duration Impulse Response) cuya respuesta impulsional presenta un número infinito de muestras diferentes de cero. En el caso FIR las muestras de la secuencia h(n) corresponden directamente a los coeficientes de los filtros; para el caso IIR, los parámetros encontrados corresponden a los coeficientes de una ecuación de diferencia que incluye términos de retroalimentación. El diseño de filtros digitales se realiza típicamente en tres pasos: 1. Convertir las restricciones de diseño deseadas en especificaciones precisas sobre las respuestas de magnitud y fase deseadas, tipo de filtro (FIR o IIR), orden del filtro, error tolerable o criterio de error. 2. Encontrar un filtro FIR o IIR que se aproxime a las especificaciones de diseño del paso anterior, tal que la respuesta en frecuencia del filtro obtenido se ajuste mejor a esas especificaciones de diseño de acuerdo con un criterio de error matemático. II. OBJETIVOS 1. Diseñar filtros digitales FIR utilizando las técnicas de Ventanas y aproximación de Chebyshev. 2. Diseñar filtros digitales IIR utilizando las técnicas de transformación bilineal III. PROCEDIMIENTO A. Diseño del filtro FIR por el método de ventanas: Para diseñar un filtro FIR (respuesta finita al impulso) por el método de ventanas, debemos fijarnos primero, en las frecuencias que deseamos filtrar. Para ello es útil realizar un análisis en el espectro frecuencial del audio que contiene el canto del ave. Para ello, utilizamos Python, con la librería “librosa” luego encontramos la transformada rápida de Fourier de la señal de audio, normalizamos los ejes e imprimimos. A continuación, se muestran los códigos utilizados: Fig. 1. Librerías utilizadas en Python. 2 Como podemos ver en la figura 3.b., la señal contiene múltiples frecuencias en el espectro. Podemos analizar directamente que las frecuencias más interesantes para analizar, según algunas fuentes, la mayoría del canto de las aves se sitúan en frecuencias entre los 1000Hz a 7000Hz [1]. Esto significa entonces que, para realizar el filtrado, podemos hacer uso de una ventana o filtro de paso bajo con frecuencia de corte den aproximadamente 7000Hz, y posteriormente un filtro de paso alto con frecuencia de corte de 1000Hz. En otras palabras, estamos creando un filtro pasa bandas. Fig. 2. Código para hacer el análisis de la señal de audio. Al ejecutar el código anterior, se obtienen entonces los siguientes resultados en frecuencia: Fig. 3.c. Espectrograma del audio. Podemos corroborar lo anteriormente mencionado, yendo directamente al espectrograma implementado en Python, donde se observa cómo las frecuencias cambian en el tiempo, pero aun así se observa con claridad que se tiene gran información en las anteriormente mencionadas. También se observa cómo se tiene un gran ruido para las frecuencias entre 8kHz y 9kHz aproximadamente. Fig. 3.a. Línea de tiempo del audio a filtrar. Para realizar el filtro, entonces realizamos primero la definición matemática de la ventana ideal que utilizaremos como base o kernel de la ventana que posteriormente diseñaremos. Filtro Pasa bajas: Primero, tenemos un filtro pasa bajas, que sabemos tiene respuesta en frecuencia: π»π»ππ (ππ) = οΏ½1 · ππ 0 −ππππ(ππ−1) 2 , , ππππ ≤ ππ ≤ ππππ ππππ ππππππππ ππππππππ Donde M es el número de muestras de la ventana y ππππ es la frecuencia de corte del filtro. Podemos entonces representar el filtro en el dominio del tiempo mediante la transformada inversa de Fourier: Fig. 3.b. Magnitud de las frecuencias contenidas en el audio. βππ (ππ) = 1 ππππ πππποΏ½ππ−ππ−1οΏ½ 2 ππππ οΏ½ ππ 2ππ −ππππ 3 βππ (ππ) = ππ − 1 οΏ½οΏ½ ππ − 1 2 (1) , ∀ππ, ππ ≠ ππ − 1 2 ππ οΏ½ππ − οΏ½ 2 ππ − 1 πππΆπΆ βππ (ππ) = , ππ = ππ 2 sin οΏ½ππππ οΏ½ππ − Filtro Pasa altas: Ahora, la definición de la ventana para un filtro pasa altas: −ππππ(ππ−1) 2 1 · ππ , −ππππ(ππ−1) (ππ) οΏ½ π»π»ππ = 2 1 · ππ , 0 , − ππ ≤ ππ ≤ −ππππ ππππ ≤ ππ ≤ ππ ππππ ππππππππ ππππππππ Que tiene respuesta en frecuencia: βππ (ππ) = −ππππ ππ ππ−1 ππ−1 1 οΏ½οΏ½ ππ πππποΏ½ππ− 2 οΏ½ ππππ − οΏ½ ππ πππποΏ½ππ− 2 οΏ½ πππποΏ½ 2ππ −ππ ππππ ππ − 1 οΏ½οΏ½ − sin οΏ½ππππ οΏ½ππ − 2 (ππ) βππ , = ππ − 1 ππ οΏ½ππ − οΏ½ 2 βππ (ππ) = 1 − πππΆπΆ , ππ ∀ππ, ππ ≠ ππ = ππ − 1 (2) 2 ππ − 1 2 Al normalizar: ππππ = ππππ1 = ππππ2 = 2πποΏ½ππππ + Δππ οΏ½ , πππ π 2ππ(1ππππππ − 0.125ππππππ) = 2ππ(0.0198) = 0.125ππππππ/π π 44.1ππππππ Para cumplir con los requisitos, podemos notar que es posible usar una ventana Hanning, pues tiene una atenuación de 44dB en la banda de rechazo, como vemos en la tabla 1. Tabla 1. Características de las ventanas más comunes. Procedemos a calcular entonces el número de muestras de la ventana así: Δππ = 2ππΔππ Δππ = ππ − 1 ππ − 1 οΏ½οΏ½ sin οΏ½ππππ2 οΏ½ππ − οΏ½οΏ½ 2 2 (3) − ππ − 1 ππ − 1 ππ οΏ½ππ − ππ οΏ½ππ − οΏ½ οΏ½ 2 2 βππ = πππΆπΆ1 πππΆπΆ2 − , ππ ππ ππ − 1 2 ππ = ππ − 1 2 Como podemos observar en la ecuación (3), es posible implementar directamente un filtro ideal pasabandas con dos filtros ideales pasa bajas, con frecuencias de corte ππππ1 y ππππ2 . [2] Parámetros del filtro: Para este caso, hemos decidido implementar un filtro con una frecuencia de paso superior de πππππ π = 7ππππππ, una frecuencia de paso inferior de ππππππ = 1ππππππ, con un ancho de banda de transición de Δππ = 0.25ππππππ y que tenga una atenuación mínima de πΌπΌπ π = 40ππππ. También tenemos una frecuencia de muestreo para la señal original de πππ π = 44.1ππππππ. Entonces, encontramos primero las frecuencias de corte normalizadas: 0.25ππππππ 44.1ππππππ Δππ = 2ππ οΏ½ sin οΏ½ππππ1 οΏ½ππ − ∀ππ, ππ ≠ πππ π − ππππ 2ππ 2ππ(7ππππππ + 0.125ππππππ) = 2ππ(0.1616) = 1.015ππππππ/π π 44.1ππππππ Por tanto, se tiene un filtro pasabandas así: βππ (ππ)π΅π΅π΅π΅ = Δππ = Δππ = → ππ = ππ = 0.25ππππππ οΏ½ 44.1ππππππ 3.1(2ππ) ππ 3.1(2ππ) Δππ 3.1(2ππ) = 546.84 0.25ππππππ 2ππ οΏ½ οΏ½ 44.1ππππππ ππ ≅ 547 ππππππππππππππππ Entonces, ya podremos calcular los coeficientes del filtro ideal, teniendo en cuenta que necesitamos 547 muestras para las especificaciones deseadas. Ventana rectangular: Ahora, procedemos a reemplazar en la ecuación 3, los valores anteriores para encontrar la respuesta temporal y frecuencial de la ventana rectangular. [3] Podemos observar entonces, las muestras de la respuesta al impulso, en el dominio del tiempo de la ventana ideal al reemplazar los valores: 4 Fig. 5. Código para el filtro ideal pasabandas. Fig. 4.a. Muestras de la ventana rectangular en el dominio del tiempo. En la figura 4.a., podemos observar que se tiene una señal de tipo π π π π π π π π (π₯π₯). Como es de esperar, esta señal tiene una respuesta finita que, al ser acotada, provoca unos lóbulos laterales en la banda de paso y en la banda de rechazo. Este fenómeno es conocido como el fenómeno de Gibbs, y puede ser observada en detalle en la figura 4.b. Para poder mejorar este resultado, es decir, para intentar mejorar este fenómeno, es decir, para intentar evitarlo, se debe utilizar una ventana con una transición mucho más suave. Para nuestro caso como se mencionó anteriormente, se utilizará una ventana Hanning. En la figura 4.c., podemos observar, además, en escala logarítmica, las atenuaciones en dB que podemos tener en las bandas de rechazo, siendo que, para las bajas frecuencias, el filtro está aproximadamente en los -35dB. En la figura 5, observamos que se utilizó la función de round de Python para eliminar la indeterminación. Ventana Hanning. Ya que se conoce la ecuación que describe la ventana Hanning, se procede a programarla con su ecuación: Fig. 4.b. Respuesta en frecuencia del filtro ideal pasabandas. 1 2ππππ πππ»π»π»π»π»π»π»π»π»π»π»π»π»π» = (1 − cos οΏ½ οΏ½ 2 ππ − 1 (4) Una vez implementado, se muestra entonces el resultado temporal y frecuencial obtenido en Python al implementar la ecuación anterior que describe el comportamiento del filtro. Para esto se utilizan los mismos valores que la ventana anterior: Fig. 4.c. Respuesta en frecuencia del filtro ideal pasabandas. Fig. 6. Muestras en el tiempo de la ventana Hanning. 5 Fig. 7. Respuesta frecuencial de la ventana Hanning. En la figura 6 y 7, observamos entonces, el comportamiento de una ventana Hanning, esta ventana tiene una respuesta al impulso mucho más suave y delimitada en los bordes. Filtro FIR pasa bajas implementado: Ahora, para encontrar la respuesta o coeficientes del filtro que estamos diseñando, basta con realizar el producto en el dominio del tiempo o convolución en frecuencia, de las ventanas anteriores, es decir: βπ‘π‘ (ππ) = βππ (ππ) · πππ»π»π»π»π»π»π»π»π»π»π»π»π»π» (ππ) Para realizar la implementación anterior, basta con realizar la multiplicación de los vectores que contienen las ventanas en el dominio del tiempo y al graficar entonces en Python, se obtienen las siguientes respuestas tanto temporal como frecuencial: Fig. 9. Respuesta frecuencial del filtro FIR implementado. Como podemos notar en la figura 8, se obtiene una respuesta similar al de la figura 4, pero que se extingue más rápidamente. Así mismo, podemos observar en la figura 9, que el fenómeno de Gibbs es muy poco visible, es decir, que las transiciones son mucho más suaves cuando se aplica la ventana Hanning. Además, se observa que se tiene el resultado deseado, un filtro pasa bandas con frecuencias entre 1kHz y 6kHz. Además, podemos observar que la ventaja de este filtro es que tienen una fase lineal como se muestra a continuación: Fig. 10. Fase lineal del filtro FIR implementado. Fig. 8. Respuesta temporal del filtro FIR implementado. Como se puede observar en la figura 10, se tiene una respuesta lineal en la fase, lo que representa una gran ventaja en las aplicaciones que la necesiten. En este caso se cumple el requisito previo, de buscar que el filtro tenga dicha fase. 6 Fig. 11. Fase lineal del filtro FIR implementado. EN la figura 11, podemos observar en detalle en la escala logarítmica, las atenuaciones en dB resultantes al aplicar la ventana Hanning sobre la ventana rectangular. Podemos observar que en comparación con la gráfica de la figura 4.c. se tiene una mejor respuesta de atenuación en las bandas de rechazo. Fig. 12.b. Magnitud de las frecuencias contenidas en el audio filtrado con ventanas. Aplicación del filtro FIR pasabandas (método de ventanas) al audio: Por último, se procede a aplicar el filtro FIR por ventana Hanning, al audio grabado con el fin de eliminar las componentes de frecuencia deseadas. Para ello se realiza la multiplicación de las señales en el dominio de la frecuencia, o bien, la convolución en el dominio del tiempo y se obtiene: Fig. 12.c. Espectrograma del audio filtrado. En la figura 12.a. se puede observar ligeros cambios en el dominio del tiempo, comparados con la figura 3.a. Pero los cambios más significativos se pueden observar fácilmente en el dominio de la frecuencia, donde se puede observar que la señal está completamente atenuada en las frecuencias que se quisieron eliminar. Fig. 12.a. Línea de tiempo del audio a filtrado con ventanas. Igual que se realizó anteriormente, podemos corroborar estos resultados al observar nuevamente el espectrograma, pero esta vez, de la señal filtrada. Se observa cómo para las bandas de rechazo no existe prácticamente información de audio. Esto significa que el filtro tiene una atenuación según el gráfico por debajo de los 30dB. Una vez realizado este tipo de filtro, procedemos entonces a construir con las mismas características un filtro FIR pasabandas, pero con el método de aproximación de Chebyshev. 7 B. Diseño del filtro FIR por aproximación de Chebyshev: Para implementar este método, usamos las mismas frecuencias de corte que se utilizaron con anterioridad al igual que las mismas bandas de transición. Ya que este método permite un control total sobre las bandas de transición, entonces especificaremos las características adicionales con las cuales buscaremos encontrar el filtro pasa bandas por este método. Filtro pasabandas, Parámetros del filtro: - Atenuación en la banda de paso: πΌπΌππ = 40ππππ - Atenuación en la banda de rechazo: πΌπΌππ = 0.1ππππ Calculamos entonces la cantidad de puntos u orden del filtro: ππ2 = −20 log10 οΏ½οΏ½πΏπΏ1 πΏπΏ2 οΏ½ − 13 +1 14.6Δππ Fig. 14.a. Respuesta en frecuencia del filtro FIR por Chebyshev. Necesitamos encontrar los deltas o rizados: πΌπΌππ 0.1 πΏπΏππ = 10−20 = 10− 20 = 0.9885 πΌπΌππ 40 πΏπΏππ = 1 − 10− 20 = 1 − 10−20 = 0.99 Δππ = πππ π − ππππ 2ππ(7250 − 7000) = = 250 2ππ 2ππ Al reemplazar los valores, tenemos el resultado de: ππ2 = 320 ππππππππππππππππ Ahora, procedemos entonces a utilizar el algoritmo de Remez, para encontrar los coeficientes del filtro pasabandas que estamos diseñando. Para esto, utilizamos la rutina predeterminada de Python que viene incluida en la librería de Scipy. Este algoritmo entonces nos entrega como resultado, la señal de los coeficientes o respuesta al impulso en el tiempo: Fig. 13. Respuesta al impulso del filtro FIR por Chebyshev. Fig. 14.b. Respuesta en frecuencia del filtro FIR por Chebyshev. Como podemos ver en la figura 13, se tiene una respuesta temporal con forma de sinc(x). La respuesta del filtro se puede observar de mejor manera en el dominio de la frecuencia, como se muestra en la figura 14.a. Se puede observar que, en la banda de paso, existe un leve rizado, que concuerda con el que programamos, además se nota que la banda de rechazo está aproximadamente en los 40dB que escogimos. Se puede mejorar la exactitud de esta respuesta al añadir unas 3 muestras más en el código. También es posible observar que este tipo de filtro tiene una excelente respuesta en cuanto a la banda de transición en comparación con la respuesta del filtro por ventanas de la figura 11. Además, también tenemos una fase lineal según la figura 14.b. Aplicación del filtro FIR pasabandas (aproximación de Chebyshev) al audio: Ahora, solo queda realizar el mismo procedimiento que se realizó con el filtro anterior, es decir, realizar la multiplicación en frecuencia de las señales o bien, la convolución en el tiempo de la señal de audio y el filtro pasabandas encontrado por la aproximación. 8 C. Tabla comparativa de los filtros por ventanas y Chebyshev. A continuación, realizamos entonces una comparación de los resultados obtenidos en los métodos anteriores. En esta tabla tendremos en cuenta si las especificaciones fueron complidas, además de las frecuencias de corte obtenidas y las bandas de atenuación: Fig. 15.a. Línea de tiempo del audio filtrado con Chebyshev. Fig. 16.a. Espectrograma del audio filtrado con Chebyshev. Fig. 16.b. Frecuencias de corte en dB para Chebyshev. En las figuras 16 se puede observar entonces las frecuencias de corte que se obtuvieron. Esto se consignará entonces en la tabla. Fig. 15.b. Magnitud de las frecuencias contenidas en el audio filtrado con Chebyshev. Parámetros Frecuencia de corte inferior Frecuencia de corte superior Atenuación banda de paso Atenuación banda de rechazo Especificaciones cumplidas Orden del filtro FIR Ventanas 750Hz FIR Chebyshev 750Hz -40dB -38dB 7250Hz -40dB Sí 7250Hz -38dB Parcialmente 547 320 Tabla 1. Comparación de los filtros FIR implementados. Como podemos ver en la tabla anterior, los dos filtros tuvieron resultados muy similares, la única diferencia es en la banda de atenuación del filtro por el método de Chebyshev. Donde se tiene una diferencia de 2dB. Fig. 15.c. Espectrograma del audio filtrado con Chebyshev. 9 D. Diseño de filtros IIR por Transformación Bilineal: Ahora, procedemos a realizar la implementación del filtro IIR (respuesta infinita al impulso) mediante el método de transformación bilineal. Para esto, decidimos también utilizar un filtro pasabandas con las mismas frecuencias de corte que se utilizó en los métodos anteriores, con los siguientes resultados de los cálculos: Primero, se calculan las frecuencias del filtro digital: 2 ππ Ω = tan οΏ½ οΏ½ → ππππππ − π€π€π€π€π€π€π€π€π€π€π€π€π€π€ ππ 2 Fig. 19. Filtro IIR Butterworth implementado con transformación bilineal. [4] Fig. 17. Ecuaciones para el cálculo de las frecuencias del filtro digital con las frecuencias del filtro analógico. En el código podemos observar que se encuentran los bordes de las frecuencias digitales con las frecuencias lineales del filtro pasabandas ideal. Fig. 20. Respuesta al impulso. Fig. 18. Ecuaciones para el cálculo del filtro pasabandas. Dadas las especificaciones del filtro, con una banda de paso de 3dB y una banda de rechazo de 40dB, se decide usar un filtro tipo Butterworth. Entonces, se utiliza con los valores anteriores, la ecuación del filtro pasabandas para el filtro analógico deseado: Ω = Ωp οΏ½ 20 − Ω οΏ½2 Ω οΏ½ π΅π΅ππ Ω Se implementa entonces estos resultados con las librerías de Python para el filtro IIR de dos formas diferentes y se obtienen los siguientes resultados: - Forma 1: calculado con las ecuaciones de transformación bilineal - Forma 2: Rutina de Python para filtros IIR. Fig. 21. Frecuencias de la señal filtrada. 10 En la figura 19, podemos observar el espectro del filtro IIR de la primera forma implementada. Podemos observar que tiene una respuesta un poco simétrica, tal como se busca y con las frecuencias de corte y atenuaciones deseadas. [5] Como vemos en la figura 21, se logró eliminar de manera satisfactoria las frecuencias más altas pero las frecuencias más bajas no se lograron eliminar completamente. Fig. 24. Espectrograma del filtro IIR de la segunda forma. En la figura 24, observamos los resultados del espectrograma, donde se puede observar que se logró una mejor atenuación para la banda de las frecuencias superiores, pero no se logró de forma óptima mitigar el ruido en las frecuencias menores. IV. CONCLUSIONES Fig. 22. Espectrograma del filtro IIR de la primera forma. Ya que los resultados anteriores, no fueron satisfactorios, se buscó entonces implementar un nuevo filtro con una función más específica de Python. Se utilizaron las mismas frecuencias que los filtros anteriores y se obtuvieron los siguientes resultados: - El diseño de los filtros digitales FIR, tiende a ser de implementación mucho más sencilla ya que implementar las ventanas no requiere un mayor trabajo. - El filtro Chebyshev, tiene un excelente comportamiento en la banda de rechazo, pues se logra atenuar de forma casi lineal en toda la banda de rechazo (respuesta plana). - Para la cantidad de muestras calculadas, el filtro Chebyshev tiene el rizado esperado, pues fue el definido. Se logró observar que se tiene menos muestras que el filtro por ventana Hanning. - Es posible mejorar el resultado del filtro Chebyshev al aumentar la cantidad de muestras disminuyendo los rizados o el Δππ . - Mejorar el filtro con ventanas disminuyendo la banda de transición o aumentando la cantidad de muestras, al igual que el filtro Chebyshev, aumenta el número de cálculos, lo que puede llevar a utilizar mucha memoria. - Para este caso, los resultados del filtrado del audio fueron totalmente satisfactorios, se logró filtrar las bandas requeridas y disminuir el ruido de los insectos con los dos métodos del filtro FIR. - EL filtro IIR se logró de forma satisfactoria mediante dos métodos similares, uno de ellos solo requería los datos mientras que el otro se hizo con los cálculos de la transformación bilineal. Dado que los cálculos permitieron un mejor control, se llegó a un mejor resultado en cuanto a simetría y bandas de paso. Fig. 23. Espectrograma del filtro IIR de la segunda forma. [6] Como observamos en la figura 23. Se tiene también una respuesta esperada para el filtro con las frecuencias elegidas, pero con muy poca simetría en comparación con el filtro anterior de la primera forma. Aún así, se logró obtener atenuaciones en las bandas elegidas, pero para la banda mayor, la banda de transición es más grande que la esperada. 11 - Todos los métodos fueron filtrados utilizando la convolución, pues era el resultado más sencillo de implementar. - Por algún problema en la implementación de la rutina de convolución con los filtros IIR, el resultado en el filtrado no fue el mejor, pero se podría mejorar las rutinas con un mejor control sobre el código de convolución implementado o por algún posible error de digitación. V. BIBLIOGRAFÍA [1] A. Gordillo Martínez, M. F. Ortiz Ramírez y A. G. Navarro Sigüenza, «Estructura y evolución de las vocalizaciones de las aves,» Ciencias, pp. 32 - 40, 2013. [2] J. L. N. Vera, «Filtrado Digital. Lectura 3: Diseño de Filtros FIR,» 21 Diciembre 2021. [En línea]. Available: https://silo.tips/download/filtrado-digital-lectura-3diseo-de-filtros-fir. [3] L. G. A. J. S. V. J. G. M. MARTÍNEZ, «FILTROS DIGITALES,» 2010. [En línea]. Available: http://ocw.uv.es/ingenieria-y-arquitectura/filtrosdigitales/tema_3._diseno_de_filtros_fir.pdf. [4] SciPy , «SciPy documentation,» SciPy , 2022. [En línea]. Available: https://docs.scipy.org/doc/scipy/reference/generated/sci py.signal.butter.html. [5] N. Robertson, «dsprelated,» 6 Enero 2018. [En línea]. Available: https://www.dsprelated.com/showarticle/1128.php. [6] SciPy, «SciPy documentation,» SciPy, 2022. [En línea]. Available: https://docs.scipy.org/doc/scipy/reference/generated/sci py.signal.buttord.html.