Python의 교차 상관

Marion Paul Kenneth Mendoza 2023년10월10일
Python의 교차 상관

교차 상관은 시차가 다른 두 신호 간의 유사성을 분석하기 위한 필수 신호 처리 방법입니다. 두 신호가 얼마나 잘 일치하는지 알 수 있을 뿐만 아니라 가장 유사한 시점 또는 인덱스도 얻을 수 있습니다.

이 기사에서는 Python에서 상호 상관을 처리하는 여러 가지 방법에 대해 설명합니다.

Python의 상호 상관

우리는 Python만을 사용하여 두 신호의 상호 상관을 계산할 수 있습니다. 아래 공식을 사용하여 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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn