[파이썬][Scipy] 신호 처리 작업을 수행하는 함수와 필터 예제
Scipy의 scipy.signal
모듈은 신호 처리 작업을 수행하는 데 사용됩니다. 아래는 신호 처리 함수와 필터를 사용한 예제입니다.
-
신호 생성 및 푸리에 변환 예제:
주파수와 시간 영역에서 신호를 생성하고 푸리에 변환하여 주파수 영역에서 분석하는 예제입니다.
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import chirp, spectrogram
# 시간 범위
t = np.linspace(0, 10, 1000)
# 체르프 신호 생성
frequency = 3.0 # 시작 주파수
chirp_signal = chirp(t, f0=0, f1=frequency, t1=10)
# 시계열 그래프
plt.figure(figsize=(10, 4))
plt.subplot(2, 1, 1)
plt.plot(t, chirp_signal)
plt.title('체르프 신호 (시간 영역)')
# 푸리에 변환
f, t, Sxx = spectrogram(chirp_signal)
plt.subplot(2, 1, 2)
plt.pcolormesh(t, f, 10 * np.log10(Sxx))
plt.title('체르프 신호 푸리에 변환 (주파수 영역)')
plt.ylabel('주파수 [Hz]')
plt.xlabel('시간 [s]')
plt.tight_layout()
plt.show()
-
신호 필터링 예제:
주어진 신호에 대해 필터링을 수행하는 예제입니다. 여기서는 로우 패스 필터를 사용합니다.
from scipy.signal import butter, lfilter
import numpy as np
import matplotlib.pyplot as plt
# 신호 생성 (잡음이 있는 신호)
np.random.seed(0)
t = np.linspace(0, 1, 1000)
signal = np.sin(2 * np.pi * 5 * t) + 0.5 * np.random.randn(1000)
# 필터 파라미터 설정 (로우 패스 필터)
order = 6
cutoff_freq = 10.0 # 차단 주파수
# Butterworth 필터 계수 생성
b, a = butter(order, cutoff_freq / (0.5 * 1000), btype='low')
# 신호 필터링
filtered_signal = lfilter(b, a, signal)
# 결과 시각화
plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)
plt.plot(t, signal)
plt.title('원본 신호')
plt.subplot(2, 1, 2)
plt.plot(t, filtered_signal)
plt.title('로우 패스 필터링된 신호')
plt.tight_layout()
plt.show()
Scipy의 scipy.signal
모듈을 사용하면 다양한 신호 처리 작업을 수행할 수 있습니다. 이를 통해 신호의 생성, 분석, 필터링, 스펙트럼 분석 등을 수행할 수 있습니다.