Implementar un filtro de paso alto usando Python

Vaibhav Vaibhav 8 abril 2022
Implementar un filtro de paso alto usando Python

Un filtro de paso alto es un filtro que restringe el movimiento de señales que son más bajas que una frecuencia de umbral predefinida o un corte. La señal con frecuencias mayores o iguales al umbral pasa a través del filtro sin obstrucciones. Esta acción atenúa las señales con bajas frecuencias. Un filtro de paso alto filtra los ruidos no deseados, como los sonidos.

En este artículo, aprenderemos cómo implementar un filtro de paso alto usando Python.

Implementar filtro de paso alto usando Python

La implementación del filtro de paso alto utiliza 4 módulos de Python, a saber, numpy, pandas, scipy y matplotlib.

El módulo numpy es un módulo robusto de Python rico en utilidades para trabajar con grandes matrices y arreglos multidimensionales. Estas utilidades ayudan a realizar operaciones matemáticas sencillas y complejas sobre matrices sin problemas. Estas utilidades están optimizadas y altamente dinámicas para las entradas.

Para instalar la última versión del módulo numpy, utilice cualquiera de los siguientes comandos pip.

pip install numpy
pip3 install numpy

El módulo pandas es un potente y flexible módulo de análisis y manipulación de datos de código abierto escrito en Python.

Para instalar el módulo pandas, utilice cualquiera de los siguientes comandos pip.

pip install pandas
pip3 install pandas

El módulo scipy es un módulo Python de código abierto para computación científica y técnica.

Para instalar el módulo scipy, utilice cualquiera de los siguientes comandos pip.

pip install scipy
pip3 install scipy

Y, el módulo matplotlib es una biblioteca de Python completa y optimizada para la visualización gráfica de datos.

Para instalar la última versión del módulo matplotlib, utilice cualquiera de los siguientes comandos pip.

pip install matplotlib
pip3 install matplotlib

Ahora que hemos terminado con breves introducciones sobre las bibliotecas, veamos el código de Python para el filtro de paso alto.

import numpy as np
import pandas as pd
from scipy import signal
import matplotlib.pyplot as plt


def sine_generator(fs, sinefreq, duration):
    T = duration
    n = fs * T
    w = 2.0 * np.pi * sinefreq
    t_sine = np.linspace(0, T, n, endpoint=False)
    y_sine = np.sin(w * t_sine)
    result = pd.DataFrame({"data": y_sine}, index=t_sine)
    return result


def butter_highpass(cutoff, fs, order=5):
    nyq = 0.5 * fs
    normal_cutoff = cutoff / nyq
    b, a = signal.butter(order, normal_cutoff, btype="high", analog=False)
    return b, a


def butter_highpass_filter(data, cutoff, fs, order=5):
    b, a = butter_highpass(cutoff, fs, order=order)
    y = signal.filtfilt(b, a, data)
    return y


fps = 30
sine_fq = 10
duration = 10
sine_5Hz = sine_generator(fps, sine_fq, duration)
sine_fq = 1
duration = 10
sine_1Hz = sine_generator(fps, sine_fq, duration)
sine = sine_5Hz + sine_1Hz
filtered_sine = butter_highpass_filter(sine.data, 10, fps)
plt.figure(figsize=(20, 10))
plt.subplot(211)
plt.plot(range(len(sine)), sine)
plt.title("Generated Signal")
plt.subplot(212)
plt.plot(range(len(filtered_sine)), filtered_sine)
plt.title("Filtered Signal")
plt.show()

filtro de paso alto de Python

En el código anterior, la frecuencia sinusoidal o el valor sine_fq debe estar en Hertz o Hz, y la duración o duration debe estar en segundos o sec. La señal generada es la señal original y la señal filtrada es la señal formada debido al filtro de paso alto. El gráfico generado muestra las diferencias entre los dos.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.