[파이썬] scipy에서 스펙트럼 분석

스펙트럼 분석은 신호 또는 데이터의 주파수 내용을 분석하는 기술입니다. 이는 음악, 음성, 센서 데이터 등 다양한 분야에서 사용됩니다. 파이썬의 scipy 라이브러리는 스펙트럼 분석을 위한 다양한 도구와 함수를 제공합니다. 이 블로그 포스트에서는 scipy를 사용하여 스펙트럼 분석을 어떻게 수행하는지 살펴보겠습니다.

1. 필요한 라이브러리 설치

스펙트럼 분석을 위해 scipy, numpy, matplotlib 등의 라이브러리가 필요합니다. 다음 명령어를 사용하여 필요한 라이브러리를 설치합니다.

pip install scipy numpy matplotlib

2. 스펙트럼 분석 방법

다음은 주요한 스펙트럼 분석 방법 중 일부입니다:

2.1. FFT (Fast Fourier Transform)

FFT는 Fast Fourier Transform의 약자로, 이는 시간 도메인의 신호를 주파수 도메인으로 변환하는 기술입니다. FFT를 사용하면 주파수 영역에서 신호를 분석할 수 있습니다.

import numpy as np
import matplotlib.pyplot as plt

# 입력 신호 생성
t = np.linspace(0, 1, 1000)
x = np.sin(2 * np.pi * 50 * t) + np.sin(2 * np.pi * 120 * t)

# FFT 계산
fft = np.fft.fft(x)

# 주파수 영역 생성
f = np.linspace(0, 1 / (2 * t[1]), len(t) // 2)

# FFT 결과 표시
plt.plot(f, 2 / len(t) * np.abs(fft[:len(t) // 2]))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.show()

2.2. STFT (Short-Time Fourier Transform)

STFT는 Short-Time Fourier Transform의 약자로, 시간에 따라 신호를 작은 조각으로 나눈 후에 각 조각에 대해 FFT를 적용하는 기술입니다. 이를 통해 신호의 시간 및 주파수 정보를 동시에 분석할 수 있습니다.

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import stft

# 입력 신호 생성
t = np.linspace(0, 1, 1000)
x = np.sin(2 * np.pi * 50 * t) + np.sin(2 * np.pi * 120 * t)

# STFT 계산
f, t, Zxx = stft(x, fs=1000, nperseg=100, noverlap=50)

# STFT 결과 표시
plt.pcolormesh(t, f, np.abs(Zxx), shading='auto')
plt.colorbar()
plt.xlabel('Time (s)')
plt.ylabel('Frequency (Hz)')
plt.show()

3. 결론

scipy를 이용하여 파이썬에서 스펙트럼 분석을 수행하는 방법에 대해 알아보았습니다. 이러한 분석 기술을 사용하면 다양한 신호 및 데이터를 주파수 도메인에서 분석하고 시각화할 수 있습니다. 스펙트럼 분석은 신호 처리, 음악 프로세싱, 센서 데이터 분석 등 다양한 분야에서 유용하게 활용될 수 있습니다.

참고문서: