在Python中高效编写和保存实时数据?

时间:2017-11-29 21:46:15

标签: python

我有一个脚本,用于从加速度计中提取数据。我可以指定加速度计的带宽(250 Hz),将采样数据速率设置为500 Hz。

我遇到的问题.txt文件没有保存我期待的样本数量,我在这里要求支持以了解我的行我将数据写入文本文件的代码是造成我瓶颈的原因。

将此文件保存在数据收集scipt中后,我将在Spyder脚本中打开.txt文件,即创建数据的实时计算和可视化,因为它正在保存第一个脚本。

'data_pull'脚本中使用了以下行,即从加速度计读取数据。下面的行是我用来写入文本文件的。

file = open("C:\\Users\\User\\Documents\\test.txt","a")
writer = csv.writer(file)
while True:
      writer.writerow(convert2g(readField()))    
      file.flush()

For Reference,加速度计数据提取脚本中的两个功能如下所示。我没有包含整个脚本,因为它与保存和写入文本文件无关。

def convert2g(raw_accs):
    return [acc / CONVERT_CONST for acc in raw_accs]

def readField():
    values = myBoard.Read(0x02, 18) #check register map

    bin_mask = 0b11110000
    acc_x_lsb = values[0] & bin_mask
    acc_x_msb = values[1] << 8
    acc_x = (acc_x_msb | acc_x_lsb)
    twos_x = twos_comp(acc_x) >> 4

    acc_y_lsb = values[2] & bin_mask
    acc_y_msb = values[3] << 8
    acc_y = (acc_y_msb | acc_y_lsb)
    twos_y = twos_comp(acc_y) >> 4

    acc_z_lsb = values[4] & bin_mask
    acc_z_msb = values[5] << 8
    acc_z = (acc_z_msb | acc_z_lsb)
    twos_z = twos_comp(acc_z) >> 4

    return twos_x, twos_y, twos_z

以下代码是我用来构建动画的代码。

import pandas as pd
import sys
import numpy as np
import easygui
import matplotlib.pyplot as plt
import matplotlib.animation as animation


def animate(i):

    data = pd.read_csv("C:\\Users\\User\\Documents\\test.txt")
    data.columns = ['X', 'Y', 'Z']
    xar = range(len(data))

    yar = pd.DataFrame(data['Z'])
    yar = yar[1050:]
    xar = xar[1050:]

    std = yar.rolling(window=10000).std()
    std = std.as_matrix()

    yar = data.as_matrix()
    yar = yar[1050:len(data)]

    ax1.clear()
    ax1.set_xlabel("Sample Number")
    ax1.set_ylabel("Standard Deviation (g)")

    ax3.clear()
    ax3.set_xlabel("Sample Number")
    ax3.set_ylabel("Acceleration (g)")
    ax1.plot(xar, std)
    ax3.plot(xar, yar)
    ax1.set_title('Rolling Standard Deviation')
    ax3.set_title('Original Data')

fig, (ax1, ax3) = plt.subplots(2, sharex = True)
fig.subplots_adjust(hspace=1.5)
ani = animation.FuncAnimation(fig, animate, interval=.01)
plt.show()

0 个答案:

没有答案