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