Matplotlib 을 이용한 스펙트로그램 플롯

Beginner

This tutorial is from open-source community. Access the source code

소개

이 랩에서는 Matplotlib 을 사용하여 스펙트로그램 (spectrogram) 플롯을 만드는 방법을 배웁니다. 스펙트로그램은 신호의 주파수 스펙트럼이 시간에 따라 어떻게 변하는지를 시각적으로 표현한 것입니다. 스펙트로그램은 음성 인식, 음악 분석, 오디오 신호 처리 등에서 신호의 주파수 내용을 시간 경과에 따라 분석하는 데 일반적으로 사용됩니다. Python 과 Matplotlib 을 사용하여 신호의 스펙트로그램 플롯을 생성할 것입니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접속하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.

라이브러리 임포트

필요한 라이브러리인 NumPy 와 Matplotlib 을 임포트하는 것으로 시작합니다.

import matplotlib.pyplot as plt
import numpy as np

신호 생성

다음으로, 플롯할 신호를 생성합니다. 이 예제에서는 서로 다른 주파수를 가진 두 개의 사인파와 약간의 무작위 노이즈의 합으로 구성된 신호를 생성합니다.

## Fixing random state for reproducibility
np.random.seed(19680801)

dt = 0.0005
t = np.arange(0.0, 20.0, dt)
s1 = np.sin(2 * np.pi * 100 * t)
s2 = 2 * np.sin(2 * np.pi * 400 * t)

## create a transient "chirp"
s2[t <= 10] = s2[12 <= t] = 0

## add some noise into the mix
nse = 0.01 * np.random.random(size=len(t))

x = s1 + s2 + nse  ## the signal

스펙트로그램 생성

이제 신호의 스펙트로그램 플롯을 생성합니다. Matplotlib 의 Axes 클래스에서 specgram 메서드를 사용하여 스펙트로그램을 생성합니다. 이 메서드는 Pxx, freqs, bins, 그리고 im의 네 가지 객체를 반환합니다. Pxx는 periodogram(주기율도), freqs는 주파수 벡터, bins는 시간 빈 (time bin) 의 중심, 그리고 im은 플롯의 데이터를 나타내는 AxesImage 인스턴스입니다.

NFFT = 1024  ## the length of the windowing segments
Fs = int(1.0 / dt)  ## the sampling frequency

fig, (ax1, ax2) = plt.subplots(nrows=2)
ax1.plot(t, x)
Pxx, freqs, bins, im = ax2.specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900)

플롯 사용자 정의

제목, 축 레이블 및 컬러 맵을 추가하여 플롯을 사용자 정의할 수 있습니다.

fig, (ax1, ax2) = plt.subplots(nrows=2)
ax1.set_title('Time Domain Signal')
ax1.set_xlabel('Time (s)')
ax1.set_ylabel('Amplitude')
ax1.plot(t, x)

ax2.set_title('Spectrogram')
ax2.set_xlabel('Time (s)')
ax2.set_ylabel('Frequency (Hz)')
im = ax2.specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900, cmap='viridis')
fig.colorbar(im[3], ax=ax2)

플롯 표시

마지막으로, 플롯을 표시합니다.

plt.show()

요약

이 랩에서는 Matplotlib 을 사용하여 스펙트로그램 플롯을 생성하는 방법을 배웠습니다. 신호를 생성하고 Matplotlib 의 Axes 클래스에서 specgram 메서드를 사용하여 스펙트로그램 플롯을 생성했습니다. 또한 제목, 축 레이블 및 컬러 맵을 추가하여 플롯을 사용자 정의했습니다. 스펙트로그램은 시간 경과에 따른 신호의 주파수 내용을 분석하는 데 유용하며 음성 인식, 음악 분석 및 오디오 신호 처리에 일반적으로 사용됩니다.