web-dev-qa-db-ja.com

Pythonの正規化相互相関

チェルトン(1983)の参照に従って、2組のベクトル(xおよびy)の自由度を計算しようとして、私は最後の日々に苦労してきました。

Chelton(1983)による自由度

そして、np.correlateを使用して正規化された相互相関関数を計算する適切な方法を見つけることができません。-1、1の間にない出力が常に得られます。

2つのベクトルの自由度を計算するために、相互相関関数を正規化する簡単な方法はありますか?

いい質問です。直接的な方法はありませんが、次のようにnp.correlateを使用する前に入力ベクトルを「正規化」でき、妥当な値が[-1,1]の範囲内で返されます。

ここで、信号処理の教科書で一般的に定義されている相関関係を定義します。

c'_{ab}[k] = sum_n a[n] conj(b[n+k])

コード:aとbがベクトルの場合:

a = (a - np.mean(a)) / (np.std(a) * len(a))
b = (b - np.mean(b)) / (np.std(b))
c = np.correlate(a, b, 'full')

参照:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.correlate.html

https://en.wikipedia.org/wiki/Cross-correlation

enter image description here

9
makis