编者:李国帅
qq:9611153 微信lgs9611153
时间:2018/11/26
背景原因:
大约2年前接触过心电图的显示,做过部分工作,整理总结一下也算是雁过留影吧。
本人是门外汉,管窥那么一点点,这里只是对他人项目的理解。
HL7格式是心电图存储的主要格式之一,与DICOM格式各有优劣,要在手机上绘制的心电图,HL7格式文件还是比较方便的。
本文要讨论的重点如何在android设备上绘制HL7( xml格式)文件中的心电数据,不考虑注解,样例,病人信息等内容等,不对心电图数据作分析。
仅作设计分析,不做代码介绍。
所需资源:
Android设备,AS开发工具,HL7格式文件。
总体介绍:
首先看一下大致的思路,
如图
流程说明:
1、我们要处理两部分内容:数据处理和界面显示。
2、先拿到aecg文件,然后使用xml解析库进行解析,读取电压时间序列。
3、设计好显示界面和界面的显示缓冲,把电压时间序列映射到显示缓冲,然后使用opengl.GLSurfaceView.Renderer进行渲染。
4、如果使用数据为非实时数据,那么需要一次性读出数据,然后定时读取显示,直到显示结束。
难点分析
数据传输与读取是常见技术,不是难点。
本文对心电数据不作分析,而HL7中的aecg xml格式简单,容易理解,其内容读取即可。
所以重点就在心电图形的绘制。
Opengl的展示照葫芦画瓢即可。重点内容在于心电数据到显示缓冲的映射关系。
映射关系思路
时间关系
假设我们要把10秒的(1000赫兹/秒)数据映射到(-10,10),假设此心电图的心率为60次/分。
每秒钟一个周期,要把10秒钟的数据绘制到(-10,10)范围。
心电图中的每个小格0.04s,每个周期就需要5个小格,5个小格绘制合为一个大格。
也就是说20f的空间需要绘制50个大格(250小格)的心电。
如果每一小格绘制一次的话,那么每次绘制40个心电数据,0.08个显示空间,代表0.04秒.
如果使用定时器,需要每1000/40毫秒读取一次数据,每次40个数据。
不必要所有的数据都用上,可以每8个数据取一个作为显示样本,每次仅需要处理5个数据。那么就把5个数据均匀绘制在0.08f的空间上,以此作为数据的X轴坐标。
电压关系
电压关系比较简单,我们可以把上下低于1000uV的电压数据绘制在(-0.5,0.5)的区间,那么就需要把电压数据乘以0.0005,直接换算为坐标数据。
网格的绘制
在显示区域绘制一个背景,假设显示大小(800*600)。
时间区间:设定显示区间在(-10,10),那么,绘制的时间线为:小格共20/0.1= 200个,大格共200/5=40个,每600/200=3像素绘制一个点或者线。
电压绘制位置和时间类似。
显示例子
以上分析参考例程EcgGather进行结构和数据分析。