Загрузка графика реального времени данными из другого скрипта

#python #arrays #plot #signal-processing #fft

#python #массивы #график #обработка сигналов #бпф

Вопрос:

  1. Я извлекаю данные ускорения с датчика, подключенного к ESP32 через последовательный порт. Скрипт 1 создает массив фиксированного размера из этих данных и обновляет его, как только поступают новые данные.

    Форма массива (1024, 4):

    idx 1 [ data_x, данные, _y data_z, время ] del



    idx 1024 [ data_x, data _y, data_z, time ] добавить

  2. теперь я хочу передать этот обновленный массив в сценарий 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