将测量的数据动态表现可以比较形象传递对比信息。下面通过TEASOFT软件绘制出数据的动态过程。
数据来自于惯性测量单元(IMU),它输出四路信号:一路是陀螺仪,三路是加速度计。
01惯性单元的基本情况
这是一款模拟输出的惯性测量传感器单元。
其中集成了陀螺仪:JPN MB 326;三轴加速度计:7260
工作电压5V。
在其保持垂直状态下,使用 八通道AD7606数据采集模块 采集陀螺仪,加速度计的输出电压信号,估计对应的均值和噪声情况。
采集10秒中的数据,采样率1kHz。统计输出信号的均值和方差。
- 陀螺仪输出的均值:1.7056V;方差:3.9857×10-5。
- 加速度计输出均值:1.7561V;方程:6.0229×10-5。
02采集动态数据显示
通过手持IMU左右晃动,同时使用 基于AD7606八通道高速数据采集模块 采集IMU输出的四路模拟信号。
八秒中的信号的波形如下图所示:
通过TEASOFT软件可以将动态过程与数据的变化有效的结合在一起。在TEASOFT软件建立起显示数据的坐标系。同时使用长度为500的四种颜色的曲线来显示采集的实时数据。
通过PlotGIF()录制在采集框内的所有对象,最后生成动态的GIF图像。下面给出了对应的生成结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #!/usr/local/bin/python # -*- coding: gbk -*- #============================================================ # DRAW1.PY -- by Dr. ZhuoQing 2020-06-05 # # Note: #============================================================ from headm import * from tsmodule.tsdraw import * pltgif = PlotGIF() xyc = XYCoor(3, 4, 22, 21, 200, 3) #------------------------------------------------------------ data = tspload('data9', 'data') rangeid = 38 gifid = tspgetgifid()[0] curve = [9, 10, 11, 12] #------------------------------------------------------------ gifpages = tspgetgifpage(gifid) data = [d-0.5 for d in data] gyro = data[0::4] accz = data[1::4] accx = data[2::4] accy = data[3::4] datalen = len(gyro) curvelen = tspgetcurvelength(curve[0]) printff('Gif:%d pages, Data %d, Curve:%d'%(gifpages, datalen, curvelen)) #------------------------------------------------------------ gyrodata = [0] * curvelen acczdata = [0] * curvelen accxdata = [0] * curvelen accydata = [0] * curvelen #------------------------------------------------------------ def buf2data(buf, buflen, datalen, begin): data = buf[0] * datalen if begin >= datalen and begin < buflen: data = buf[begin - datalen:begin] elif begin < datalen and begin >= 0: data = [buf[0]] * datalen start = datalen - begin data[start:datalen] = buf[0:begin] elif begin > buflen and begin < buflen + datalen: data = [buf[-1]] * datalen endn = begin - datalen data[0:endn] = buf[end:] return data def setcurvedata(begin): global gyrodata, acczdata, accxdata, accydata gyrodata = buf2data(gyro, datalen, curvelen, begin) acczdata = buf2data(accz, datalen, curvelen, begin) accxdata = buf2data(accx, datalen, curvelen, begin) accydata = buf2data(accy, datalen, curvelen, begin) def page2begin(page): if page < 0: return 0 if page >= gifpages: return datalen return int(page * (datalen - curvelen) / gifpages) def begin2page(begin): return int(begin * gifpages * 0.95 /datalen) #------------------------------------------------------------ #gifpages = int(gifpages * .8) steps = 200 for i in range(steps): # begin = page2begin(i) # printf('Gif:%d, Begin:%d'%(i, begin)) begin = int(i * datalen / steps) page = begin2page(begin) printf("Gif:%d, Begin:%d"%(page, begin)) setcurvedata(begin) xyc.SetCurveY(gyrodata, curve[0]) xyc.SetCurveY(acczdata, curve[1]) xyc.SetCurveY(accxdata, curve[2]) xyc.SetCurveY(accydata, curve[3]) tspgotogifpage(gifid, page) tsprv() pltgif.appendrange(rangeid) #pltgif.save(r'd:\temp\1.gif', 35, 35) #------------------------------------------------------------ printf('\a') #------------------------------------------------------------ # END OF FILE : DRAW1.PY #============================================================ |
结论
由于数据采集和GIF的录制是同时异步进行的,从显示的结果来看,数据的变化与GIF图像之间还是有一些不同步的地方。这就大大限制了动图可视化的效果。
至于为什么在同时录制的过程中出现了这样的异步情况,现在还不得而知。