Implémenter un filtre passe-bas en Python

Vaibhhav Khetarpal 21 décembre 2022
Implémenter un filtre passe-bas en Python

Un filtre passe-bas est un terme qui fait partie des bases du traitement du signal et est utilisé assez souvent pour filtrer les signaux afin d’obtenir des résultats plus précis.

Ce tutoriel abordera le filtre passe-bas et comment le créer et l’implémenter en Python.

Un filtre passe-bas est utilisé pour laisser passer un signal qui a une fréquence inférieure à la fréquence de coupure, qui détient une certaine valeur spécifiée par l’utilisateur. Tous les signaux avec des fréquences supérieures à la fréquence de coupure énervé.

Utilisez Scipy pour créer un filtre Butterworth passe-bas en Python

En Python, on peut utiliser des fonctions de la bibliothèque SciPy pour créer un filtre passe-bas. SciPy, abréviation de Scientific Python, est une bibliothèque utilisée pour fournir des fonctions qui effectuent le traitement du signal, l’optimisation et les statistiques. Cette bibliothèque utilise également la bibliothèque NumPy en dessous.

Il existe quelques filtres passe-bas dans le monde réel. Cependant, nous allons créer un filtre passe-bas Butterworth en Python, car il a une fréquence au maximum plate, ce qui signifie aucune ondulation dans la bande passante. Cela en fait l’un des filtres passe-bas les plus populaires et les plus utilisés.

Pour réussir à implémenter cette méthode en Python, nous devrons d’abord importer les modules NumPy, SciPy et Matplotlib dans le code python.

Le code suivant utilise le module SciPy pour créer un filtre Butterworth passe-bas 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()

filtre passe-bas 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