import sys
import serial
import numpy as np
import matplotlib.pyplot as plt
from collections import deque
port = "COM11"
baud = 9600
timeout=1
ser = serial.Serial()
ser.port = port
ser.baudrate = baud
ser.timeout = timeout
a1 = deque([0.0]*100)
#ax = plt.axes(xlim=(0, 100), ylim=(0, 1000))
line, = plt.plot(a1)
plt.ion()
plt.ylim([0,1000])
try:
ser.open()
except:
sys.stderr.write("Error opening serial port %s\n" % (ser.portstr))
sys.exit(1)
#ser.setRtsCts(0)
while 1:
# Read from serial port, blocking
data = ser.read(1)
# If there is more than 1 byte, read the rest
n = ser.inWaiting()
data = data + ser.read(n)
#sys.stdout.write(data)
print(a1)
a1.appendleft((data))
datatoplot = a1.pop()
line.set_ydata(a1)
plt.draw()
시리얼 포트 값과 샘플 포인트 사이에 플롯이 나타납니다. 나는 시간 대 연속 플롯 값을 플로팅하고 싶다. 우리가 freqs = scipy.fftpack.fftfreq 사용하여 주파수 값에 샘플 포인트를 변환하는 방법을 같은 시간 값에 샘플 포인트를 변환하는 방법, 무언가가 (n은, D) 감사샘플 포인트 시간 값을 변환하십시오.
위 코드에서 코드를 변경했고 플롯을 얻었습니다 단일 사인파 즉 한 번만 사용할 수 있습니다. 그 물결은 은 9 점에 도달 한 후에 있도록 (내 x 축이 시간 값을 표시해야합니다 plot.I에서 시간 대 사인파를 플롯 할 (내 양단 큐의 길이 (10)를 촬영 한) 앞으로 여행을 유지하고 사라 I 웨이브의 시간주기를 알려줄 수 있습니다. 주파수를 확인하기 위해 fft를하면 안됩니다. 수 있습니다. 이것처럼 끝내야 해. – user3805148
적어도 내 코드 ('line.pop()'에'dlist.pop'가 있어야했던 버그가있었습니다). 빈도 만보고 싶다면 첫 번째 샘플을 항상 0 시간으로 유지하도록 첫 번째 솔루션 (실험 시작부터 초)을 사용하거나 고정 된 시간 척도를 유지하려는 것이 가장 좋습니다. 그리고, 네, 물론 할 수 있습니다. – DrV