#python #arrays #plot #signal-processing #fft
#python #массивы #график #обработка сигналов #бпф
Вопрос:
- Я извлекаю данные ускорения с датчика, подключенного к ESP32 через последовательный порт. Скрипт 1 создает массив фиксированного размера из этих данных и обновляет его, как только поступают новые данные.
Форма массива (1024, 4):
idx 1 [ data_x, данные, _y data_z, время ] del
…
…
…
idx 1024 [ data_x, data _y, data_z, time ] добавить - теперь я хочу передать этот обновленный массив в сценарий 2, который представляет собой анимированный график, показывающий БПФ данных ускорения в реальном времени
Это работает, если я записываю каждую строку данных в CSV и извлекаю из нее данные с помощью скрипта 2, CSV в конечном итоге раздувается, и построение графика отстает.
Я пытался снова и снова записывать весь массив в CSV, но часто скрипт 2 не может извлекать данные, делая график лагающим или просто неправильным.
Сценарий 1:
while True:
if s.readline() == b'strn':
payload = []
while len(payload) < 3:
payload.append(s.readline())
try:
ACCEL_X = float(payload[0])
ACCEL_Y = float(payload[1])
ACCEL_Z = float(payload[2])
ACCEL_X_SCALED = (ACCEL_X*g) / 16384.0
ACCEL_Y_SCALED = (ACCEL_Y*g) / 16384.0
ACCEL_Z_SCALED = (ACCEL_Z*g) / 16384.0
n = 1
except:
print('discarded - no data')
if float(time.perf_counter()) > float(start_time k):
k = T
print(k, n)
Fs = n
n = 0
chunk = np.array([ACCEL_X_SCALED, ACCEL_Y_SCALED, ACCEL_Z_SCALED,
time.perf_counter() - start_time])
chnkLst.append(chunk)
if len(chnkLst) == samples 1:
del chnkLst[0]
chnkArr = np.asarray(chnkLst)
часть скрипта 2 извлекает данные
def animate(i):
df = pd.read_csv('data.csv', header = None)
x = df[0].values
y = df[1].values
z = df[2].values
Итак, каков правильный способ подачи данных в сценарий 2?
Комментарии:
1. похоже, вам нужна возможность асинхронности
2. docs.python.org/3/library/asyncio.html
3. спасибо за ответы, я попробовал решение csv еще раз. я просто усекаю csv после 4096 строк. график в реальном времени теперь работает buttersmooth