Matplotlib로 세로 크기 스펙트럼 그리기
신호 분석에서 크기 스펙트럼(magnitude spectrum)은 신호에 포함된 각 주파수 성분의 세기를 시각적으로 보여주는 중요한 도구입니다. Matplotlib의 magnitude_spectrum() 메서드를 사용하면 복잡한 푸리에 변환 계산을 직접 구현하지 않고도 손쉽게 스펙트럼을 그릴 수 있으며, 이 메서드는 기본적으로 세로(vertical) 방향 선 스펙트럼을 출력합니다.
크기 스펙트럼을 그리려면 다음 단계를 따르세요.
figure.figsize와figure.autolayoutrcParams를 설정해 그림 크기와 서브플롯 주변 여백을 조정합니다.np.random.seed()로 난수 시드를 고정해 재현 가능한 결과를 만듭니다.- 샘플링 간격 dt를 정의하고, 이를 바탕으로 샘플링 주파수(Fs = 1/dt)를 계산합니다.
np.arange()로 시간 축 데이터 포인트 t를 생성합니다.- numpy를 사용해 노이즈(nse, r, cnse)와 최종 신호(s)를 생성합니다.
subplots()메서드로 figure와 axes 객체를 생성합니다.set_title()로 플롯 제목을 지정합니다.magnitude_spectrum()으로 세로 방향 크기 스펙트럼을 그립니다.show()메서드로 결과를 화면에 표시합니다.
예제 코드
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
np.random.seed(0)
dt = 0.01 # 샘플링 간격
Fs = 1 / dt # 샘플링 주파수
t = np.arange(0, 10, dt)
# 노이즈 생성:
nse = np.random.randn(len(t))
r = np.exp(-t / 0.05)
cnse = np.convolve(nse, r) * dt
cnse = cnse[:len(t)]
s = 0.1 * np.sin(4 * np.pi * t) + cnse
fig, axs = plt.subplots()
axs.set_title("Longitudinal Magnitude Spectrum")
axs.magnitude_spectrum(s, Fs=Fs, scale='dB', color='C1')
plt.show()실행 결과

코드 핵심 설명
이 예제에서는 진동수 2Hz(4π rad/s)의 사인파 신호에 백색 잡음을 컨볼루션하여 실제와 유사한 신호를 만들었습니다. magnitude_spectrum() 메서드의 주요 매개변수는 다음과 같습니다.
- Fs: 샘플링 주파수로, 주파수 축의 스케일을 결정합니다.
- scale: 'dB'로 설정하면 데시벨(dB) 단위로, 'linear'로 설정하면 선형 스케일로 표시됩니다.
- color: 스펙트럼 곡선의 색상을 지정합니다. 'C1'은 기본 색상 순환의 두 번째 색인 주황색입니다.
별도의 추가 설정 없이도 magnitude_spectrum()은 세로 방향 선 형태로 스펙트럼을 그려주므로, 위 코드만으로 세로 크기 스펙트럼을 간단하게 완성할 수 있습니다.