Python での相互相関
相互相関は、異なるラグを持つ 2つの信号間の類似性を分析するための重要な信号処理方法です。 2つの信号がどの程度一致しているかを把握できるだけでなく、2つの信号が最も類似している時点またはインデックスも取得できます。
この記事では、Python で相互相関を処理する複数の方法について説明します。
Python での相互相関
Python だけを使用して、2つの信号の相互相関を計算できます。 以下の式を使用して、Python スクリプトに変換できます。
方式:
R_{fg}(l) = \sum_{n=0}^{N} f(n)g(n+l)
コード例:
sig1 = [1, 2, 3, 2, 1, 2, 3]
sig2 = [1, 2, 3]
# Pre-allocate correlation array
corr = (len(sig1) - len(sig2) + 1) * [0]
# Go through lag components one-by-one
for l in range(len(corr)):
corr[l] = sum([sig1[i + l] * sig2[i] for i in range(len(sig2))])
print(corr)
出力:
[14, 14, 10, 10, 14]
それでは、相互相関を関数として使用する複数の Python パッケージを見ていきましょう。
NumPy
モジュールを使用する
数値計算用の標準 Python モジュールは NumPy
と呼ばれます。 NumPy
に相互相関手法が組み込まれていることは驚くべきことではありません。 NumPy
がインストールされていない場合は、以下のコマンドでインストールできます。
pip install numpy
コード例:
import numpy as np
sig1 = [1, 2, 3, 2, 1, 2, 3]
sig2 = [1, 2, 3]
corr = np.correlate(a=sig1, v=sig2)
print(corr)
出力:
[14 14 10 10 14]
SciPy
モジュールを使用する
NumPy
が失敗した場合、SciPy
が考慮すべき主なパッケージです。 これには、多数の工学および科学分野の実践的なテクニックが含まれています。
ただし、最初に、相互相関関連の信号処理ソフトウェアをインポートする必要があります。 次に、信号は SciPy
相互相関によって開始時と終了時に自動的にパディングされます。
その結果、純粋な Python コードと NumPy
モジュールと比較して、相互相関に対してより広範な信号応答が提供されます。 したがって、これらのパディング コンポーネントを削除して、テスト ケースで結果が同等になるようにしました。
SciPy
がインストールされていない場合は、以下のコマンドでインストールできます。
pip install scipy
コード例:
import scipy.signal
sig1 = [1, 2, 3, 2, 1, 2, 3]
sig2 = [1, 2, 3]
corr = scipy.signal.correlate(sig1, sig2)
# Removes padded Correlations
corr = corr[(len(sig1) - len(sig2) - 1) : len(corr) - ((len(sig1) - len(sig2) - 1))]
print(corr)
出力:
[14 10 10]
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn