Python を使用してハイパスフィルターを実装する

Vaibhav Vaibhav 2022年4月8日
Python を使用してハイパスフィルターを実装する

ハイパスフィルターは、事前定義されたしきい値周波数またはカットオフよりも低い信号の移動を制限するフィルターです。しきい値以上の周波数の信号は、遮るものがない状態でフィルターを通過します。このアクションは、低周波数の信号を減衰させます。ハイパスフィルターは、音などの不要なノイズを除去します。

この記事では、Python を使用してハイパスフィルターを実装する方法を学習します。

Python を使用してハイパスフィルターを実装する

ハイパスフィルターの実装では、4 Python モジュール、つまり、numpypandasscipy、および matplotlib を使用します。

numpy モジュールは、大規模な多次元行列や配列を操作するためのユーティリティが豊富な堅牢な Python モジュールです。これらのユーティリティは、行列に対して複雑で単純な数学演算をシームレスに実行するのに役立ちます。これらのユーティリティは最適化されており、入力に対して非常に動的です。

numpy モジュールの最新バージョンをインストールするには、次の pip コマンドのいずれかを使用します。

pip install numpy
pip3 install numpy

pandas モジュールは、Python で記述された強力で柔軟なオープンソースのデータ分析およびデータ操作モジュールです。

pandas モジュールをインストールするには、次の pip コマンドのいずれかを使用します。

pip install pandas
pip3 install pandas

scipy モジュールは、科学技術コンピューティング用のオープンソースの Python モジュールです。

scipy モジュールをインストールするには、次の pip コマンドのいずれかを使用します。

pip install scipy
pip3 install scipy

また、matplotlib モジュールは、データをグラフィカルに視覚化するための包括的で最適化された Python ライブラリです。

matplotlib モジュールの最新バージョンをインストールするには、次の pip コマンドのいずれかを使用します。

pip install matplotlib
pip3 install matplotlib

ライブラリについての簡単な紹介が終わったので、ハイパスフィルターの Python コードを見てみましょう。

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

Python ハイパスフィルター

上記のコードでは、正弦周波数または sine_fq 値はヘルツまたは Hz であり、持続時間または duration は秒または sec である必要があります。生成された信号は元の信号であり、フィルタリングされた信号はハイパスフィルターによって形成された信号です。生成されたグラフは、2つの違いを示しています。

著者: Vaibhav Vaibhav
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.