android绘制HL7 xml(aEcg)波形的简要方法

编者:李国帅

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进行结构和数据分析。

展开阅读全文

没有更多推荐了,返回首页