파이썬을 이용한 사인 신호 생성 및 시각화

Beginner

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

소개

이 랩에서는 Python 의 Matplotlib 라이브러리를 사용하여 사인 신호를 생성하고 가산 노이즈 (additive noise) 를 시각화하는 과정을 안내합니다. 특히, 고속 푸리에 변환 (FFT, fast Fourier transform) 을 사용하여 신호의 다양한 스펙트럼 표현을 생성할 것입니다.

VM 팁

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

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

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

필요한 라이브러리 임포트

먼저, 필요한 라이브러리를 임포트해야 합니다. NumPy 와 Matplotlib 을 사용할 것입니다.

import matplotlib.pyplot as plt
import numpy as np

변수 설정

다음으로, 신호에 대한 변수를 설정합니다. 샘플링 간격은 0.01 로 설정하며, 이는 100 Hz 의 샘플링 주파수를 제공합니다. 0 초에서 10 초까지 0.01 초 간격으로 시간 배열을 생성합니다. 또한 NumPy 의 randn 함수를 사용하여 노이즈를 생성하고, 지수 감쇠 함수와 컨볼루션 (convolve) 하여 노이즈가 있는 신호를 생성합니다.

np.random.seed(0)

dt = 0.01  ## sampling interval
Fs = 1 / dt  ## sampling frequency
t = np.arange(0, 10, dt)

## generate noise:
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  ## the signal

플롯 생성

이제 다양한 스펙트럼 표현에 대한 플롯을 생성합니다. Matplotlib 의 subplots 함수를 사용하여 3x2 그리드의 플롯을 생성합니다. 첫 번째 플롯에는 시간 신호를, 나머지 플롯에는 다양한 스펙트럼 유형을 플롯합니다.

fig, axs = plt.subplots(nrows=3, ncols=2, figsize=(7, 7))

## plot time signal:
axs[0, 0].set_title("Signal")
axs[0, 0].plot(t, s, color='C0')
axs[0, 0].set_xlabel("Time")
axs[0, 0].set_ylabel("Amplitude")

## plot different spectrum types:
axs[1, 0].set_title("Magnitude Spectrum")
axs[1, 0].magnitude_spectrum(s, Fs=Fs, color='C1')

axs[1, 1].set_title("Log. Magnitude Spectrum")
axs[1, 1].magnitude_spectrum(s, Fs=Fs, scale='dB', color='C1')

axs[2, 0].set_title("Phase Spectrum ")
axs[2, 0].phase_spectrum(s, Fs=Fs, color='C2')

axs[2, 1].set_title("Angle Spectrum")
axs[2, 1].angle_spectrum(s, Fs=Fs, color='C2')

axs[0, 1].remove()  ## don't display empty ax

fig.tight_layout()
plt.show()

플롯 해석

첫 번째 플롯은 시간 도메인에서 신호를 보여줍니다. 두 번째 플롯은 신호의 크기 스펙트럼 (magnitude spectrum) 을 보여주며, 이는 신호 내의 다양한 주파수 성분의 강도를 알려줍니다. 세 번째 플롯은 로그 크기 스펙트럼 (logarithmic magnitude spectrum) 을 보여주며, 매우 크거나 작은 값이 있는 경우 전체 스펙트럼을 시각화하는 데 유용합니다. 네 번째 플롯은 위상 스펙트럼 (phase spectrum) 을 보여주며, 이는 신호 내 각 주파수 성분의 위상 변화를 알려줍니다. 마지막으로, 다섯 번째 플롯은 각도 스펙트럼 (angle spectrum) 을 보여주며, 이는 위상 스펙트럼과 유사하지만 도 (degrees) 대신 라디안 (radians) 을 사용합니다.

요약

이 랩에서는 가산 노이즈 (additive noise) 가 있는 사인 신호를 생성하고, Python 의 Matplotlib 라이브러리를 사용하여 신호의 다양한 스펙트럼 표현을 만들었습니다. 우리는 다양한 스펙트럼 유형을 해석하는 방법과 신호 분석에 어떻게 유용한지 배웠습니다.