Implementar filtro de paso bajo en Python

Vaibhhav Khetarpal 21 diciembre 2022
Implementar filtro de paso bajo en Python

Un filtro de paso bajo es un término que se encuentra entre los conceptos básicos del procesamiento de señales y se usa con bastante frecuencia para filtrar señales para obtener resultados más precisos.

Este tutorial discutirá el filtro de paso bajo y cómo crearlo e implementarlo en Python.

Se utiliza un filtro de paso bajo para pasar una señal que tiene una frecuencia más baja que la frecuencia de corte, que tiene un cierto valor especificado por el usuario. Todas las señales con frecuencias superiores a la frecuencia de corte se debilitaron.

Utilice Scipy para crear un filtro Butterworth de paso bajo en Python

En Python, podemos utilizar funciones de la biblioteca SciPy para crear un filtro de paso bajo. SciPy, una abreviatura de Scientific Python, es una biblioteca que se utiliza para suministrar funciones que llevan a cabo el procesamiento, la optimización y las estadísticas de señales. Esta biblioteca también usa la biblioteca NumPy debajo.

Hay un par de filtros de paso bajo que existen en el mundo real. Sin embargo, crearemos un filtro de paso bajo Butterworth en Python, ya que tiene una frecuencia máxima plana, lo que significa que no hay ondulaciones en la banda de paso. Esto lo convierte en uno de los filtros de paso bajo más populares y utilizados.

Para implementar con éxito este método en Python, primero necesitaremos importar los módulos NumPy, SciPy y Matplotlib al código Python.

El siguiente código utiliza el módulo SciPy para crear un filtro Butterworth de paso bajo en Python.

import numpy as np
from scipy.signal import butter, lfilter, freqz
import matplotlib.pyplot as plt


def butter_lowpass(cutoff, fs, order=5):
    nyq = 0.5 * fs
    normal_cutoff = cutoff / nyq
    b, a = butter(order, normal_cutoff, btype="low", analog=False)
    return b, a


def butter_lowpass_filter(data, cutoff, fs, order=5):
    b, a = butter_lowpass(cutoff, fs, order=order)
    y = lfilter(b, a, data)
    return y


# Setting standard filter requirements.
order = 6
fs = 30.0
cutoff = 3.667

b, a = butter_lowpass(cutoff, fs, order)

# Plotting the frequency response.
w, h = freqz(b, a, worN=8000)
plt.subplot(2, 1, 1)
plt.plot(0.5 * fs * w / np.pi, np.abs(h), "b")
plt.plot(cutoff, 0.5 * np.sqrt(2), "ko")
plt.axvline(cutoff, color="k")
plt.xlim(0, 0.5 * fs)
plt.title("Lowpass Filter Frequency Response")
plt.xlabel("Frequency [Hz]")
plt.grid()


# Creating the data for filteration
T = 5.0  # value taken in seconds
n = int(T * fs)  # indicates total samples
t = np.linspace(0, T, n, endpoint=False)

data = (
    np.sin(1.2 * 2 * np.pi * t)
    + 1.5 * np.cos(9 * 2 * np.pi * t)
    + 0.5 * np.sin(12.0 * 2 * np.pi * t)
)

# Filtering and plotting
y = butter_lowpass_filter(data, cutoff, fs, order)

plt.subplot(2, 1, 2)
plt.plot(t, data, "b-", label="data")
plt.plot(t, y, "g-", linewidth=2, label="filtered data")
plt.xlabel("Time [sec]")
plt.grid()
plt.legend()

plt.subplots_adjust(hspace=0.35)
plt.show()

filtro de paso bajo de python

Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn