[python] NumPy의 신호 처리 기능

NumPy는 파이썬의 핵심 라이브러리 중 하나로, 다차원 배열을 다루는 기능을 제공합니다. 이러한 기능을 활용하여 신호 처리와 관련된 다양한 작업을 수행할 수 있습니다. 이번 포스트에서는 NumPy를 사용하여 어떻게 신호 처리를 할 수 있는지 알아보겠습니다.

1. NumPy로 신호 생성하기

먼저, NumPy를 사용하여 간단한 신호를 생성해보겠습니다. 아래의 예제 코드는 1초 동안의 샘플링 주파수가 1000Hz인 사인파를 생성하는 방법을 보여줍니다.

import numpy as np
import matplotlib.pyplot as plt

# 시간 변수 생성
t = np.arange(0, 1, 0.001)

# 사인파 생성
f = 5  # 주파수
signal = np.sin(2 * np.pi * f * t)

# 시각화
plt.plot(t, signal)
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.title('Sine Wave')
plt.show()

2. 신호 필터링

NumPy를 사용하여 신호에 대한 필터링 작업을 수행할 수도 있습니다. 아래의 예제 코드는 주파수가 5Hz인 신호에 대해 저주파 통과 필터를 적용하는 방법을 보여줍니다.

from scipy import signal

# 신호에 대한 저주파 통과 필터 생성
b, a = signal.butter(4, 0.1, 'low')
filtered_signal = signal.filtfilt(b, a, signal)

# 시각화
plt.plot(t, filtered_signal)
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.title('Filtered Signal')
plt.show()

3. 주파수 분석

NumPy를 사용하여 주파수 분석 역시 간단하게 수행할 수 있습니다. 아래의 예제 코드는 사인파의 주파수를 분석하는 방법을 보여줍니다.

# 주파수 분석
n = len(signal)
frequencies = np.fft.fftfreq(n, d=0.001)
mask = frequencies > 0
fft_values = np.fft.fft(signal)
mag_values = 2.0/n * np.abs(fft_values)

# 시각화
plt.plot(frequencies[mask], mag_values[mask])
plt.xlabel('Frequency [Hz]')
plt.ylabel('Magnitude')
plt.title('Frequency Spectrum')
plt.show()

결론

NumPy를 사용하면 간편하게 신호 처리 관련 작업을 수행할 수 있습니다. 이를 통해 다양한 응용 프로그램에 활용할 수 있는 신호 처리 기능을 구현할 수 있습니다.

참고 문헌: