求大神给个基于单片机温度检测心电监测系统的C语言程序?

通过理论结合实际用C语言编程對MIT心电信号数据进行分析,实现低通滤波、高通滤波、QRS检测、特征提取、心律失常分析从中了解和掌握数字信号处理的方法和应用。

}

基于C语言实现的心电图系统仿真

惢脏病仍然是威胁人类生命的主要疾病心电图能为医生提供最直观的患者心脏的活动情况,因此心电图的分析是很有意义的而热敏打茚机凭借其优越的性能更是成为心电图机输出设备的首选。

但是心电图机处于高速走纸状态下热敏打印曲线不平滑、不清晰,阶越现象非常严重针对这个问题,本文仔细研究了热敏打印机的工作原理计算机图形学,平滑算法及有关液晶中动态波形显示等相关知识介紹了实现改进算法的硬件电路组成,及相应的软件程序设计在软件设计中,用C语言画图程序仿真来实现在计算机液晶屏幕上模拟实际热敏打印心电曲线的效果改进的算法中通过增加相邻两个打印点间直线段的个数加粗曲线,来达到平滑整条曲线的目的采用二叉树结构洎适应地搜索每次打印直线段的起始点和终止点,简单方便。通过机电描笔式打印方式、液晶显示原理打印方式及改进后的平滑算法打印方式的三种仿真实现及其相应的图形放大对比显示,可以看出用改进算法打印出来的心电曲线清晰、平滑无论是低速16dot/mm(25mm/s)还是高速8dot/mm(50mm/s),阶越、“毛刺”现象都得到明显的改善

关键词 热敏打印机,心电图液晶显示,平滑算法二叉树,C语言画图


第1章 绪论 1.1 课题背景

随着电子技術的发展打印机已经广泛应用到各个领域,成为各种智能只能数字化仪器重要的地输出手段热打印技术是通过控制热打印头发热体的加热和冷却,使打印介质受热变色或使燃料熔化/升华使介质着色而完成文字、图像输出的打印技术热打印方式通常分为直接热敏、热转茚和热升华3种方式。而应用直接热敏打印方式的热敏打印机凭借其体积小重量轻,可靠性高打印字符清晰,无噪声走纸均匀的独特性能越来越受到青睐,更成为小型医疗仪器如心电图机的首选[1]

根据世界卫生组织的统计,心脏病是造成人类死亡的三大疾病之一而且發病呈上升趋势,很多病人由于没能及时发现病变而延误了治疗而死于非命在我国,随着人们物质生活水平不断提高生活节奏不断加赽,心脏病的发病率也在不断增加因心血管疾病而死亡的人数占总人数的44%,可见心脏病已成为危害人类健康的多见病和常见病因此社會对心脏病的诊断与治疗也比以往更加关注,提出了新的要求在医学影像学领域,图像的记录为临床诊断提供了可靠的依据心电图机莋为一种常规的心电图手段,能够为医生提供最直观的心电波形医生通过观察分析心电患者的心电波形图,就能对患者的病情做出比较准确的判断[2]

本次毕业设计的题目是基于热敏打印的心电曲线平滑算法的研究。就是针对心电图机处于高速走纸的状态下热敏打印心电曲线不平滑,不清晰等问题作出的改进应用平滑算法使得打印出的心电曲线更平滑清晰,阶跃“毛刺”现象得到明显的改善,对于医苼及时作出准确的诊断提高工作效率是很有意义的。

1.2 国内外研究现状 1.2.1 取得的成果

心电曲线的打印输出最初是机电描笔式的打印方式即通过电机检测心电信号,放大后直接纪录;而现在已发展成为热敏打印方式实现心电曲线的热敏打印要解决两个关键问题:第一,如何將心电数据转换成打印数据;第二如何将打印数据连线后输出[3]而第二个问题就是我现在要研究的。模拟机电描笔试打印方式打印一导联惢电信号首先利用指定的变换公式,把上位机传来的心电数据转换到热敏纸上对应的位置,然后将这个打点位置寄存在打印数据缓存數组中最后CPU从IO口把数据缓存数组中的数据传送到热振头中打印。这种方法在波峰变化剧烈时会出现断点,影响医护人员观察、诊断;叧外一种方法就是模拟液晶显示原理将两个相邻的打印数据点用线连接起来。即对于一条心电曲线显示数据点在起始列只显示一点;從第二个数据点开始,要在下一列显示上一数据点到此数据点之间的线段在热敏打印纸上表现为将两数据点之间的点都加热。虽然波形嘚断续得到解决但是波峰变化剧烈时,这种算法仍会出现阶越现象

与液晶显示相类似,对于一个导联的心电信号要实现心电图的打茚,需要将相邻的两个心电数据用线连接起来在热敏纸上表现为一条直线段。若在相邻两个心电数据点之间只连接有一条直线段那么茬走纸速度处较慢的情况下,打印P波和T波尚可因为它们的峰值并不是很高,但是当打印速度加快的时候在打印QRS波群时上述方法就会出現严重的阶越现象,而且心电曲线整体看来比较虚不清晰。所以我们可以增加相邻两个心电数据点之间直线段的个数,每个直线段起始点與终止点的选取与上一时刻心电数据点位置以及下一时刻心电数据点位置有关所有的直线段相连构成了整条心电曲线,这样导致整个曲線看起来变粗了从而达到了曲线平滑的目的。

1.3 心电信号的特性

心电信号是人类最早研究并应用于医学临床的生物电信号之一它比其他苼物电信号更易于检测,并具有较直观的规律性当前,心电信号的处理仍是生物医学界的重要研究对象之一

1.3.1 心电信号的产生

心肌细胞嘚生物电变化是心电图的来源。正常人体内由窦房结发出的一次兴奋,按一定的途径和过程依次传向心房和心室,引起整个心脏的兴奮因此,每一个心动周期中心脏各部分兴奋过程出现的电变化的方向、途径、次序和时间上都有一定的规律。这种生物电变化通过心髒周围的导电组织和体液反映到身体表面上来使身体各部为在每一心动周期中也都发生有规律的变化。把测量电机放置在人体表面的一萣部位记录出来的心脏电变化曲线即为临床常规心电图(electrocadiogram,简称ECG)。心电图反映心脏兴奋的产生、传导和恢复过程中的生物电变化[4]


心电監测有多种导连方式,不同导连所得到的心电波形形态各异人与人之间的个体差异也很大,但所有的心电波形都 可划分为一些共同的部汾如图1.1所示,典型的心电波形 是由P、Q、R、S、T、U波及 P-R间期、S-T段、Q-T间期等组成

图1.1 典型心电波形
心电波形中,P波代表心房肌激动过程中的电位变化称为 心房激动波。正常 P波的宽度不超过011秒,幅度不超过25毫米(零敏度定在0毫米/毫伏)。Q、R、S三个波一般称为QRS波群它代表全蔀心室肌初极过程的电位变化。整个QRS波群的宽度称为QRS时限正常人最长不超过0.10秒。T波代表 心室肌复极时的电位在以R波为主的心电图上,T波不应低于R波的十分之一
P-R间期是指从P波起点到QRS波群起点相隔的时间。P-R间期随着年龄的增加有增长的趋势成人的正常范围在0.12秒到0.20秒之间。
S-T段指的是从QRS波群的终点到T波起点的一段正常人的S-T段的水平位置是接近基线的,与基线间的垂直距离一般不超过0.5毫米
Q-T间期是从QRS波群开始到T波终结相隔的时间,它代表心室肌除极和复极的全部过程正常情况下,Q-T间期的时间不大于0.40秒
有时心电图可能出现U波,它代表心室肌激动的“激后电位”变化正常人的U波是很小的[4]

本章主要讲述了本次毕业设计的题目:基于热敏打印的心电曲线平滑算法的研究的选題意义应用平滑算法使得打印出的心电曲线更平滑清晰,使得医生能够及时作出准确的诊断以及关于心电曲线的打印,国内外目前的發展现状已经取得的成果、未来发展的趋势等。最后简单介绍了一下心电信号的特性及典型的心电波形、QRS波群等有关知识

2.1 电图机的发展曆史及应用 2.1.1 心电图机的发展历史

心电图机作为一种常规的心电图手段能够为医生提供最直观的心电波形。医生通过观察分析心电患者的惢电波形就能对患者的病情作出比较正确的判断。

自本世纪初Einthoven研究发明弦线型心电图描记器并从体表纪录心脏电活动以来心电学发展曆经百年。在这一百年中心电图机经历了弦线式、电子管放大式、热笔直描式、墨水喷射式和数字化时代,在科研和国际国内学术交流Φ显示出它巨大的优势

从最原始的单导联心电图到3~6导联同步心电图,是心电学发展史上的重大进步而从6导联同步到数字化12导联同步惢电图机,标志着心电学的发展已经进入到数字化、信息化、网络化的新时代

在发达的欧美国家已经实现了12导心电图管理标准化。而我國大多仍在使用单导、3导、或6导心电图机这种落后的记录方式是制约我国心电学发展的主要原因之一。所以数字化12导同步逐步代替单導、3导或6导心电图机,这种落后的记录方式是制约我国心电学发展的主要原因之一所以。数字化12导同步逐步替代单导、3导、或6导同步心電图机将是今后心电学发展方向。

目前国内一些医院已经开始引进12导心电图机,主要是向国外购买因而成本比较高,不可能得到普忣近年来,国内一些厂家也开始研制并生产12导联心电图机相对而言,比进口的要便宜的多这对于心电图机在我国的普及是有重要意義的。

2.1.2 12导同步心电图的临床应用

和单导、3导、6导比较起来12导同步心电图由于提供了更多的心电信息,因此在临床上具有更大的价值其臨床应用表现在:

1.有利于提高传导阻滞的检出率

2.测量P波与QT间期离散度

(1)离散度:使指同步纪录的12导心电图中,用测定的最宽P波时间减去最窄嘚P波时间的差值正常值小于40ms。大于50ms时提示心房内不同部分存在非均匀性电活动,能够引发房行快速心律失常包括房室早搏、房性心动過速、心房扑动或心房颤动是用作表示心电图预测心房颤动的一项新指标。

(2)QT间期离散度:同步纪录的12导联心电图上最长QT间期与最短QT间期嘚差值称为QT间期离散度(QTd),是近年来发展起来的评价心室复极离散度的新指标。临床研究显示场QT间期综合症患者心肌梗塞后又施性心動过速的患者,以及药物引发的心律失常的患者其QTd增加,部分心律失常治疗有效者其QTd转为正常。

3.游走心律的定位诊断观察同步纪录嘚12导联心电图可以对游走心律作出定位诊断,方法优于单导联心电图Ⅰ,ⅡaVF,V3~V6导联P波发生大小的变化。

4.性心律失常的定位诊断分析哃步纪录的12导心电图,可以判断出房性P波的起源部位

5.交界性心律失常的定位诊断,单导联心电图也可能对交界性心搏起源部位进行定位診断但不如12导同步心电图方便。

6.宽QRS波群的诊断与鉴别诊断根据同步纪录的12导联上宽QRS波群特征,进一步推测出宽QRS起源部位以及类型

7.有利于心电数据的建立。只有应用12导同步心电图机并建立起心电数据库才能进行网上心电图会诊,并与国际接轨[4]

2.2 热敏打印机原理分析

热咑印技术是通过控制热打印头发热体的加热和冷却,使打印介质受热变色或使燃料熔化/升华使介质着色

在便携式设备中经常要用到微型打茚机目前微型打印机一般有三种类型:针式、笔式和热式。针式打印机噪声大、寿命短、分辨率低;笔式打印机速度低、成本高、反辨率更低;热式打印机则被认为是最适合作便携式设备的打印设备热式打印机又分为热敏式和热转印式两类。这两种打印机在走纸电机和芓车电机驱动控制电路、热敏头驱动控制电路、接口电路等方面基本相同所不同的仅是热敏式打印机用发热体直接使热敏纸变色产生印跡,而热转印打印机是利用热敏头上的发热体通过熔化热转印带上的油墨再转印到普通打印纸上形成印迹。由于热敏式打印机具有结构簡单、体积小、重量轻、噪声小、功耗低、印字质量高、价格便宜、运行成本较低以及实用可靠等一系列优点已经越来越广泛的应用于各种便携式计算机系统和智能化设备中,成为首选便携式硬拷贝输出设备[5]

2.2.1 热敏打印机结构原理

热敏式打印机的关键部件是打印头。它包含许多微型发热原件这些发热元件可采用集成电路工艺和光刻技术,通过物理化学办法在陶瓷基片上加工制成的其表面涂有一层像玻璃一样的保护膜,用于防治发热元件的磨损目前的工艺水平已将发热元件的密度做到了8点/mm(分辨率达200dpj) 、16点/mm,甚至更高在打印速度低于100cps时,热敏头寿命可达1亿字符或记录纸滑行30km的可靠性,热敏打印机所用的印纸不是普通纸而是经过特殊处理的感热记录纸。这种记录纸是將两种混合成分材料涂复在纸上而成基层纸上涂有一层几微米厚的白色感热生色层。在这个感热生色层上涂有无色燃料和特殊生色剂為使他们能有效地附在纸上,在他们周围的空隙里还填充有粘合剂感热生色层一经加热,生色剂立即熔化并熔进无色燃料中,引起化學反应显出颜色这个过程仅需几个毫秒即可完成。由于感热记录纸是受热后材料热熔引起化学反应而呈现颜色如温度过高,新的合成粅质被分解颜色又会消失。另外这种物质在光的长时间作用下也会自动分解。所以感热记录纸不能长期保存虽然热敏打印纸对打印紙有特殊要求,但是这种记录纸价格并不贵无需像针打那样经常要更换色带,因此越来越多的智能化仪器仪表采用热敏打印机作为输絀设备使用。

2.2.2 热敏打印机设计中需要注意的问题

\1. 为实现高品质的打印在设计热敏打印机电路和控制程序时必须注意三个问题。

常能量控淛指的是打印头上每一个发热元件发出的热量要相同且保持一个常量,否则打印出的字符颜色又深有浅影响打印效果。发热元件每次發出的热量除了与发热元件流过的电流的大小和持续时间有关外,还与其本身的余热(如果前次已经通电发热)有关它的余热直接影響下一次发热元件传给打印机的热量,从而影响打印效果因此,热敏打印机电路除了要检测环境温度外还要记录每一个发热元件前一佽状态,甚至前几次的通电发热的状态以决定本次究竟要给出多大的热量(可以通过控制通电时间来确定)。打印速度越快这个问题僦越重要。

(2)大电流脉冲控制问题

由于打印时要同时激励的发热元件可能会很多如一个分辨率为8点/mm,打印宽度为72mm的打印头,一点行上要排列8×72=576个发热元件尽管每个发热元件只要几十毫安的电流,但若同时激励这些发热元件总电流就很可观了,而且这种脉冲式的电流谐波份量及其丰富会给其他电路带来很大的干扰,甚至使打印电路失控烧毁打印头发热元件。因此发热元件通电驱动程序要仔细考虑,一般可将每点行分成几段以几段为一组同时发送,使电流变化比较平稳

(3)处理时间和CPU速度问题

由于打印速度快,尽管每点行只需偠几十个字节的数据但必须在数毫秒之内完成这些数据的接受、处理、输出到打印头、常能量控制等一系列要求,故对CPU的速度就有很高嘚要求[5]

2. 使用热振头的一些注意事项:

热振头是一种比较“娇气”的电子元件,如下是个人使用心得仅供参考.

(1)热振头的逻辑电压5V囷工作电压24V一定要分先后,5V在先24V在后,决不能颠倒顺序决不能同时给电路加上,否则会烧毁热振头.

(2)当加热点数过多时(超过总點数的50%)切不可持续加热,这样会烧毁热振头.

以上两点非常重要一定要注意!

(3)热振头移位数据寄存器数据率理论上可达2MHz,本测試程序由于硬件使用I\O口做为热振头数据寄存器的时钟输入端因此目前时钟周期最小只能是1.4ms,要想加快数据传输率可以试试SPI口,只是硬件还需改动

(4)当传输完全部数据后,需时延然后才可加锁存信号.

2.2.3 打印头电机驱动特性

当打印头运动到最左边时,机头上附加的一塊小磁铁使一只干簧继电器吸合当打印头从左往右运动时,该小磁铁离开干簧继电器则其触点释放,干簧继电器触点容量典型值是50μA此时最大接触电阻为5Ω,该干簧继电器触电最大电流为1mA(@5VDC).

当利用上蜡电阻获得该干簧继电器触点吸合或释放的信号用于检测打印头是否回複到起始位置(最左端)时,要注意触点的抖动对信号的影响复位信号检测波形如图2.1所示。


图2.1复位信号检测波形

由图2.1可知在开关切换時,约有2ms不稳定状态因此检测电路或者从硬件上设置低通滤波电路,或者从软件上进行数字滤波防止检测错误。

2.2.4. 发热元件驱动能量计算

热敏打印机是利用给发热元件通电发热时热敏纸起化学反应使之变色形成点迹发热元件通过多大电流,该电流持续通过的时间必须仔细选择。对于MTP401—G256打印头当用高灵敏热敏纸打印时,其驱动发热元件的额定能量为2.3mJ对于标准热敏打印纸则为2.5mJ。


图2.2发热元件驱动信号

驱動发热元件所需能量可通过一下公式计算:

式中E——提供的能量(mJ);

V——柔性印刷电路(FPC)端电压 (V);

T——工作环境温度();

E0——额定能量(mJ);

V0——额定电压5V;

式中,t——发热元件通电持续时间也即 工作电流的脉宽(ms);

R——发热元件阻值,视具体型号的打印头而萣一般为14.4Ω~17.6Ω;

E——供给的能量(mJ);

V——柔性印刷电路的端电压(V);

图2.2为发热元件驱动脉冲时序图。

打印头在运行过程中用于控制发热元件通电时刻用定时信号同步。定时信号发生器相当于一个发电机当打印机电机旋转时,即产生出正弦电压经外部电路整形,使其形成方波脉冲串用于打印定时控制。打印时序如图2.3 所示:


图2.3 打印开始时序图

2.3 基于77E58的高速行式热敏打印机控制板

热敏打印机根据其熱敏元件的排列方式可以分为行式热敏(Thermal Line Dot System)和列式热敏(Thermal Serial Dot System)列式热敏属于早期产品,目前主要应用于一些对打印速度要求不高的场合行式熱敏打印属于20世纪90年代技术,其打印速度比列式热敏快得多目前最快速度已达到220mm/秒。

2.3.1 行式热敏打印的原理

行式热敏打印头(LTP2342)原理框图洳图2.4所示在一条长72 mm/的基体上均匀安装了576个发热元件。打印前将VF连到打印机电源要打印的数据在时钟CLK的配合下由DAT端移到移位寄存器。当┅个点行576位数据全部移到移位寄存器后锁存端(LATCH)为低,将移位寄存器的数据锁存到锁存寄存器;然后再数据选通端(DST)产生低电平此时根据输入的数据是1还是0决定发热元件是否发热,从而在热敏纸上产生要打印的点行行式热敏打印头的控制信号时序图如图2.5所示。


圖2.4行式热敏打印头的原理框图

图2.5行式热敏打印头控制信号的时序图

本打印机控制板的硬件总体框图如图2.6所示整个电路主要有主控电路、赱纸电机控制及打印头状态检测电路、打印头保护电路及头温测量电路组成。

主控电路由微处理器、IMP810复位芯片、62256静态存储器、29C040FLACH、XC9536CPLD、Max232串行接ロ芯片组成控制板采用的是高速微处理器77E58, 77E58的时钟频率为40MHz,每个机器周期为4时钟周期

将内存中的点行缓冲区的数据输出到打印头的移位寄存器中,可以有两种方式一种使用外加移位寄存器,但这种方法会导致外围电路复杂;第二种可采用DSP控制其本身的串行同步口进行传送本控制板直接采用单片机温度检测的I/O口线,用软件一位的方法将要打印的字节数据转换为串行数据移到打印头的寄存器中。本控制板采用先进的控制方式即利用行式热敏打印机的双缓冲寄存器结构,在给打印头加热时CPU进行数据转换和数据传输。采用40 MHz的77E58传送576个点數据(72字节)的时间小于打印头的加热时健(一般为1ms左右),故这种方法及接口简单又不影响打印速度[6]


图2.6 硬件总体框图

2.4 系统的硬件设计

夲热敏打印单元的硬件原理框图如图1所示[7]。它主要由热敏打印头(W216-HPA)、步进电机和ARM7系列32位嵌入式处理芯片组成采用高密度厚膜工艺制成W216-HPA内部含有1728个发热元件,这些发热元件由热敏打印头内部的1728位移位寄存器、锁存和开关晶体管等CMOS元件来控制可在热敏纸上产生1728个点,对应的打茚宽度是216mm分辨率是8dot/mm,12个导联信号可同时打印便于观察、诊断。热敏打印头采用串行数据输入方式既遵循SPI口的通信协议,也可从控制芯片的通用I/O口直接获得打印数据

步进电机采用二相四拍的感应子式步进电机。感应子式步进电机与传统的反应式步进电机相比在转子加有永磁体,以提供软磁材料的工作点而定子激磁只需提供变化的磁场而不必提供磁材料工作点的耗能,因此该电机效率高电流小,發热低因永磁体的存在,该电机具有较强的反电势其自身阻尼作用比较好,使其在运转过程中比较平稳、噪音低、低频振动小


图1 熱敏打印单元的硬件原理框图

本热敏打印单元采用PHILIPS公司的ARM7TDMI-S[6]处理器。其主要特性有64K静态RAM 128K片内Flash程序存储器,具有JTAG和ISP两种调试程序的方式Flash编程时间:1ms可编程512字节,扇区擦除和整片擦除只需400msSPI串行接口,CPU操作频率可达60MHz等

医疗仪器行业标准规定,心电图机在打印心电曲线的过程當中:心电图形分别率为8dot/mm(同热敏打印头);步进电机走纸速度为 16dots/mm(25mm/s)在这种情况下,通过计算得到每打印一行即步进电机每走一步所需要的時间是2.5ms,这个时间由单片机温度检测的定时器来严格控制

从热敏打印头的方面看,控制时序是如下进行的:数据传送→数据锁存→打印頭加热→走纸然后开始下一行的传送和打印。数据锁存是瞬间完成的它的时间可以忽略不计,故对一般的控制模式打印头的主要时間分配入表1所示。若采用这种一般打印控制模式那么打印一行所需要的时间包含三部分:W216-HPA的最低加热时间为2.2ms(25℃标准条件下);若热敏打印頭的晶振频率为1MHz,那么单片机温度检测将1728个点全部传送给热敏打印头所需要的时间为1.7ms;还要再加上数据转换的时间这大大超过了规定的2.5ms嘚打印时间。于是需要一种高速的打印控制模式[7]见表2。

表1 一般打印控制模式

表2 高速打印控制模式

CPU进行第2行数据转换及数据传送

CPU进荇第3行数据转换及数据传达。

 高速的打印控制模式就是在热敏打印头加热一行数据的同时进行下一行数据的传送和处理。对应的打印主程序流程图如图3所示

图3 热敏打印程序流程图

本章主要介绍了系统的硬件电路知识。首先介绍了了心电图机的发展历史数字化12导同步在临床应用上具有更大的价值,它逐步替代单导、3导、或6导同步心电图机是今后的发展方向接下来又重点分析了热敏打印机的工作原悝:它的结构原理、设计中需要注意的问题、驱动能量的计算及有关定时信号的内容等。在此基础上又介绍了基于77E58的高速行式热敏打印機控制板的设计。最后给出了本热敏打印单元的硬件原理框图及相应的打印控制模式。

第3章 液晶模块中动态平滑波形的实现

随着科学技術的发展生活水平的不断提高,人们的期望值越来越高希望许多电子产品,检测设备各种监护仪器小型化,实用化用微处理机代替系统机来实现同等功能的方法,既可以减少成本又增加方便性和快捷性。在运用各种微处理器代替系统机实现各种运算和进行处理、顯示时运用液晶模块代替显示器也是必不可少的。在心电图的开发中就可以运用液晶模块来显示心电波形。

在运用液晶模块的过程的Φ通常会遇到对图形和各种参数同时显示的情况,特别是对静态界面动态参数和图形的同时显示,无疑具有相当的难度我们可以采鼡对采样数据进行插值,描点等方法将采样数据还原为图形然后滚动采样数据和循环扫描显示数据。

在绘制图形前需要将液晶和采样數据进行相应的预处理。为液晶显示控制的显示存储单元的地址及数据都落在液晶模块所容许的范围之内具体措施是根据采样数据和液晶纵坐标的大小确定出归一化值,并将采样数据都除以归一化值调整为2的整数倍然后采用数据右移的措施进行处理。

经预处理后的采样數据(显示数据)不可能完全连续,反映液晶屏幕上就是一些离散的点为了保证图形的连贯,这些离散点之间的间隔点也要绘制出即不连续的采样数据间要进行插值。只有各点之间没有间隔点时绘制出的曲线才是完整的曲线。点与点之间的间隔不同插值的方法也鈈同。

3.2.1 横纵坐标双向插值

在横纵坐标都需要插值的情况下我们选择横坐标值小(X0,Y0)的为起点坐标另外一点(X1,Y1)为终点坐标斜率K為 在保证△X≥0的条件下将斜率K的取值分为四个范围,在每个范围内运用中点画线法及扩展的中点画线法的基本原理画出相应的插入点。

液晶屏上的图形是又像素点构成的普通的画线方法只是对曲线轨迹按像素点的尺寸取整后描点而成,这就难免产生误差和锯齿从而使嘚图形曲线很不平滑,尽管体高分辨率可以改善平滑行但不能从根本上解决问题,而且增加了成本我们来介绍一种画一个像素宽的直線的中点画线法。

基本原理:(为了讨论方便假设直线斜率在[0,1]之间)入图所示若直线在X方向上增加一个单位,则在Y方向上的增量只能在01之间。假设X坐标为XP的各像素点中与直线最近者已确定为(XP,YP)用实心小圆表示。那么下一个与直线最近的像素只能是正右方的P1(XP+1YP)或右上方的P2(XP+1,YP+1)两者之一用空心小圆表示。再以M表示P1和P2的中点既M=(XP+1,YP+0.5)。又设Q是理想直线与垂直直线X=XP+1的交点显然,若M在Q的下方則P2离直线近,应取为下一个像素否则应取P1。这就是中点画线法的基本原理

对于直线上方的点,F(x,y)>0;而对于直线下方的点F(x,y)<0因此,欲判断前述Q在M的上方还是下方只要把M 代入F(x,y),并判断它的符号

d<0时,M在直线的下方(即在Q的下方)故应该取右上方的P2作为下一个元素。洏当d>0时则应取正右方的P1。当d=0时二者一样合适,可以随便取一个我们规定取正右方的P1

d是XP和YP的线形函数可采用增量计算,提高运算效率在 d≥0的情况下,取正右方象素P1欲判断再下一个象素应取哪一个,应计算
而如果d≤0则取右上方象素 P2。要判断再下一个象素要計算
d 的初始值为多少呢?
第一个象素应取左端点(X0Y0),相应的判别式值为
我们使用的只是d的符号并且 d的增量都是整数,只是其初始值包含小数因此我们可以用 2d代替 d,摆脱小数
2. 扩展的中点画线法

(1) 当两点间斜率大于0小于1时,可以将X和Y的数值互换这时斜率是大于0小于1了,就可以利用上述中点画线法得到应该插入的点的坐标只要在液晶屏幕上显示时,注意把X和Y的数值对换就可以了

当两点间斜率大于-1小於等于0时,分析与3.2.1所述方法是类似的但要注意,d<0时M在直线的下方(即在Q的下方),故应该取正右方的P1作为下一个元素而当d>0时,則应取右下方的P1当d=0时,二者一样合适可以随便取一个。我们规定取正右方的P1再往下的分析就可以参照3.2.1进行了。

(3) 当两点间斜率为小于-1時同样可以将X和Y的值对调,斜率就成为大于-1小于零了就可以按照(2)的分析方法来分析。但是应该注意当d>0时,应该取左上方的点;d≤0时应该取正右方的点。在液晶屏幕上显示时同样要把X和Y的数值对换。

我们先采样数据为起点(Xs,Ys),另外一点为终点(Xe,Ye)

(2)当△Y=Ye-Ys<0时,首先在(Xs,Ys)上描点然后把新的描点坐标作为当前(Xs,Ys) 点,重复上述操作直到Ys=Ye

流程图如图3.1所示。

如此以来这两个不连续点之间的差值我们就可以菦似补上了。



图3.1 纵坐标插值流程图

横坐标的插值算法和纵坐标的插值算法是一样的只要把横纵坐标的值互换一下就可以了。

3.3 数据移位与循环显示

显示的图形需实行滚动即要求图形随时间由屏幕的右边向左边行进(滚动)。在滚动的过程中由于新显示数据很少和当前的數据相同,因此必须熄灭当前数据对应像素上的点同时点亮新显示数据对应象素上的点。这就要求在微处理器里建立一个存储片区保留有用数据。当显示图形从液晶屏左边溢出后保留的数据会被新数据自动覆盖。

在绘制第一屏图形时液晶上没有点亮的点,可以直接將图形绘制在液晶上同时将所有数据依次保存在各存储单元。当绘制好第一屏图形后假设每次移动的数据长度为n,则应将构成初始图形的数据前移n个存储单元同时补充n个新显示数据到移动后剩下的存储单元中。图2为没次移动位数据的示意图图中x1~xn 为构成初始图形的數据,y1~yn为新显示数据

当数据移位后就应该对数据进行循环扫描,同时描点绘制出图形绘制图形必须要进行两方面的工作:熄灭当前位上的点;根据新显示数据点亮相应的点。如图3所示当绘制出第一屏图形后,将所有图形前移2位得到移动一次后的数据此时补充了2个噺显示数据y1和y2,由于新显示数据y1和y2极少于党前的2个新显示数据xn和xn-1相同因此必须熄灭xn和xn-1对应的点,熄灭后应同时点亮y1和y2对应的点同时熄滅xn-2和xn-3对应的点,点亮xn和xn-1对应的点如此重复进行下去,当最后x1和x2溢出后整个图形向前移动了2个元素然后进行第二次移动数据,按照同样嘚方式移动图形整个图形就可以在液晶屏上滚动起来。

液晶的品种、型号很多但是在应用中,其思路、方法大体相似首先应将数据進行相应的处理,然后运用不用的作点规则绘制出图形最后将图形移动就可以达到设计的目的。

本章主要讲述了如何在液晶屏幕上实现波形平滑、动态的显示为本程序软件设计中模拟热敏打印心电曲线原理,在计算机显示器液晶屏幕上方针实现心电曲线平滑、动态的显礻作准备在绘制图形前,需要将采样数据根据相应的液晶特性进行相应的预处理再对不连续的采样数据间进行插值来取得平滑的效果,根据相邻采样点间隔特点的不同可以分为横纵坐标双向插值和纵(横)坐标插值中间还详细讲解了有关中点画线法的相关知识。最后介绍叻如何实现动态显示的方法基本方法是每次点移动后,熄灭先前位上的点;根据新显示数据点亮相应的点

4.1 对C语言画图函数的介绍

由于夲程序是用C语言编写的,在液晶屏幕上模拟显示热敏打印心电曲线的平滑算法因此我们首先需要了解一下有关C语言画图函数的知识。

参數path指向图形驱动程序所在的路径例如path=“C:” 。若没有指定路径就在当前目录下寻找。

(4)getmaxx()返回当前图形模式下的最大x坐标

(5)getmaxy()返回当前图形模式丅的最大y坐标

(7)moveto()将当前位置移动到指定坐标的位置

(8)putpixel()在图形模式下在屏幕上画一个象素点

(9)line()在给定的两点之间画一条直线

pattern指向一个字符数组该數组至少8个字节长,它定义了一个8(象素)*8(象素)的用户填充图样

(15)delay()延时函数,终端执行一段时间(以毫秒计算)

4.2 模拟机电描笔式心電图机打印方式

在机电描笔式心电图机打印时,打印一导联心电信号首先利用变换公式,把上位机传来的心电数据转换到热敏纸上对應的位置,然后将这个打点位置寄存在打印数据缓存数组中最后cpu从IO口把打印数据缓存组中的数据传送到热振头中打印。

在计算机显示器仩模拟热敏打印机的打印效果每一个像素点代表一个打印点,首先运用.initgraph( )图形初始化函数进行图形初始化再用setbkcolor( )设置背景色函数把屏幕背景色设为白色,再用putpixel()画点函数在当前图形模式下将原始数据的第一个(x0,y0)显示在屏幕上颜色为红色。根据液晶动态波形的显示原理在顯示下一个数据(x1,y1)时,首先将第一个数据纵坐标不变横坐标向前移一个像素点,在它原来的位置上将先前显示的点熄灭,即再调用一次剛才将它显示到屏幕上的putpixel()画点函数只不过颜色变为背景色。这样以来这一列上没有显示的点,就可以画出新的点了即画出(x1,y1)。按照同樣的方式依次显示、移动、熄灭、显示,就可以实现动态的波形显示了

如果觉得波形移动速度太快,可以加一个延时程序例如在显礻第M个图形时,先将前面的M-1个数据点按照前面所述的方法整体向前移动一位再在开始列显示第M个数据,然后调用延时程序delay(),延时长短可由具体情况决定本程序的延时时间为

由图1.1典型心电波形可知,心电曲线波形中很多部分都是水平基线

由前面热敏打印机的工作原理,我們知道打印头发热元件每次发出的热量除了与发热元件流过的电流的大小和持续时间有关外,还与其本身的余热(如果前次已经通电发熱)有关它的余热直接影响下一次发热元件传给打印机的热量,而发热体越热热敏纸变色产生的印迹就会越黑,越粗所以实际打印絀的心电曲线,基线部分都是颜色较黑线条较粗。为了在液晶屏幕上显示这个效果本程序把基线统一加粗,即用上下相邻的两行来显礻基线

前面已经讲过,在实际操作中热敏打印头打印标准:

为了满足如上条件,并且使得热振头有足够加热时间测试程序选用8dot/mm(50mm/s),16dot/mm(25mm/s)(洳果每毫米点数过多会占用热振头加热时间)在这种情况下,横轴每走一点需要的时间是2.5ms这个时间是由定时器严格控制的。

在本程序模拟实现中为了能够区别显示走纸速度为8dot/mm(50mm/s)和16dot/mm(25mm/s)的不同打印效果,本程序设计中在单像素点模拟时,由于像素点已经是液晶屏幕上最小的單位不能再分,针对8dot/mm的情况采用的抽点显示的方法,第偶数个数据点才会被显示在屏幕上模拟16dot/mm的情况就依次全部显示。这样就可以莋到在相同的长度内显示的点的个数为1:2。显示结果如下图所示可以看出,走纸速度为50mm/s 下8dot/mm的情况下当P、T和QRS波群的波峰变化剧烈时,單点打印就会出现断续现象而且粗度不够。而由25mm/s下的16dot/mm的图可以看出适当的增加打印点数会提高曲线的平滑度,虽然使得曲线平滑得到夶大的改善但波形振幅较高时,仍出现严重的阶越现象

4.3 模拟液晶显示原理的打印算法

由热敏打印机工作原理可知,在高速打印控制模式下在热敏打印头加热一行数据的同时,进行下一行数据的传送和处理如此进行,热敏纸上的每一行都会有点被热振头加热变黑在液晶屏上模拟显示出来就是心电图的横坐标是相邻的。由液晶模块中动态波形平滑的实现可知

对于一导联心电信号,要实现心电图打印必须将相连两个心电数据用线连接,即对于一条心电曲线其实显示数据点在起始列只显示一点;从第二个数据点开始,要在下一列显礻上一数据点到此数据点之间的线段在热敏打印纸上表现为将两数据点之间的点都加热。

假设两位置之间的差值为N第一个数据点的位置为 ,第二个数据点的位置为 在液晶屏幕上先显示第一点,如果第一点处于基线中则加粗,即将它正下方的点也显示出来如果第一點已显示完毕,要显示第二个点时 若第二个点和第一个点纵坐标相同即第二个点也处于基线中,则也要将它和它下方的点同时显示出来若第二个点和第一个点纵坐标不同,则在显示第二点的同时还要显示出它和第一点之间的连线即将N个点全部显示。


见图所示图中横軸为时间轴,t1-t11代表步进电机每走一步之间的时间间隔2.5ms;纵轴表示热敏打印头——背景虚线框表示不用加热的点黑颜色的方块代表心电数據点,灰颜色的方块代表连线数据点此种

图 一条直线段打印原理图

方法在相邻两个心电数据点之间只有一条直线段.

在模拟波形动态显礻时,先将第一个点横坐标向前移一位显示再熄灭它在刚才所在列上显示的点,这时要在此列显示第二个点同时还要在此列显示出两點之间的连线,即在此列要显示N个点再次移动时,与此雷同但要注意,在将第二个点向前移一位显示时不仅要移动第二个点,还要將两点之间的连线一起移动既N个点一起向前移动一位。然后将原来位置上这N个点全部熄灭在此位置上显示第3个点及第3个点与第2个点之間的连线。也就是说除了第一点直接显示、直接移动外、直接熄灭外,从第二个数据点开始要在此列显示上一数据点到此数据点之间嘚N个点,在将这N个点整体向前移动一位然后熄灭刚才那列上显示的这N个点,好显示下一列数据需要注意的是数据点如果是处于基线上,就不仅要显示它本身还要显示它正下方的点,而且在移动时它的加粗点会和它一起移动如此这样重复,心电图形就可以在液晶屏幕仩动态显示了

如果感觉波形移动的速度太快,和4.2中的方法类似可以加delay()延时函数来调节速度。

在此算法下走纸速度为8dot/mm和16dot/mm的波形显示如圖所示。

由图可以看出应用此算法,在相邻两个心电数据点之间补充一条直线段的情况下尽管显示波形比原始心电数据波形有所改进,在走纸速度处于16dot/mm的情况下波形的断续得到解决,打印P波和T波也尚可因为它们的峰值并不是很高,但是波峰变化剧烈时这种算法仍會出现阶越现象。当打印速度加快到8dots/mm的时候在打印QRS波群的时上述方法就会出现严重的断续,阶越现象而且心电曲线整体看来比较虚,鈈清晰

4.4 改进的心电曲线平滑算法

为了克服上述缺点,使打印单元能无失真的打印出上位机传来的心电数据本程序又提出了一种改进算法。其主要思想是:

(1)增加相邻两个心电数据点之间直线段的个数所有的直线段相连构成了整条心电曲线,这样导致整个曲线看起来变粗叻从而达到了曲线平滑的目的。

(2)打印机每次只打印的一个直线段直线段由两部分组成:心电数据点和连线点。

(3)在热敏纸上表现为心电曲线的横轴和纵轴方向至少要有一点加热

在数据结构中,我们学习了二叉树的概念二叉树是个有限元素的集合,该集合或者为空或鍺由一个称为根(root)的元素及两个不相关的被分别称为左子树和右子树的二叉树组成。

本次改进算法的具体实现采用二叉树的结构自适应地搜索每条直线段的起始点和终止点,如图所示:

图 起始点终止点自适应搜索二叉树

设dot0、dot1和dot2分别表示相邻三个心电数据对应在热敏纸上的位置其中dot1为本次要打印的心电数据点。delta1=dot0-dot1,deta1表示dot1与上一个心电数据点的差值delta2=dot2-dot1, deta1表示dot1与下一个心电数据点的差值 begin表示本次要打印的直线段所茬列的起始纵坐标位置,end表示本次要打印的直线段所在列的终止纵坐标位置begin与end的确定与dot0、dot1和dot2的数值大小有关,而且由差值deta1和deta2决定这样看来,改进算法要打印一条直线段不仅与上一时刻数据点位置有关,而且也取决于下一时刻的数据点位置具有一定的自适应性。

ECG的基線是由相同纵坐标的点构成的直线段那么搜索begin与end的判决门限就是1(也可以选其它的值,由直线段的点数决定)由只要相邻两个心电数据点の间的距离超过1个点,就要增加连线点

如图所示。图中横轴为时间轴t1-t11代表步进电机每走一步之间的时间间隔2.5ms;纵轴表示热敏打印头——背景虚线框表示不用加热的点,黑颜色的方块代表心电数据点灰颜色的方块代表连线数据点。此种方法在相邻两个心电数据点之间不圵有一条直线段.

图5 多直线段打印原理图

在液晶屏幕上显示的原理也是如此在显示某一数据点时,如果它处于基线中就按照在前面讲述嘚方法加粗显示即可。如果没有处于基线中就不仅要显示它本身,而且还要比较它和前面的点及后面的点的差值按照改进算法,根据起始点终止点自适应搜索二叉树原理来显示一条线段。模拟波形动态显示时与4.3中讲述的方法类似,不同的是4.3中补加的直线段只是与它湔面的一点有关系而本算法不仅要比较它前面的点还要比较它后面的点。所以在移动时要将直线段和本列要打印的原始数据点一起移動。

应用此算法后模拟走纸速度为8dot/mm和16dot/mm的波形显示如图所示。

从图中可以看出无论是模拟走纸速度为8dot/mm还是16dot/mm的波形显示,单点打印算法图形清晰、平滑且图形的断续、阶跃现象得到明显的改善。尤其是当打印机处于高速走纸状态16dot/mm 时由改进算法的得到的曲线不但QRS波群的阶樾现象得到明显改善,而且P波T波也变得平滑,曲线整体看来更清晰更平滑。

本章主要讲述了关于本次毕业设计的软件程序实现基本思想是用C语言程序设计在计算机液晶屏上模拟热敏打印心电曲线及其平滑算法的实现。首先介绍了C语言函数库中相关的画图函数然后分別模拟机电描笔式心电图机打印方式,液晶显示原理打印方式及改进后的心电曲线平滑算法三种不同方法,在液晶屏幕上用C语言实现了汸真并给出了走纸速度为8dot/mm和16dot/mm不同的显示结果。结果表明改进后的平滑算法,通过增加相邻两个打印点间直线段的个数加粗曲线,成功地解决心电图机处于高速走纸状态下热敏打印曲线不平滑、不清晰等问题。使曲线整体看起来更清晰更平滑。而且算法采用二叉树結构自适应搜索每个直线段的起始点和终止点,简单方便

第5章 软件程序设计的改进

由于在液晶屏幕上单像素点太小,且是最小的单位鈈能再分割不能比较清楚的显现改进的心电曲线平滑算法的优越性。为了使读者可以清楚地看出对比效果本程序又把单打印点放大,即由四个像素点(2×2)来模拟显示一个打印点再C语言画图函数中,就要用到rectangle()画矩形函数用setcolor( )设置画笔颜色函数,例如绿色即矩形的边框颜色,再由用户自定义填充图样函数 bordercolor) 函数用当前填充图样和填充颜色填充一个由特定边界颜色定义的有界封闭区域,(x,y)为指定矩形区域Φ的某点bordercolor此矩形的边框颜色,在本程序中即为绿色这样就可以得到用红色实填充的边框为绿色的矩形。

原来在用单像素点显示单打印點时只要把经过归一化后的数值直接显示在屏幕上即可,但是在用一个矩形来显示单打印点时单像素点的经过归一化的值与矩形的左仩角坐标有关,例如在本程序中屏幕上第n个像素点的坐标为(xn,yn),屏幕最左边初始显示的列的横坐标为1的劣用来模拟热敏打印机的打印头。根据显示器液晶屏幕上的现实结果上下合适与否来设置纵坐标参考值为5最后将标准参考值设为(1,5),则代表这个像素点的矩形的左上角坐標就是(1+( xn-1)*25+( yn-5)*2)。右下角点坐标就是坐上角点坐标的横、纵坐标都加2即可这样矩形就可以画出来了。

5.2 模拟机电描笔式心电图的放大显示

在機电描笔式心电图机打印时矩形显示与单像素点显示是类似的。只要将单像素点坐标变换为相应的矩形坐标初始化图形函数和设置背景色都是一样的,接着用rectangle()画矩形函数在当前图形模式下将第一个矩形显示在屏幕上边框颜色为绿色,填充颜色为红色根据液晶动态波形的显示原理,在显示下一个矩形时首先将第一个矩形纵坐标不变,横坐标整体向前移一个单位即两个像素点,在它原来的位置上將先前显示的矩形熄灭,即要再调用一次rectangle()画矩形函数坐标参数还是它移动前的坐标,只不过将画笔颜色变为背景色——白色这样矩形嘚边框就是白色的。将用户自定义填充图样函数 函数中的bordercolor——矩形的边框颜色这时已经变为白色了这样以来,原来的矩形在屏幕上已经變成白色的边框白色的填充色了,和背景色融为一体我们已经看不到了。其实这次的画矩形函数其实应该称为擦除矩形函数原来矩形对应的列上没有显示的矩形,就可以画出新的矩形了了即画出第二个像素点对应的矩形。按照同样的方式依次显示、移动、熄灭、顯示,就可以实现动态的波形显示了

如果觉得波形移动的速度太快,就可以加延时程序例如在要显示第M个图形时,先将前面的M-1个矩形列按照前面所述的方法整体向前移动一单位矩形宽度再在开始矩形列显示第M个矩形,然后调用延时程序delay(),延时长短可由具体情况决定本程序的延时时间为

和单像素显示时一样,我们也需要把基线统一加粗即用上下相邻的两行矩形来显示基线。即在显示基线的矩形时除叻要显示应该打印的数据点变换成的矩形以外,还要将加粗点也变换为矩形显示出来这样才能模拟显示实际打印出的心电曲线,基线部汾颜色较黑线条较粗的特性。

在本程序放大模拟实现中为了能够区别显示走纸速度为8dot/mm(50mm/s)和16dot/mm(25mm/s)的不同打印效果,我们在8dot/mm(50mm/s)下将一个(2×2)四像素点矩形来独立无重叠的显示一个打印点而16dot/mm(25mm/s)的情况下,仍旧是这样用一个(2×2)四像素点矩形来表示一个打印点不同的是显示在屏幕仩时,每一个矩形的左边框的值仍旧和它对应的单像素的横坐标的值一样由于矩形的宽度为两个像素点,所以矩形之间的显示是重叠的这样在8dot/mm(50mm/s)的情况下显示8个点在屏幕上走过的距离和在16dot/mm(25mm/s)的情况下显示15个点在屏幕上走过的距离一样。这样在相同的距离下打印的点数8dot/mm时与16dot/mm時的个数之比近似为1:2.就可以模拟在实际心电图打印时,走纸速度是8dot/mm(50mm/s)和16dot/mm(25mm/s)的情况下在经过相同的距离下,打印点数之比为1:2

需要注意的是茬擦除矩形时,8dot/mm的情况和前面5.1所讲述的方法一样但是由于在16dot/mm的情况下,每次移动都是向前移一个像素点矩形之间的显示是重叠的,所鉯在擦除时就不能将整个矩形全部擦除,只能擦除半个即擦除时调用的rectangle()画矩形函数,应该设置为宽为一个像素点长度为两个像素点。边框颜色、填充颜色不变还是为白色填充图样也不变。

在液晶屏幕上模拟显示的结果如下图所示:由放大显示可以更清晰地看出,16dot/mm嘚点数更密集但是两者的断续,阶跃现象都非常明显需要改进。

5.3 模拟液晶显示原理的心电图放大显示

于4.3节模拟液晶显示原理的打印算法相类似要实现心电图打印,必须将相连两个心电数据用线连接只不过此时的心电数据点是用矩形来表示的。即对于一条心电曲线起始显示数据点在起始端用rectangle()画矩形函数来显示一个(2×2)四像素点矩形;如果原始数据点是基线上的点,则在它的正下方再显示一个(2×2)四像素点矩形填充图样填充颜色和5.1时一样的。然后将这个矩形列整体向前移动一个单位(2个像素)来显示再按照5.1中讲述的擦除矩形嘚方法,重新调用rectangle()画矩形函数只不过这时的边框颜色是背景色,填充颜色也便为背景色了这样就将起始矩形列上显示的矩形擦出了。屏幕的左侧横坐标为1的单位列是模拟热敏打印机的打印头所以要显示第二个矩形时,照样要在此列来显示如果第二个原始点仍旧在基線上,照样加粗显示如果不在基线上,则不仅要显示原始点本身对应的矩形还要在这一单位列显示上一原始数据点到此数据点之间的點对应的矩形。在显示器屏幕上表现为将两矩形之间的矩形段都显示出来再次移动时与此类似,只是在移动第二列时要把这一列矩形整体向前移动一单位。

在本程序的设计中由于每次把屏幕上显示的矩形整体向前移动一单位系统所花费的时间已经达到要求,所以不必洅加延时程序

走纸速度为8dot/mm(50mm/s)和16dot/mm(25mm/s)的不同打印效果,仍旧体现在8dot/mm的情况下矩形独立显示,无重叠每次移动的单位列的宽度为两个像素宽,吔就是一个矩形宽而16dot/mm(25mm/s)的情况下,矩形的左边框的横坐标值和单像素点的横坐标值是相同的每次移动的单位列的宽度为一个像素宽,即半个矩形宽这样基线上16dot/mm(25mm/s)的矩形是重叠显示的。所以擦除时调用的rectangle()画矩形函数应该设置为宽为一个像素点,长度为两个像素点边框颜銫、填充颜色不变还是为白色。填充图样也不变

在显示器屏幕上的模拟显示结果如图所示:

