Implémenter un filtre passe-haut à l'aide de Python

Vaibhav Vaibhav 8 avril 2022
Implémenter un filtre passe-haut à l'aide de Python

Un filtre passe-haut est un filtre qui limite le mouvement des signaux inférieurs à une fréquence de seuil prédéfinie ou à une coupure. Le signal avec des fréquences supérieures ou égales au seuil passe à travers le filtre sans obstruction. Cette action atténue les signaux à basses fréquences. Un filtre passe-haut filtre les bruits indésirables tels que les sons.

Dans cet article, nous allons apprendre à implémenter un filtre passe-haut à l’aide de Python.

Implémenter un filtre passe-haut à l’aide de Python

L’implémentation du filtre passe-haut utilise 4 modules Python, à savoir numpy, pandas, scipy et matplotlib.

Le module numpy est un module Python robuste qui est riche en utilitaires pour travailler avec de grandes matrices et tableaux multidimensionnels. Ces utilitaires permettent d’effectuer des opérations mathématiques complexes et simples sur des matrices de manière transparente. Ces utilitaires sont optimisés et très dynamiques aux entrées.

Pour installer la dernière version du module numpy, utilisez l’une des commandes pip suivantes.

pip install numpy
pip3 install numpy

Le module pandas est un module d’analyse et de manipulation de données open source puissant et flexible écrit en Python.

Pour installer le module pandas, utilisez l’une des commandes pip suivantes.

pip install pandas
pip3 install pandas

Le module scipy est un module Python open-source pour le calcul scientifique et technique.

Pour installer le module scipy, utilisez l’une des commandes pip suivantes.

pip install scipy
pip3 install scipy

Et, le module matplotlib est une bibliothèque Python complète et optimisée pour la visualisation graphique des données.

Pour installer la dernière version du module matplotlib, utilisez l’une des commandes pip suivantes.

pip install matplotlib
pip3 install matplotlib

Maintenant que nous en avons fini avec les brèves introductions sur les bibliothèques, regardons le code Python pour le filtre passe-haut.

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()

filtre passe-haut python

Dans le code ci-dessus, la fréquence sinusoïdale ou la valeur sine_fq doit être en Hertz ou Hz, et la durée ou duration doit être en secondes ou sec. Le signal généré est le signal d’origine et le signal filtré est le signal formé grâce au filtre passe-haut. Le graphique généré montre les différences entre les deux.

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.