根据 dat文件设置,主要使用到delimiter、format string、spreadsheet string和array几 个节点,spreadsheet string与上个子Ⅵ的text端连接,获取数据源。delimiter 和format string的设置是为了与dat文件存储的格式一致,避免发生连接错误。 从array节点处得到输出的数组数据。 (4)添加数据动态处理控件 通过动态处理控件可以将数组数据转换为动态波形数据,从而得到动态波 形输出。 5.2.3.2模拟数据接入 利用Labview中DAQmx创建模拟数据输出步骤如下 (1)添加一个AOVoltage(模拟输出电压)子vI 要将波形输出到模拟输出通道需创建一个DAQmx子VI,否则不能实现模 47 第五章系统信号获取 拟输出。该节点为DAQ数据采集卡创建虚拟通道来实现信号传输,在Ⅵ下拉 菜单中选择模拟输出电压类AO Voltage。Physical Channels用于选择DAQ设备 上的模拟输出通道,Minimum Value、Maximum Value设定电压幅值范围。程序 框图如图5.7所示。 liLi躺■‰● m雠imm颤d翻I 鹣辨itd仇酬警 图5-7 AOVoltage子Ⅵ Fig 5?7 AO Voltage.vi (2)添加DAQmxTiming子Ⅵ DAQmx Timing子VI用于设置数据的时钟,其原始程序框图如图5—8所示。 suples per chromel mode in tislrJehmelz active stople l ………1■i幽衄 rtte 暑allrCe J裙誊I ~… tisk out Dut errar edge lrrol"in 图5-8 DAQmx时钟设置Ⅵ r皿iI唱.vi Fig 5-8 DAQmx 使用到的核心参数意义如下: ◆sample mode:用于设定采用模式; in:用于指定模拟输出通道; ◆task/channels ◆rate:用于设定采样率; ◆task out:输出控制数据。 Clock Labview支持多种时钟控制,如Use Waveforrn的波形数据时钟、Sample 48 硕士学位论文 的采样时钟等,通过sample mode设定,使用中应根据具体需求选择,在此选择 采样时钟;task/channels in连接AO Voltage对应的数据通道,以便进行控制。 (3)DAQ采集卡数据写入子VI 各种控制参数设定完毕后即可将采集数据写入DAQ数据采集卡,其子Ⅵ 框图如图5-9所示。 auto start…………”! task out ZtllIIulJel"of swples W171‘tten p.. 81"1701"out LisIrJc]ka丑aaels im data .timeout arFoz"in 图5-9 DAQ采集卡数据写入子Ⅵ Fig 5-9 VI of DAQ data acquition card data receiving 所需主要参数意义如下: ◆task/channels in:用于连接数据创建的模拟通道; ◆data:用于接入数据源; ◆timeout:允许超时时间设定; ◆task out:输出数据流。 通过子VI下拉菜单选择写入数据类型,根据数据文件处理结果及控制参数,在 此应选择一维单通道模拟数据采样,再从data节点添加数据波形,同时接入通 道及控制信号,最后从task out输出采样到的数据。 5.2.3.3启动输出 最后为程序添加DAQ启动按钮接入控件,实现Labview中DAQ采样数据 的输出启动控制。 49 第六章数据压缩 第六章数据压缩 ECG信号的数据量较大,一天的数据记录约需IOOMB以上的空间,其数据 量大小取决于采样频率、采样时间、数据精度等。为便于诊断,一般对于ECG 的采样频率均大于250HZ,本文以采样周期为O.003s,64bit数据精度,一分钟 所得的数据进行测试,其数据量为5509Kb。GPRS理论传输速率为171.2kbps, 但是实际测试一般不足80kbps,传输这样一分钟的数据至少需69s,接收到的数 据会有一定丢失。因此,对ECG信号进行压缩对于数据的存储和传输具有重要 的意义。同时,由于无线传输的速度限制,也需要对ECG信号进行压缩减少每 次传输数据包的大小,从而降低误码率。 心脏活动是一个有序的过程,因而对应的ECG数据具有较强的相关性,即 ECG数据具有一定的冗余度,ECG的冗余信息主要表现为相邻采样点间的统计 相关性、量化幅值分布的非均匀性以及各心搏间的相似性,可以通过这些冗余 信息的去除实现ECG数据的压缩【511。当然,ECG中的诊断信息主要分布在 P-QRS.T波群中【521,ECG的数据压缩要在尽可能的保留住主要诊断信息再来降 低其信号比特率。 6.1压缩方法研究 常用的ECG数据压缩方法可分为3类【53】:(1)直接压缩法:利用插值或预测 等处理,减小数据中的冗余,实现数据压缩。如AZTEC(amplitude zone time epoch coding)、SAPA(sean along polygonal approximation)、TP(tuming point)、CORTES、 DPCM(differential pulse code modulation)等方法;(2)变换域压缩法:通过正交 变换解除数据间的相关性,用少量变换域分量保持原数据的信息。如Fourier变换、 Walsh变换、离散余弦变换(DCT)和小波变换等方法;(3)特征参数提取法:从 ECG数据中提取和保留有分析价值的特征参数。前两类方法压缩后可实现ECG 硕士学位论文 波形的重构,而第三类则不行。一般而言,直接压缩方法较易实现,但是变换 压缩能获得较高压缩比,且对原始信号噪声不太敏感。 6.2系统采用的压缩方法 实际应用中,常将ECG压缩分为有损压缩方法和无损压缩两类。无损压缩 编码方法对ECG信号进行压缩,不产生信息丢失,压缩较低,但难以适应日益 庞大的ECG信号的压缩、传输任务【521。为此,在实际中人们常采用有失真编码, 一般认为只要重构信号与原始信号间的误差不至于引起误诊即可。 近年来,随着基于移动通信网络的远程心电监护发展,为保证数据实时传 输,提出了嵌入式编码方式。它的思想是在窄带通信上采用将重要性高的比特 优先传送的方式,使得即使带宽不够导致码流截断,仍可能得到重要信息。它一‘.t 的特点是通过渐进传输实现了信源重构质量的可伸缩性,其核心是逐次逼近量 化算法。嵌入式编码技术应用于ECG信号压缩可以有效提高移动心电监护实吨;. 性、信号质量和编码可伸缩性【跚。 目前,主要采用的嵌入式编码方法有嵌入零树小波(embedded zerotree wavelet,EZW)、分层树集合分裂算法(set partition 和SPECK等。各方法特性如下: (1) in hierarchical trees,SPIHT) 零树是一个比较有效的表示不重要系数的数据结构,EZW是最早基于小 波变换实现的嵌入式编码方法,是一种描述数据经过小波变换后非零数值位 置的有效方法。 (2) 但是,当小波系数除树根以外的其它结点是不重要的时,则可用一种新 orientation 的且性能更优的实现方法,EPSPIHT,它采用了空间方向树(spatial tree)、集合D(i,j)和L(i,j)来更有效地表示这样的系数数据结构,从而 提高编码效率,实现对EZW的分裂方式改进。 (3) 以上两种算法最初都是针对基于小波变换的图像压缩而设计的,后又应 第六章数据压缩 用于ECG的压缩,但这些方法都是基于第一代浮点小波实现的,对于实时性 要求较高的应用来说,浮点小波运算可能难以满足要求。EZW算法和SPIHT 算法主要是利用树结构来表示这些不重要系数,利用了子带间不重要系数的 相关性,但是没有充分利用同一子带中不重要系数的相关性,因此Asad和 Pearlman提出了SPECK算法,用以提高编码效率。 参考赵安等人的研究,系统拟采用基于整数小波变换和嵌入式编码技术结 合的心电数据压缩算法,不仅能够实现有损压缩,也可实现无损压缩,即在条 件允许或某些特殊情况下,采用无损压缩来提高信号可信度,而在对精度要求 不是非常严格的场合,采用有损压缩来提高压缩比。 采用基于整数小波变换和嵌入式编码技术实现ECG信号压缩的步骤大致如 下: (1)先对原始信号进行去均值处理,即原始信号减去其均值的整数部分,以 减少一些编码所需的比特; (2)进行整数小波变换; (3)对变换系数使用嵌入式算法进行编码。 需要注意的是,编码的时候对最低频系数要无失真的传输,以避免大的误 差。 硕士学位论文 第七章数据无线传输 7.1 GPRS模块工作原理 为降低管理需求,实现更好的无缝漫游效果,系统选用GPRS模块完成数据 的无线传输。GPRS(General Packet Radio Service,通用无线分组业务)是介于 第二代和第三代之间的一种无线通信技术,通常称为2.5G。GPRS在原有的基于 电路交换(CSD)方式的GSM网络上引入了两个新的网络节点:GPRS服务支持节 点(SGSN)和网关支持节点(03SN)。SGSN和MSC在同一等级水平,通过跟踪单 个MS的存储单元实现安全功能和接入控制,通过帧中继连接到基站系统。GGSN 支持与外部分组交换网的互通,并经由基于m的GPRS骨干网和SGSN连通。GPRS 终端通过接口从客户系统取得数据,处理后的GPRS分组数据发送到GSM基站。 分组数据经SGSN封装后,SGSN通过GPRS骨干网与网关支持接点GGSN进行通 信。GGSN对分组数据进行相应的处理,再发送到目的网络,如Intemet或X.25网 络。若分组数据发送到另一个GPRS终端,则数据由GPRS骨干网发送到SGSN, 再经BSS发J妞)JGPRS终端【55】。 7.2 F GPRS网络连接建立 对于自带TCP/IP协议的GPRS模块则可以直接通过串口往GPRS模块写入 AT控制指令实现网络功能。对于使用不带TCP/m协议的GPRS模块进行无线 数据传输,则必须利用系统的资源实现GPRS网络的支持。 从成本上考虑,系统选择了无自带协议的Q2403,驱动GPRS模块后,终端 上即可通过构建的嵌入式Linux系统加载PPP协议、编写拨号脚本实现GPRS 无线网络连接,为后续数据传输准备好环境。添加PPP协议支持只需在make menuconfig时将Network Device Support下PPP协议的各选项选中编译进内核即 第七章数据无线传输 可。通过GPRS模块在ARM平台上实施PPP拨号上网常见有三种方式:使用智 能拨号软件wvdial、脚本方式、使用命令pppd call script方式。第一种方式智能 稳定,它不需要chat程序,使用集成的wvdial工具包直接连接ISP,安全稳定, 可以断线自动重拨,但是交叉编译较难且配置文件占用的系统空间较大。第二 方式,使用chat程序,很多的参数需要自己去配置,比较灵活,但是如果遇到 了拨号错误调试过程较为复杂。本文采用第三种方式,主要包括/etc/ppp/录下 gprs—connect-chat脚本,它在PPP底层会话的时候给chat进程一些“期望/发送” 的组合序列参数;/etc/ppp/peers/gprs脚本,它给pppd进程提供配置参数:/etc/ppp/ 目录下chap-secrets和pap-secrets文件,它们完成本地pppd与对端pppd的 chap/pap认证,成功后,再进行ncp层的ip的分配;/etc/ppp/ppp-off脚本,它用 于断开PPP连接:/etc/ppp/rmlock,它主要是为确保拨号成功准备的用于判断并 删除无效的串口的lock文件。上述配置完成后在系统启动脚本rcS中添加几条 shell语句,即可实现开发板上开机自动拨号上网。具体如下: /etc/ppp/rmlock /usr/bin/pppd call 群判断并删除无效的串口的lock文件确保拨号成功 gprs群自动拨号 撑给定拨号时间 down撑禁用ethO网口使通过PPP端口联网 /mr/bin/sleep 30 /sbin/ifcontig ethO 最后是实现GPRS应用,通过交叉编译PPP.2.4.4.tar.gz得至Upppa、chat两个可 执行文件,添加到触疆./SbiI师,再在/etc/ppp下添JJIgprs-connect-chat、pap-secrets、 chap-secrets几个配置文件,/etc/ppp/peers/-F添加调用的gprs脚本。系统完成后可 在shell下用命令pppd call gprs完成GPRS的拨号上网功能。 硕士学位论文 第八章系统应用程序开发 8.1嵌入式图形界面 为终端上设计友好的用户环境,需在终端平台上添加图形用户界面程序支 持。在嵌入式领域,GUl种类繁多,常用的有Microwindows、MiniGUI和Ott561。 其中,Microwindows能够在没有任何操作系统或其他图形系统的支持下运行, 能对裸显示设备进行直接操作,便于移植到各种硬件和软件系统上。但是其免 费版本进展很慢,几乎处于停顿状态,且国内没有一家公司专业队其提供技术 支持、服务和担保;MiniGUI是国内做得较好的自由软件之一,由我国自主开发, 是在linux控制台上运行的多窗口图形操作系统,应用于机顶盒、掌声电脑等诸 。 ‘:…’” 多场合;Ot是Trolltech公司开发的一个跨平台的C++图形用户界面应用程序框 架,包含了直观的API和丰富C++类库、用于GUI(图形用户界面)开发和国 际化的集成工具,支持使用JavaTM和C++语言进行开发‘571。Qt采用面向对象 设计,可移植性好。基本上所有Linux内核均支持Frame Buffer(帧缓冲),而 Qt可以直接在Frame Buffer上显示图形【58-591。因此可以在嵌入式Linux下移植 Q,从而实现嵌入式Linux上的GUI程序开发。 8.2 QT/Embedded支持 嵌入式Linux系统提供Qt GUl支持主要是拷贝相关依赖库及对应Qt版本的 平台库到根文件系统的合适位置。这里的合适位置指的是要将Qt支持的所有文 件放置于与编译安装设置一致的位置,如在主机上编译时将Qt4编译完成的内 容放置在/usr/local/Trolltech/QtEmbedded-4.5.0.alms目录下,则开发板上系统应 建立对应目录放置所有文件。同时,若采用tslib支持触摸屏,也应该将tslib安 装后文件位置放对。 添!JIIQT的支持,需完成QTI具包的交叉编译以得到库文件和测试程序,它 5S 第八章系统应用程序开发 的编译由以下几步完成:(1)安装好ARM下的交叉编译工具,后续采用这个交 叉编译工具编译q源代码,从而产生ARM平台上运行的Qt库。(2)交叉编译 jpegsrc.v6b.tar.gz、e2fsprogs—1.40.2.tar.gz,需要注意的是QT的触摸屏功能支持需 要在编译中添加,通常添JJIltslib触摸屏驱动支持,因此还需编译tslib源码。最终 得到库文件libjpeg、libuuid和libts等备用;(3)前应先配置Qt交叉编译器export ￥PATH=/usr[10cal/ann/3.4.5/bin:￥PATH;(4)QTI具包交叉编译i配置cordigure, 配置选项用.I、.L设置上述编译好的几个功能支持的头文件和库文件所在目录; (5)make&make install得到图形界面支持的所有文件。 8.2.1 Qt依赖库文件编译获取 Qt需要一些库依赖来提供GUI图片的支持,在编译Qt之前应先准备好这 些库。Qt编译所需的相关库包括jpeg库、uuid库,如果需要触摸屏支持还要添 加tslib等的支持。依赖库获取过程为:(1)解压安装包;(2)配置选项;(3) 修改Makefile设置平台编译器;(4)编译安装。在此以jpeg库文件获取为例进 行说明: tar zxfjpeg-6b.tar.gz解压源码包; cd￥PWD/jpeg-6b ./configure-enable-shared配置为允许动态链接jpeg库; vi Makefile修改:CC=arm-linux-gee; AR=arm-linux—ar此; AR2=arm.1inux.ranlib设置平台编译器; make&make install编译安装: 8.2.2 Qt2编译配置 无论是哪个版本的Qt,编译安装主要的是配置选项的不同,配置选项的功 能是让q的功能禁止或者激活,禁止掉不需要的功能可以减少内存的使用。可 以通过./configure-help进行可配置选项的查看,本文采用Qt2配置如下: 56 硕士学位论文 Qt2配置:./configure—qte’-embedded orlo—xft—xplafform linux-arm一驴+-qconfig qpe-depths 1 6,32一rio—qVfb-system-jpeg-gif-qpe’一xplatform linux-alTll—g++-edition pda—displaysize 240x320’。Qt/E是Qtopia的基础类库,在安装Qtopia前需要先 装Qt/E,因此先用一啦选项进行Qt/E的安装配置,然后再通过一qpe配置Qtopia。 在此,q厄与Qtopia均通过选项一xplafform配置为ARM平台,Qtopia采用pda 型桌面系统,3.5寸240x320的LCD显示。 完成配置后运行命令:make&make install即可完成Qt2库的编译与安装。 默认Qt2在源码目录下的qtopia/image/opt/Qtopia下生成Qt2的PDA GUI桌面系 统上常见的功能如电话簿、日程表等应用程序相关文件及移植所需的库文件。 8.2.3 Qt随机启动支持 誊, 要实现随文件系统启动支持Qt,需要有一个脚本文件先对q进行配置。在 此在/bin目录下放置关于Qt4的可执行脚本文件。在此均使用tslib提供触摸屏 驱动支持。因此,在脚本的最开始应先设置好tslib相关的环境变量,包括: TSLIB—TSDEVICE TSLIB TSLIB 、TSLIB—CONFFILE 、TSLIB—PLUGINDIR 、 CALIBFILE,其中TSLIB TSDEVICE对应驱动的设备文件矿 CONFFILE设置触摸屏配置文件,TSLIB PLUGINDIR设定插件目录, CALIBFILE设置触摸屏校准文件。 TSLIB 设置完触摸屏相关环境变量后采用命令 export export PATH=￥QTDIR/bin:￥PATH LD_LIBRARY_PATH=￥QTDIR/Iib:/usr/local/lib:￥LD_LIBRARY_PATH 在shell环境变量和库环境变量中添加q支持。对于Qt2,直接在脚本文件 最末尾调用exec命令执行qpe启动桌面系统,由于Qt4没有桌面系统支持,可 以通过加载一个demo程序来查看图形界面支持效果,如执行 cd/usr/local/Trollteeh/QtEmbedded-4.6.3.arm/demos/embedded/fluidlauncher 第八章系统应用程序开发 ./fluidlauncher-qws,加载fluidlauncher这个应用程序。 根文件系统中的inittab文件执行中会调用/etc/init.d/rcS文件,rcS的内容是 一些自动运行的命令,完成文件挂载,IP地址配置及shell启动等。要实现Qt2 随机启动,除了必备的库文件外,主要就是在rcS中设置好脚本程序调用。在rcS 中添加语句:/bin/qtopia&则启动Qt2版本支持。其中,qtopia就是启动时设置 环境变量和启动程序的脚本。应用中,若想实现Qt2与Qt4兼容,可将两者的 启动脚本同时放置在文件系统中,需要哪个版本只要通过修改rcS中调用的脚本 即可实现同一个嵌入式Linux系统中对这两种版本Qt的兼容。如图8.1是加入 Qt支持的系统启动画面。 图8-1 Qt启动界面 Fig 8-1 Qt’s stratup 8.3应用程序实现 有TGUI图形库支持,接下来就可以进行应用程序的图形界面开发。移动医 疗终端上应用程序需负责心电采集、处理、传输及音频通信。