微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 基于GPRS的远程心电实时监护仪软件系统设计

基于GPRS的远程心电实时监护仪软件系统设计

时间:02-10 来源:清华大学深圳研究生院 李继明,张 跃,陈 可 点击:

当今社会,心脏疾病已严重影响了人们的生命安全,许多突发患者因得不到及时救治而使生命受到威胁。传统的心电监护设备限制了患者的自由,动态心电记录仪(Holter)虽能便携地记录患者日常活动时的心电数据,但是没有实时监护功能,对于危及生命的突发心脏病变帮助不大。

无线通信技术的日渐成熟使便携式心电实时监护成为可能。利用GPRS无线数据通信技术,可将实时监护功能与Holter结合起来。患者可以配戴监护仪自由活动,同时可随时随地得到心电监护。紧急情况发生时,患者掌握着可靠的求生路径;而医生可根据全面的心电数据分析患者心脏状况,使患者的心脏疾病及时得到预防和救治。

400Hz或500Hz采样的心电数据是一种带宽较大的数据源,同时心电监护也有实时性要求。本文主要阐述在特定硬件平台和整体系统设计下的远程心电实时监护仪软件系统的设计。

1 远程心电实时监护系统概述

远程心电实时监护系统包括四个部分:监护仪(病人终端)、PDA(医生终端)、监护服务器以及心电数据服务器。系统结构如图1所示。

监护仪由患者随身佩带,以400Hz或500Hz的采样频率对患者心电信号采样,并把心电数据通过GSM/GPRS网络发送给监护服务器,数据的实时性由监护服务器和监护仪之间的控制信息控制。PDA接收来自监护服务器的数据,并根据心电分析的结果通过数据服务(GPRS数据服务)和短消息(SMS)通知监护仪。监护服务器负责接收转存病人端全部心电数据,实时分析及回放分析;同时向PDA转发实时心电数据,利用控制信息来协调实时心电数据的收发。心电数据服务器存储所有心电数据、患者信息以及设备信息,除了在监护过程中存储心电数据外,心电数据服务器还负责注册患者和设备信息及管理数据库远程访问等任务。

2 监护仪硬件平台简介

监护仪硬件主要由单片机、电源模块、心电信号采集放大模块、扩展NAND Flash、LCD驱动模块及GSM/GPRS无线通信模块组成。
(1)单片机:PIC18系列单片机,低功耗,通过PLL倍频指令频率可达10MHz,自带ADC采样频率最高可达几十kHz。
(2)电源模块:为各模块提供4V和3.3V两种直流电压源。
(3)心电信号采集放大模块:微弱心电信号采集并放大800倍,同时可检测导联脱落。
(4)扩展NAND Flash:32M NAND Flash,最多可存储长达23小时的原始心电数据。
(5)LCD驱动模块:驱动80×160点阵的LCD。
(6)GSM/GPRS无线通信模块:内嵌TCP(UDP)/IP协议栈,利用Socket建立网络连接,在应用GPRS发送数据的同时,仍可以提供GSM语音、短信(SMS)服务。

3 软件系统关键技术

监护仪软件系统的核心是管理Flash、GPRS网络、无线模块的GSM功能及LCD。

3.1 Flash管理

Flash存储器用于存储心电数据和控制信息,以保证心电数据在断电时不遗失及日后查看监护过程的相关控制信息。

内存映射(Memory Map)模型把Flash作为一个整体,各种不同数据按照类别预先分配存储空间。操作Flash数据时,首先把内部索引(譬如数据索引或者消息索引)映射到分区地址,剔除无效存储单元,再通过Flash操作函数读取或写入相应的数据。

3.1.1 Flash分区结构

(1)Head Seg:大小为1个块(Block),用于存储分区版本号、坏块表及其余分区的基本信息,包括分区起始地址(BaseAdd)、分区跨度(以块为单位)、分区最高地址、数据区(Data Seg)中的数据范围、数据区中数据的格式(FMT)、消息区(SMS Seg)所有消息的联系人列表等,每个分区的基本信息占一页(Page)。本分区占Flash存储器的第一个块。根据Flash的技术资料可知,第一块正常使用时不会出现无效存储单元,因此许多关键数据保存于此。

(2)Data Seg:大小为1000个块,即1000个连续的有效块,用于存储心电数据。如果采样频率为400Hz,采样位数为8位,数据区可存储11.37小时的原始心电数据,所有的心电数据从采样起始点0开始依次编号即心电数据索引,利用该索引寻址。

(3)SMS Seg:大小为20个块,即20个连续的有效块。每个块存储一条消息的位图,消息的到达时间、发送者存储在该Block的第一页(该块中相对地址为0的页)。消息存满则从头开始覆盖已有消息,利用消息的索引号来寻址。

Flash分区结构示意图如图2所示。
3.1.2 Flash接口函数

Flash的读操作,首先从存储单元中以页(page)为单位把数据读入Flash内部的寄存器中,然后再把数据导入处理器的存储器。读操作的操作耗时为几十微秒,与单片机的指令周期大致匹配。读操作以页为基本单元,以读取整页数据效率最高。Flash页读取操作一般不会产生错误,Flash文件系统会有纠错操作,最简单的纠错码可以把非连续的单个位错误改正。而对于当前处理器上的内存映射模型,纠错码的引入将大大降低运行效率,因此不做纠错处理。

(1)FlashPageRead():首先锁存起始操作字节的行列地址,送入Read指令,随后的每个读操作时序把当前字节读出,当前地址指针加1并把数据存储到读操作缓冲区中,同时调用函数时须给出读出字节的总数。

Flash的写操作,又称为对Flash的编程,即把数据存储到Flash存储单元中。存储单元事先必须已擦除(Erase)过才能写入数据。写操作耗时为几百微秒,擦除操作耗时最多为几毫秒,在数量级上已大大超过了RAM的写操作。利用内存映射模型操作Flash的难点在于合理调度使Flash存储单个字节的耗时与处理器的指令周期相匹配。每次写操作要尽可能多地写入数据,一般每页(512B)写入一次。写操作与擦除操作可能产生坏块,因此须通知主程序是否产生坏块。

(2)FlashProgram():首先锁存写入数据起始字节的行列地址,随后按照函数调用时给定的写入数据总数,每个写操作时序向Flash寄存器存储一个字节的数据。当寄存器满,送入Program操作指令即可把寄存器中的数据存储进入物理存储单元中。

(3)FlashECGDMap():根据分区内页索引和坏块列表检索出实际的操作页地址。首先把分区内页地址换算为理想实际地址,即不考虑坏块,然后检索坏块列表及剔除无效地址并给出实际操作地址。

(4)FlashStoreECGData():在数据分区中存储心电数据,首先检查Flash是否处于繁忙状态,若空闲则立即占用Flash,把采样数据导入Flash写缓冲。如果写缓冲达到存储操作条件,则调用FlashECGDMap()获取实际的操作地址并检查是否Flash的该操作块需要擦除。若需要擦除,则调用FlashErase()函数,擦除状况检查完毕即调用FlashProgram()保存数据。若所有操作完毕,则释放Flash的控制权。

(5)FlashLoadECGData():从数据分区中读取一定字节数的心电数据。首先需要在Flash空闲状态下获取Flash的控制权,随后利用 FlashECGDMap()获取实际操作地址并判断是否出现跨页读操作。如果不需跨页,则调用FlashPageRead(),读出相应数据到读缓冲即可;若跨页,则分别在两页分两次读取规定字节个数的连续心电数据。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top