Matplotlib 로 실시간 오실로스코프 만들기

Beginner

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

소개

이 튜토리얼은 Python 의 Matplotlib 라이브러리를 사용하여 오실로스코프를 만드는 방법에 대한 단계별 가이드입니다. 오실로스코프는 시간 경과에 따른 전압 신호를 측정하고 표시하는 데 사용되는 장치입니다. 이 튜토리얼에서는 Matplotlib 의 애니메이션 모듈을 사용하여 전압 신호의 실시간 디스플레이를 생성합니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 액세스하십시오.

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

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

라이브러리 가져오기

코딩을 시작하기 전에 필요한 라이브러리를 가져와야 합니다. Matplotlib, NumPy 및 animation 모듈을 사용합니다.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
from matplotlib.lines import Line2D

Scope 클래스 설정

Scope 클래스는 오실로스코프를 생성하는 데 필요한 데이터와 메서드를 보유합니다. 생성자에서 필요한 변수를 초기화하고 플롯을 설정합니다.

class Scope:
    def __init__(self, ax, maxt=2, dt=0.02):
        self.ax = ax
        self.dt = dt
        self.maxt = maxt
        self.tdata = [0]
        self.ydata = [0]
        self.line = Line2D(self.tdata, self.ydata)
        self.ax.add_line(self.line)
        self.ax.set_ylim(-.1, 1.1)
        self.ax.set_xlim(0, self.maxt)

Update 메서드 정의

update 메서드는 애니메이션의 각 프레임마다 호출됩니다. 새로운 값을 입력받아 그에 따라 플롯을 업데이트합니다.

def update(self, y):
        lastt = self.tdata[-1]
        if lastt >= self.tdata[0] + self.maxt:  ## reset the arrays
            self.tdata = [self.tdata[-1]]
            self.ydata = [self.ydata[-1]]
            self.ax.set_xlim(self.tdata[0], self.tdata[0] + self.maxt)
            self.ax.figure.canvas.draw()

        t = self.tdata[0] + len(self.tdata) * self.dt

        self.tdata.append(t)
        self.ydata.append(y)
        self.line.set_data(self.tdata, self.ydata)
        return self.line,

Emitter 함수 생성

emitter 함수는 update 메서드로 전달될 데이터를 생성합니다. 이 경우, 확률 0.1 로 랜덤 데이터를 생성합니다.

def emitter(p=0.1):
    while True:
        v = np.random.rand()
        if v > p:
            yield 0.
        else:
            yield np.random.rand()

플롯 설정

새로운 figure 와 axis 객체를 생성하고 Scope 클래스를 초기화합니다. 그런 다음 update 및 emitter 함수를 FuncAnimation 메서드에 전달하여 애니메이션을 생성합니다.

fig, ax = plt.subplots()
scope = Scope(ax)

ani = animation.FuncAnimation(fig, scope.update, emitter, interval=50,
                              blit=True, save_count=100)

plt.show()

요약

이 튜토리얼에서는 Matplotlib 을 사용하여 시간에 따른 전압 신호를 표시하는 오실로스코프를 만드는 방법을 배웠습니다. 오실로스코프에 필요한 데이터와 메서드를 담는 Scope 클래스를 정의하고, 플롯을 업데이트하는 update 메서드를 생성했으며, emitter 함수를 사용하여 데이터를 생성했습니다. 마지막으로, 플롯을 설정하고 update 및 emitter 함수를 FuncAnimation 메서드에 전달하여 애니메이션을 생성했습니다.