[파이썬][Scipy] 신호 처리 작업을 수행하는 함수와 필터 예제

Scipy의 scipy.signal 모듈은 신호 처리 작업을 수행하는 데 사용됩니다. 아래는 신호 처리 함수와 필터를 사용한 예제입니다.

  1. 신호 생성 및 푸리에 변환 예제:

    주파수와 시간 영역에서 신호를 생성하고 푸리에 변환하여 주파수 영역에서 분석하는 예제입니다.

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()
  1. 신호 필터링 예제:

    주어진 신호에 대해 필터링을 수행하는 예제입니다. 여기서는 로우 패스 필터를 사용합니다.

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 모듈을 사용하면 다양한 신호 처리 작업을 수행할 수 있습니다. 이를 통해 신호의 생성, 분석, 필터링, 스펙트럼 분석 등을 수행할 수 있습니다.