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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn