Implementieren einen Hochpassfilter mit Python
Ein Hochpassfilter ist ein Filter, der die Bewegung von Signalen beschränkt, die niedriger als eine vordefinierte Schwellenfrequenz oder eine Grenzfrequenz sind. Das Signal mit Frequenzen größer oder gleich dem Schwellwert passiert den Filter ungehindert. Diese Aktion dämpft Signale mit niedrigen Frequenzen. Ein Hochpassfilter filtert unerwünschte Geräusche wie Geräusche heraus.
In diesem Artikel lernen wir, wie man einen Hochpassfilter mit Python implementiert.
Implementieren Sie einen Hochpassfilter mit Python
Die Implementierung des Hochpassfilters verwendet 4
Python-Module, nämlich numpy
, pandas
, scipy
und matplotlib
.
Das numpy
-Modul ist ein robustes Python-Modul, das reich an Hilfsprogrammen für die Arbeit mit großen mehrdimensionalen Matrizen und Arrays ist. Diese Dienstprogramme helfen bei der nahtlosen Durchführung sowohl komplexer als auch einfacher mathematischer Operationen über Matrizen. Diese Dienstprogramme sind optimiert und hochdynamisch für die Eingaben.
Um die neueste Version des numpy
-Moduls zu installieren, verwenden Sie einen der folgenden pip
-Befehle.
pip install numpy
pip3 install numpy
Das pandas
-Modul ist ein leistungsstarkes und flexibles Open-Source-Datenanalyse- und Datenmanipulationsmodul, das in Python geschrieben ist.
Um das Modul pandas
zu installieren, verwenden Sie einen der folgenden pip
-Befehle.
pip install pandas
pip3 install pandas
Das Modul scipy
ist ein Open-Source-Python-Modul für wissenschaftliches und technisches Rechnen.
Um das scipy
-Modul zu installieren, verwenden Sie einen der folgenden pip
-Befehle.
pip install scipy
pip3 install scipy
Und das Modul matplotlib
ist eine umfassende und optimierte Python-Bibliothek zur grafischen Visualisierung von Daten.
Um die neueste Version des matplotlib
-Moduls zu installieren, verwenden Sie einen der folgenden pip
-Befehle.
pip install matplotlib
pip3 install matplotlib
Nachdem wir nun mit einer kurzen Einführung in die Bibliotheken fertig sind, schauen wir uns den Python-Code für den Hochpassfilter an.
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()
Im obigen Code sollte die Sinusfrequenz oder der sine_fq
-Wert in Hertz oder Hz
und die Dauer oder duration
in Sekunden oder sec
angegeben werden. Das erzeugte Signal ist das ursprüngliche Signal, und das gefilterte Signal ist das Signal, das aufgrund des Hochpassfilters gebildet wird. Das generierte Diagramm zeigt die Unterschiede zwischen den beiden.