Python 으로 상호 스펙트럼 밀도 (CSD) 계산하기

Beginner

This tutorial is from open-source community. Access the source code

소개

신호 처리에서 교차 스펙트럼 밀도 (CSD, Cross Spectral Density) 는 주파수 영역에서 두 신호 간의 상관 관계를 측정하는 지표입니다. 두 신호가 주파수 성분 측면에서 서로 얼마나 관련되어 있는지 파악하는 데 사용됩니다. 이 랩에서는 Python 의 Matplotlib 라이브러리를 사용하여 두 신호의 CSD 를 계산하는 방법을 배우게 됩니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 액세스하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한 사항으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.

필요한 라이브러리 가져오기

다음 라이브러리를 가져와야 합니다: numpy 및 matplotlib.pyplot.

import matplotlib.pyplot as plt
import numpy as np

신호 생성

두 개의 신호를 생성해야 합니다. 이 신호들은 일관된 부분과 무작위 부분을 포함합니다. 두 신호의 일관된 부분은 10 Hz 의 주파수를 갖습니다. 신호의 무작위 부분은 저역 통과 필터를 통과하여 색상 잡음을 생성하는 백색 잡음을 사용하여 생성됩니다.

dt = 0.01
t = np.arange(0, 30, dt)

## Fixing random state for reproducibility
np.random.seed(19680801)

nse1 = np.random.randn(len(t))                 ## white noise 1
nse2 = np.random.randn(len(t))                 ## white noise 2
r = np.exp(-t / 0.05)

cnse1 = np.convolve(nse1, r, mode='same') * dt   ## colored noise 1
cnse2 = np.convolve(nse2, r, mode='same') * dt   ## colored noise 2

## two signals with a coherent part and a random part
s1 = 0.01 * np.sin(2 * np.pi * 10 * t) + cnse1
s2 = 0.01 * np.sin(2 * np.pi * 10 * t) + cnse2

신호 플롯

Matplotlib 의 plot 함수를 사용하여 생성된 두 신호를 플롯할 수 있습니다.

fig, ax = plt.subplots()
ax.plot(t, s1, label='s1')
ax.plot(t, s2, label='s2')
ax.set_xlabel('Time')
ax.set_ylabel('Amplitude')
ax.legend()
plt.show()

CSD 계산

두 신호의 CSD(Cross Spectral Density, 상호 스펙트럼 밀도) 를 계산하려면 Matplotlib 의 csd 함수를 사용해야 합니다. 이 함수는 두 신호, FFT(Fast Fourier Transform, 고속 푸리에 변환) 에 사용할 점의 수, 그리고 샘플링 주파수를 입력으로 받습니다.

fig, ax = plt.subplots()
cxy, f = ax.csd(s1, s2, 256, 1. / dt)
ax.set_ylabel('CSD (dB)')
plt.show()

결과 해석

결과 플롯은 두 신호의 CSD 를 보여줍니다. x 축은 주파수를 나타내고, y 축은 해당 주파수에서 두 신호 간의 상관 관계 강도를 나타냅니다. 플롯은 10 Hz 에서 피크를 보여주는데, 이는 신호의 일관된 부분의 주파수입니다. 이는 두 신호가 이 주파수에서 강하게 상관 관계가 있음을 나타냅니다.

요약

이 랩에서는 Python 의 Matplotlib 라이브러리를 사용하여 두 신호의 CSD(Cross Spectral Density, 상호 스펙트럼 밀도) 를 계산하는 방법을 배웠습니다. 일관된 부분과 임의의 부분을 가진 두 신호를 생성하고, 신호를 플롯하고, CSD 를 계산하고, 결과를 해석했습니다. CSD 는 주파수 도메인에서 두 신호 간의 상관 관계를 결정하는 데 유용한 도구입니다.