[파이썬][Scipy] convolve, spectrogram, find_peaks 예제

Scipy의 신호 처리 관련 함수 중 convolve, spectrogram, 그리고 find_peaks의 예제를 제공하겠습니다.

convolve 함수 예제:

convolve 함수는 두 신호의 합성을 계산합니다. 아래 예제에서는 간단한 이동 평균을 계산합니다.

mport numpy as np
from scipy.signal import convolve

# 입력 신호 생성
signal = np.array([1, 2, 3, 4, 5])

# 커널 (필터) 생성
kernel = np.array([0.5, 0.5])

# 합성 계산
result = convolve(signal, kernel, mode='valid')  # 'valid' 모드는 출력의 크기를 입력과 동일하게 만듭니다.

print("입력 신호:", signal)
print("커널 (필터):", kernel)
print("합성 결과:", result)

spectrogram 함수 예제:

spectrogram 함수는 시계열 신호의 스펙트로그램을 계산하여 시간-주파수 도메인에서 신호의 주파수 내용을 시각화합니다.

mport numpy as np
import matplotlib.pyplot as plt
from scipy.signal import spectrogram

# 시간과 주파수에 따른 시뮬레이션 데이터 생성
t = np.linspace(0, 10, 1000)  # 0부터 10까지의 1000개 시간 포인트
f = 2  # 주파수

# 신호 생성
signal = np.sin(2 * np.pi * f * t)

# 스펙트로그램 계산
frequencies, times, Sxx = spectrogram(signal, fs=1000)  # fs는 샘플링 주파수입니다.

# 스펙트로그램 플로팅
plt.pcolormesh(times, frequencies, 10 * np.log10(Sxx), shading='auto')
plt.colorbar(label='dB')
plt.title('스펙트로그램')
plt.xlabel('시간 (s)')
plt.ylabel('주파수 (Hz)')
plt.show()

find_peaks 함수 예제:

find_peaks 함수는 신호에서 특정 조건을 만족하는 피크를 찾습니다.

mport numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks

# 시간 및 신호 생성
t = np.linspace(0, 10, 1000)
signal = np.sin(2 * np.pi * 1 * t) + np.sin(2 * np.pi * 2 * t) + np.sin(2 * np.pi * 3 * t)

# 피크 찾기
peaks, _ = find_peaks(signal, height=2)  # height 조건을 만족하는 피크 찾기

# 결과 플로팅
plt.plot(t, signal)
plt.plot(t[peaks], signal[peaks], 'ro')
plt.title('피크 찾기')
plt.xlabel('시간 (s)')
plt.ylabel('신호 값')
plt.show()

print("찾은 피크 위치 (인덱스):", peaks)

위의 예제들은 Scipy의 신호 처리 함수인 convolve, spectrogram, 그리고 find_peaks을 사용하여 다양한 신호 처리 작업을 수행하는 방법을 보여줍니다.