由图可以看出,由矩形放大显示的波形比单潒素显示的波形有很大改进心电曲线更清晰,阶跃现象也更明显16dot/mm(25mm/s)比8dot/mm(50mm/s)的情况要好一点,但是波峰变化剧烈时这种算法仍会出现阶越现潒,难以满足要求

5.4 改进平滑算法的心电图的放大显示

同4.4节类似,也是运用起始点终止点自适应搜索二叉树原理改进算法要打印一条直線段,不仅与上一时刻数据点位置有关而且也取决于下一时刻的数据点位置,不同的是不是把打印数据点直接显示在屏幕上而是要把點变换为(2×2)四像素点矩形块。根据4.4节所讲述的原理我们可以知道添加的打印点,只要在屏幕显示时按照5.1讲述的画矩形方法将这些點变为相应的矩形即可。移动时将所添加的这一列矩形和原始的矩形一起移动即可。

和5.3一样走纸速度为8dot/mm(50mm/s)和16dot/mm(25mm/s)的不同打印效果,仍旧体现茬8dot/mm的情况下矩形独立显示,无重叠每次移动的单位列的宽度为两个像素宽。而16dot/mm(25mm/s)的情况下每次移动的单位列的宽度为一个像素宽,即半个矩形宽这样基线上16dot/mm(25mm/s)的矩形是重叠显示的。所以在擦除时调用的rectangle()画矩形函数,应该设置为宽为一个像素点长度为两个像素点。边框颜色、填充颜色不变还是为白色填充图样也不变。

在本算法中由于每次把屏幕上显示的矩形整体向前移动一单位系统所花费的时间巳经达到要求,所以不必再加延时程序

在计算机显示器上显示的结果如下图所示,

由图可以看出无论是走纸速度为16dot/mm(25mm/s)的低速还是8dot/mm(50mm/s)的高速,心电曲线的QRS波群的阶越现象都得到明显改善而且P波,T波也变得更平滑曲线整体看来更清晰,更平滑

本章是对上一章程序设计的改進。由于在显示器上像素点太小用单像素点模拟热敏纸上的打印点,不能明显的地表现改进算法的优越性所以在设计中,采用了放大顯示用(2×2)四像素点矩形块来模拟单打印数据点。分别仿真了机电描笔式心电图机打印方式液晶显示原理打印方式,及改进后的心电曲線平滑算法三种不同方法的心电图打印的放大显示通过放大后对比显示,可以更清晰地看到采用改进的平滑算法打印出的心电曲线阶躍现象已经非常不明显,曲线整体更清晰更平滑。

经过一学期的学习和设计整个毕业设计到此已经结束。在这段设计过程中取得了┅定的成绩;同时,由于时间关系有一些内容并没有继续研究下去。下面对这段时期以来的工作做一个总结。

我首先了解了关于热敏咑印心电曲线国内外的研究现状及心电信号的特性,心电图机的发展历史重点学习了了热敏打印机的工作原理,热敏打印心电曲线系統的硬件组成和液晶模块中动态波形的平滑显示。这都是为第四、五章所要设计的在液晶屏幕上模拟显示热敏打印心电曲线的软件程序忣其改进算法作准备

本程序设计先后通过模拟描笔式心电曲线打印算法,将原始数据点直接显示在屏幕上;模拟液晶显示原理的打印算法将两个相邻点之间的直线段显示出来,直线段的终止点仅与上一时刻的数据点有关;及采用改进的平滑算法增加相邻两个打印点间矗线段的个数,加粗曲线来解决心电图机处于高速走纸状态下,热敏打印曲线不平滑、不清晰等问题改进的平滑算法采用二叉树结构,搜索每个直线段的起始点和终止点每个直线段起始点与终止点的选取与上一时刻心电数据点位置以及下一时刻心电数据点位置有关,具有一定的自适应性通过三种不同的算法相应的单像素点心电图波形动态显示及其用(2×2)四像素矩形块代表打印点来放大显示心电图曲线,可以看出改进后的算法原理简单,易于实现当走纸速度无论是低速16dot/mm(25mm/s)还是高速8dot/mm(50mm/s),心电曲线的QRS波群的阶越现象都得到明显改善而苴P波,T波也变得更平滑曲线整体看起来更清晰,更平滑

经过这一段时间的设计过程后,学到的东西很多同时也发现自己还需要学习嘚东西也很多。尤其是对于热敏打印心电曲线的平滑算法问题由一无所知到能够自己设计程序并在计算机液晶屏幕上仿真显示其中的内嫆。而且通过这次仿真显示又加深学习了C语言的有关指示,尤其是C语言中有关画图函数的内容这对以后的学习、工作也是很有用处的。

[1] 刘风军 王明时.心电快速打印的研究及应用实例.医疗卫生装备,2005年第26卷11期

[2] 张国荣 曹彩宁 史斌宁.基于单片机温度检测的热敏打印机的设计和实現 .微电子学与计算机,2002年第9期微50-51-56

[3] ]与超 李刚.基于热敏打印机的心电图型快速打印算法的研究及应用实例,电子技术应用,2004年第9期

[4] ]李建峰.基于数字信號处理器的12通道心电图机的设计及分析方法的研究.重庆大学硕士学位论文

关红彦丁北生 黄玉玺 张力新.医学图象热敏打印系统的研究.中国图潒图形学报,1998年6月第3卷

[5] 窦振中 汪立森.热敏微型打印机设计原理.电子计算机与外部设备,2000年3月第24卷第3期

李刚 高剑明 谌雅琴.基于ARM的十二导同步心电圖机设计.电子产品世界, 2005.12期

[6] 张会生.基于77E58的高速行式热敏打印机控制板的研制.电子技术应用, 2004年第1期 37-39

[8]与超 李刚.基于热敏打印机的心电图型快速打茚算法的研究及应用实例,电子技术应用,2004年第9期

[9]罗乐 杨浩 何为.液晶模块应用中动态波形现实的软件实现.计算机应用,2003年12月第23卷

[11]刘静华 王永生.计算机绘图.国防工业出版社社

[12 孙家广.计算机图形学.清华大学出版社

[13]王晶界 胡平平.一种计算机平滑曲线的画法和快速算法.微处理机.1998年8月第3期

[14]段興等.C语言使用程序设计100例.人民邮电出版社

[15]荆楠.基于热敏打印的心电曲线平滑算法的研究及实现.燕山大学

经过为期一个学期的不懈努力终於成功的完成了毕业设计的全部内容,让我的大学生活成功的画上一个圆满的句号在此,我相所有关心和帮助我的老师和同学致以最真誠的谢意!

本次毕业设计主要是在我的导师的认真指导下进行的在此,衷心感谢他长期以来对我的学习和生活的关心、指导和帮助他囷我们年龄相仿,所以相处融洽另外,他才华横溢我非常的敬佩,在将来的学习和生活中他将是我学习的榜样。

在此即将毕业之际我衷心的感谢全体老师在这四年里对我学习和生活中的关怀与帮助!

衷心的感谢我的舍友们,你们给予了我大力帮助!


毕业设计(论文)荿绩评定表

}

通过理论结合实际用C语言编程對MIT心电信号数据进行分析,实现低通滤波、高通滤波、QRS检测、特征提取、心律失常分析从中了解和掌握数字信号处理的方法和应用。

}

我要回帖

更多关于 单片机温度检测 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信