Implementieren eines Tiefpassfilters in Python

Vaibhhav Khetarpal 21 Dezember 2022
Implementieren eines Tiefpassfilters in Python

Ein Tiefpassfilter ist ein Begriff, der zu den Grundlagen der Signalverarbeitung gehört und häufig verwendet wird, um Signale zu filtern, um genauere Ergebnisse zu erhalten.

In diesem Tutorial wird der Tiefpassfilter und seine Erstellung und Implementierung in Python erläutert.

Ein Tiefpassfilter wird verwendet, um ein Signal durchzulassen, dessen Frequenz niedriger ist als die Grenzfrequenz, die einen bestimmten vom Benutzer festgelegten Wert enthält. Alle Signale mit Frequenzen über der Grenzfrequenz sind entnervt.

Verwenden Sie Scipy, um einen Tiefpass-Butterworth-Filter in Python zu erstellen

In Python können wir Funktionen aus der Bibliothek SciPy verwenden, um einen Tiefpassfilter zu erstellen. SciPy, eine Abkürzung für Scientific Python, ist eine Bibliothek, die zur Bereitstellung von Funktionen zur Signalverarbeitung, Optimierung und Statistik verwendet wird. Diese Bibliothek verwendet auch die darunterliegende NumPy-Bibliothek.

Es gibt ein paar Tiefpassfilter, die in der realen Welt existieren. Wir werden jedoch in Python einen Butterworth-Tiefpassfilter erstellen, da dieser eine maximal flache Frequenz hat, dh keine Welligkeiten im Durchlassbereich. Dies macht es zu einem der beliebtesten und am häufigsten verwendeten Tiefpassfilter.

Um diese Methode erfolgreich in Python zu implementieren, müssen wir zunächst die Module NumPy, SciPy und Matplotlib in den Python-Code importieren.

Der folgende Code verwendet das Modul SciPy, um einen Tiefpass-Butterworth-Filter in Python zu erstellen.

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

Python Tiefpassfilter

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