毕业设计论文_基于labview的心电信号测试系统心电信号采集.doc
《毕业设计论文_基于labview的心电信号测试系统心电信号采集.doc》由会员分享,可在线阅读,更多相关《毕业设计论文_基于labview的心电信号测试系统心电信号采集.doc(23页珍藏版)》请在冰点文库上搜索。
基于LabVIEW的心电信号测试系统(心电信号采集)
1绪论
由于计算机技术发展迅猛,且具有众多厂商的软硬件支持,使其在各领域的应用得到了长足的发展,同时也促进了图形开发软件包和图形开发环境的迅速普及【2】。
虚拟仪器是计算机硬件资源、仪器与实验系统硬件资源和虚拟仪器软件资源三者的有效结合。
在虚拟仪器的图形软件开发平台研究方面,最有代表性的是LabVIEW虚拟仪器软件开发平台【3】。
LabVIEW是一种基于图形化语言的开发、调试、运行的集成化虚拟仪器开发平台。
它针对测试系统软件开发的需要将数据的采集、处理、存储、输出和远程传输等一些常用的功能模块化,通过对程序模块的调用,提高了模块的复用度和软件的开发效率【4】。
LabVIEW是一种面向对象的图形化编程语言开发环境,本文对其在医学心电信号采集与处理中的应用将做出具体介绍。
由于心电信号经DAQ数据采集卡采集后,在LabVIEW的前面板上只能显示出最原始,最简单的数据,尚不能直观的看出心电信号的心率大小等信息。
因此,本次设计的目的是开发一套基于LabVIEW的心电信号测试系统,要求在LabVIEW的前面板上能直观的读取心率数据。
这种方法在国际上,并不是一个新的课题,前人已有过研究。
但是他们采用的计算方法都比较复杂。
所以,在延续已有的研究方案上,本人想设计出一套更为简单、便捷的测试系统。
实验方法均是在插入式信号采集卡DAQ的硬件支持下,利用LabVIEW编程软件,设计一套多通道心电信号采集测试系统。
使用模拟心电信号发生器,将心电信号进行调试和放大处理,然后输入DAQ数据采集卡进行采集,最终在电脑上通过LabVIEW编程软件的界面,显示出连续的,完整的心电信号。
通过对LabVIEW的编程,使电脑能显示出心率大小,信号采集次数和信号采集频率的信息。
与已有的方案相比,本次设计的不同之处就在于如何对LabVIEW进行编程【5】。
本人的设计重点是信号的采集部分,对于种种设计中应注意的问题,和细节,将在本文中得以解释。
2虚拟仪器概述
虚拟仪器(virtualinstrumention)是基于计算机的仪器。
计算机和仪器的密切结合是目前仪器发展的一个重要方向。
粗略地说这种结合有两种方式,一种是将计算机装入仪器,其典型的例子就是所谓智能化的仪器。
随着计算机功能的日益强大以及其体积的日趋缩小,这类仪器功能也越来越强大,目前已经出现含嵌入式系统的仪器。
另一种方式是将仪器装入计算机。
以通用的计算机硬件及操作系统为依托,实现各种仪器功能,虚拟仪器主要是指这种方式。
下面的框图
(1)反映了常见的虚拟仪器方案。
图
(1)常见的虚拟仪器组建方案
虚拟仪器的主要特点有:
(1)尽可能采用了通用的硬件,各种仪器的差异主要是软件。
(2)可充分发挥计算机的能力,有强大的数据处理功能,可以创造出功能更强的仪器。
(3)用户可以根据自己的需要定义和制造各种仪器。
虚拟仪器实际上是一个按照仪器需求组织的数据采集系统。
虚拟仪器的研究中涉及的基础理论主要有计算机数据采集和数字信号处理。
目前在这一领域内,使用较为广泛的计算机语言是美国NI公司的LabVIEW。
虚拟仪器的起源可以追朔到20世纪70年代,那时计算机测控系统在国防、航天等领域已经有了相当的发展。
PC机出现以后,仪器级的计算机化成为可能,甚至在Microsoft公司的Windows诞生之前,NI公司已经在Macintosh计算机上推出了LabVIEW2.0以前的版本。
对虚拟仪器和LabVIEW长期、系统、有效的研究开发使得该公司成为业界公认的权威【6】。
3数据采集系统简介
在计算机广泛应用的今天,数据采集的重要性是十分显著的。
它是计算机与外部物理世界连接的桥梁。
各种类型信号采集的难易程度差别很大。
实际采集时,噪声也可能带来一些麻烦。
数据采集时,有一些基本原理要注意,还有更多的实际的问题要解决。
在通用微机系统里,含有一块非常重要的采集卡——DAQ数据采集卡,它是完成采集系统的不可或缺的部分。
3.1数据采集系统的构成
图
(2)数据采集系统结构
上图表示了数据采集的结构。
在数据采集之前,程序将对采集板卡初始化,板卡上和内存中的Buffer是数据采集存储的中间环节。
需要注意的两个问题是:
是否使用Buffer?
是否使用外触发启动、停止或同步一个操作。
3.1.1缓冲(Buffers)
这里的缓冲指的是PC内存的一个区域(不是数据采集卡上的FIFO缓冲),它用来临时存放数据。
例如,你需要采集每秒采集几千个数据,在一秒内显示或图形化所有数据是困难的。
但是将采集卡的数据先送到Buffer,你就可以先将它们快速存储起来,稍后再重新找回它们显示或分析。
需要注意的是Buffer与采集操作的速度及容量有关。
如果你的卡有DMA性能,模拟输入操作就有一个通向计算机内存的高速硬件通道,这就意味着所采集的数据可以直接送到计算机的内存。
不使用Buffer意味着对所采集的每一个数据你都必须及时处理(图形化、分析等),因为这里没有一个场合可以保持你着手处理的数据之前的若干数据点。
下列情况需要使用BufferI/O:
·需要采集或产生许多样本,其速率超过了实际显示、存储到硬件,或实时分析的速度。
·需要连续采集或产生AC数据(>10样本/秒),并且要同时分析或显示某些数据。
·采样周期必须准确、均匀地通过数据样本。
下列情况可以不使用BufferI/O:
·数据组短小,例如每秒只从两个通道之一采集一个数据点。
·需要缩减存储器的开支。
3.1.2触发(Triggering)
触发涉及初始化、终止或同步采集事件的任何方法。
触发器通常是一个数字或模拟信号,其状态可确定动作的发生。
软件触发最容易,你可以直接用软件,例如使用布尔面板控制去启动/停止数据采集。
硬件触发让板卡上的电路管理触发器,控制了采集事件的时间分配,有很高的精确度。
硬件触发可进一步分为外部触发和内部触发。
当某一模入通道发生一个指定的电压电平时,让卡输出一个数字脉冲,这是内部触发。
采集卡等待一个外部仪器发出的数字脉冲到来后初始化采集卡,这是外部触发。
许多仪器提供数字输出(常称为“triggerout”)用于触发特定的装置或仪器,在这里,就是数据采集卡。
下列情况使用软件触发:
·用户需要对所有采集操作有明确的控制,并且
·事件定时不需要非常准确。
下列情况使用硬件触发:
·采集事件定时需要非常准确。
·用户需要削减软件开支。
·采集事件需要与外部装置同步。
3.2数据采集(DAQ)卡
3.2.1DAQ数据采集卡简介
LabVIEW的数据采集(DataAcquisition)程序库包括了许多NI公司数据采集(DAQ)卡的驱动控制程序。
通常,一块卡可以完成多种功能-模/数转换,数/模转换,数字量输入/输出,以及计数器/定时器操作等。
用户在使用之前必须DAQ卡的硬件进行配置。
这些控制程序用到了许多低层的DAQ驱动程序。
本课程需要一块安装好的DAQ卡以及LabVIEW开发系统。
数据采集系统的实物组成如图(3)所示:
图(3)数据采集系统的组成
DAQ系统的基本任务是物理信号的产生或测量。
但是要使计算机系统能够测量物理信号,必须要使用传感器把物理信号转换成电信号(电压或者电流信号)。
有时不能把被测信号直接连接到DAQ卡,而必须使用信号调理辅助电路,先将信号进行一定的处理。
总之,数据采集是借助软件来控制整个DAQ系统——包括采集原始数据、分析数据、给出结果等。
上图中描述了插入式DAQ卡。
另一种方式是外接式DAQ系统。
这样,就不需要在计算机内部插槽中插入板卡,这时,计算机与DAQ系统之间的通讯可以采用各种不同的总线,如并行口或者PCMCIA等完成。
这种结构适用于远程数据采集和控制系统。
当采用DAQ卡测量模拟信号时,必须考虑下列因素:
输入模式(单端输入或者差分输入)、分辨率、输入范围、采样速率,精度和噪声等。
单端输入以一个共同接地点为参考点。
这种方式适用于输入信号为高电平(大于一伏),信号源与采集端之间的距离较短(小于15英尺),并且所有输入信号有一个公共接地端。
如果不能满足上述条件,则需要使用差分输入。
差分输入方式下,每个输入可以有不同的接地参考点。
并且,由于消除了共模噪声的误差,所以差分输入的精度较高。
3.2.2数据采集卡的功能
一个典型的数据采集卡的功能有模拟输入、模拟输出、数字I/O、计数器/计时器等,这些功能分别由相应的电路来实现。
我们使用的是NI公司生产的PCI-6221型号的数据采集卡,它具有如下功能特点:
·分辨率:
16-Bit,采样率:
250kS/s,16路模拟输入
·两路16-位模拟输出(833kS/s)
·24路数字I/O;32-位计数器;数字触发
·相关的DIO(8时钟,1MHz)
·NI-MCal校准支持
·NI-DAQmx测试软件和硬件配置程序支持
·NIST-校准证书和多余70种的信号调理模块选择
NIPXI-6221(16-通道,24路数字I/O,2路模拟输出)
模拟输入是采集最基本的功能。
它一般由多路开关(MUX)、放大器、采样保持电路以及A/D来实现,通过这些部分,一个模拟信号就可以转化为数字信号。
A/D的性能和参数直接影响着模拟输入的质量,要根据实际需要的精度来选择合适的A/D。
模拟输出通常是为采集系统提供激励。
输出信号受数模转换器(D/A)的建立时间、转换率、分辨率等因素影响。
建立时间和转换率决定了输出信号幅值改变的快慢。
建立时间短、转换率高的D/A可以提供一个较高频率的信号。
如果用D/A的输出信号去驱动一个加热器,就不需要使用速度很快的D/A,因为加热器本身就不能很快地跟踪电压变化。
应该根据实际需要选择D/A的参数指标。
数字I/O通常用来控制过程、产生测试信号、与外设通信等。
它的重要参数包括:
数字口路数(line)、接收(发送)率、驱动能力等。
如果输出去驱动电机、灯、开关型加热器等用电器,就不必用较高的数据转换率。
路数要能同控制对象配合,而且需要的电流要小于采集卡所能提供的驱动电流。
但加上合适的数字信号调理设备,仍可以用采集卡输出的低电流的TTL电平信号去监控高电压、大电流的工业设备。
数字I/O常见的应用是在计算机和外设如打印机、数据记录仪等之间传送数据。
另外一些数字口为了同步通信的需要还有“握手”线。
路数、数据转换速率、“握手”能力都是应理解的重要参数,应依据具体的应用场合而选择有合适参数的数字I/O。
许多场合都要用到计数器,如定时、产生方波等。
计数器包括三个重要信号:
门限信号、计数信号、输出。
门限信号实际上是触发信号——使计数器工作或不工作;计数信号也即信号源,它提供了计数器操作的时间基准;输出是在输出线上产生脉冲或方波。
计数器最重要的参数是分辨率和时钟频率,高分辨率意味着计数器可以计更多的数,时钟频率决定了计数的快慢,频率越高,计数速度就越快。
3.2.3数据采集卡的软件配置
一般说来,数据采集卡都有自己的驱动程序,该程序控制采集卡的硬件操作,当然这个驱动程序是由采集卡的供应商提供,用户一般无须通过低层才能与采集卡硬件打交道。
NI公司还提供了一个数据采集卡的配置工具软件——Measurement&AutomationExplorer,它可以配置NI公司的软件和硬件,比如执行系统测试和诊断、增加新通道和虚拟通道、设置测量系统的方式、察看所连接的设备等。
4LabVIEW的简介
LabVIEW是实验室虚拟仪器集成环境(LaboratoryVirtualInstrumentEngineeringWorkbench)的简称,是美国NI公司推出的一种非常优秀的面向对象的图形化编程语言,是一个开放型的开发环境。
它使用图标代替文本代码来创建应用程序,拥有大量与其它应用程序通信的VI库。
例如LabVIEW使用自动化ActiveX、DDE和SQL,可与其它Windows应用程序集成;使用DataSocket技术、WebServer、TCP/IP和UDP网络Vis,与远程应用程序通信。
在对硬件的支持方面,LabVIEW集成了与GPIB、VXI、PXI、RS-232/485、PLC和插入式数字采集设备等进行数据通信的全部功能。
在LabVIEW下开发的程序称为虚拟仪器VI(VirtualInstrument),因为其外形和操作可以模拟实际的仪器。
在对各种算法的支持方面,LabVIEW的工具箱非常有限,这就限制了大型应用程序的快速开发。
LabVIEW是虚拟仪器的图形化开发平台,是直观的前面板与流程图式的编程方法的结合,是简化了而更易于使用的、基于图形化的语言的开发环境,LabVIEW编程语言的核心是图形化编程语言(G语言),它类似于许多高级编程语言,也是一种多用途编程语言,不过它不是用语句来描述,而是用图形来描述。
通过类似于传统的程序调试工具,使用者可以清楚地看见数据在程序中流动,使程序调试更加方便。
LabVIEW采用了所见即所得的可视化技术来建立人机界面,在测控领域,LabVIEW提供了现成的各种对象,方便用户将各种控制对象用作自己的对象,并易于更改。
LabVIEW提供了很多现成的可供调用的函数库,从底层的GPIB、VXI、PXI、串口数据采集板的控制子程序到大量的仪器驱动程序;从基本的功能函数到高级分析库,几乎涵盖了仪器设计中需要的所有函数;同时,LabVIEW还支持用于网络通讯的TCP/IP协议、动态数据交换(DDE)和网络化多媒体对象技术(ActiveX)等应用软件标准。
LabVIEW支持多种系统平台,在WindowsNT/3.1/9X/2000、SUNSTAR、HP、PowerMacintosh等多种系统平台上,NT公司都提供了相应版本的软件。
各平台之间开发的应用程序还可以直接进行移植。
LabVIEW还提供了动态链接库(DLL)接口和代码接口节点(CIN),使用户在LabVIEW平台上能调用其他软件平台编译的模块,如MatLAB[1]、VC++[2]等,提供对对象链接和嵌入(OLE)的支持。
LabVIEW平台支持先进、灵活、强大的数字信号分析功能,自身带有波形测量、信号监测、波形发生和信号处理,它们提供了直流交流成分分析、振幅测量、脉冲测量、谐波畸变分析、信号提取等功能;同时还提供了高级数学分析库。
可以实现一维、二维可视化处理以及积分微分导数和曲线拟合的功能。
因此在数字信号处理领域,LabVIEW设计的信号处理软件可以作为数据采集系统或测试仪器系统的信号处理部分。
LabVIEW的强大功能归因于它的层次化结构,用户可以把创建的VI程序当作子程序调用,调用的阶数是无限的。
这种层次结构利用了模块化编程的概念,用户可以把一个复杂的任务分成许多简单的任务,再用许多子VI来分别完成这些子任务,然后用一个总的VI把这些子VI结合起来,完成这项复杂的任务。
子程序可以独立调试运行,这样,整个VI调试起来相对的简便、快捷。
4.1LabVIEW应用程序的构成
所有的LabVIEW应用程序,即虚拟仪器(VI),它包括前面板(frontpanel)、流程图(blockdiagram)以及图标/连结器(icon/connector)三部分。
4.1.1前面板
前面板是图形用户界面,也就是VI的虚拟仪器面板,这一界面上有用户输入和显示输出两类对象,具体表现有开关、旋钮、图形以及其他控制(control)和显示对象(indicator)。
图
(2)所示为一个简单VI的随机信号发生和显示的前面板,上面有一个显示对象,以曲线的方式显示了所产生的一系列随机数。
还有一个控制对象——开关,可以启动和停止工作。
显然,并非简单地画两个控件就可以运行,在前面板后还有一个与之配套的流程图。
控制对象(输入)
显示对象
(输出)
图(4) 随机信号发生前面板
前面板工具条:
4.1.2流程图
流程图是提供VI的图形化源程序界面。
在流程图中对VI编程,以控制和操纵定义在前面板上的输入和输出功能。
流程图中包括前面板上的控件的连线端口,还有一些前面板上没有,但编程必须有的器件,例如函数、结构和连线等。
图(3)是与图
(2)对应的流程图。
我们可以看到流程图中包括了前面板上的开关和随机数显示器的连线端口,还有一个随机数发生器的函数及程序的循环结构。
随机数发生器通过连线将产生的随机信号送到显示控件,为了使它持续工作下去,设置了一个WhileLoop循环,由开关控制这一循环的结束。
函数:
随机数发生器
结构:
循环
与前面板控件对应的连线端子
与前面板控件对应的连线端子
图(5)随机信号发生器流程图
框图工具条:
如果将VI与标准仪器相比较,那么前面板上的东西就是仪器面板上的东西,而流程图上的东西相当于仪器箱内的东西。
在许多情况下,使用VI可以仿真标准仪器,不仅在屏幕上出现一个惟妙惟肖的标准仪器面板,而且其功能也与标准仪器相差无几。
4.1.3图标/连接器
VI具有层次化和结构化的特征。
一个VI可以作为子程序,这里称为子VI(subVI),可以被其他VI调用。
4.2LabVIEW的操作模板
在LabVIEW的用户界面上,应特别注意它提供的操作模板,包括工具(Tools)模板、控制(Controls)模板和函数(Functions)模板。
这些模板集中反映了该软件的功能与特征。
下面我们来大致浏览一下。
4.2.1工具模板(ToolsPalette)
该模板提供了各种用于创建、修改和调试VI程序的工具。
如果该模板没有出现,则可以在Windows菜单下选择ShowToolsPalette命令以显示该模板。
当从模板内选择了任一种工具后,鼠标箭头就会变成该工具相应的形状。
当从Windows菜单下选择了ShowHelpWindow功能后,把工具模板内选定的任一种工具光标放在流程图程序的子程序(SubVI)或图标上,就会显示相应的帮助信息。
下述工具中注意1和2的区别,2用于编程时,1用于运行程序时。
4是一个特有的工具,它并不是一个简单的画线工具,而是一个符合LabVIEW语言规定的对象连接工具。
图(6)工具模板
表1各工具图标的名称和作用
图标
名称
功 能
1
OperateValue(操作值)
用于操作前面板的控制和显示。
使用它向数字或字符串控制中键入值时,工具会变成标签工具
2
Position/Size/Select(选择)
用于选择、移动或改变对象的大小。
当它用于改变对象的连框大小时,会变成相应形状。
3
EditText(编辑文本)
用于输入标签文本或者创建自由标签。
当创建自由标签时它会变成相应形状。
4
ConnectWire(连线)
用于在流程图程序上连接对象。
如果联机帮助的窗口被打开时,把该工具放在任一条连线上,就会显示相应的数据类型。
5
ObjectShortcutMenu(对象菜单)
用鼠标左键可以弹出对象的弹出式菜单。
6
ScrollWindows(窗口漫游)
使用该工具就可以不需要使用滚动条而在窗口中漫游。
7
Set/ClearBreakpoint(断点设置/清除)
使用该工具在VI的流程图对象上设置断点。
表1续表:
各工具图标的名称和作用
下面的两个模板是多层的,其中每一个子模板下还包括多个对象。
4.2.2控制模板(ControlPalette)
注意:
只有打开前面板时才能调用该模板
该模板用来给前面板设置各种所需的输出显示对象和输入控制对象。
每个图标代表一类子模板。
如果控制模板不显示,可以用Windows菜单的ShowControlsPalette功能打开它,也可以在前面板的空白处,点击鼠标右键,以弹出控制模板。
控制模板如图(5)所示,它包括如下所示的一些子模板。
子模板中包括的对象,我们在功能中用文字简要介绍。
图(7)控制模板
表2各控制子的名称和作用
图标
子模板名称
功 能
1
Numeric(数值量)
数值的控制和显示。
包含数字式、指针式显示表盘及各种输入框。
2
Boolean(布尔量)
逻辑数值的控制和显示。
包含各种布尔开关、按钮以及指示灯等。
3
String&Path(字符串和路径)
字符串和路径的控制和显示。
表2续表:
各控制子的名称和作用
4.2.3功能模板(FunctionsPalette)
注:
只有打开了流程图程序窗口,才能出现功能模板。
功能模板是创建流程图程序的工具。
该模板上的每一个顶层图标都表示一个子模板。
若功能模板不出现,则可以用Windows菜单下的ShowFunctionsPalette功能打开它,也可以在流程图程序窗口的空白处点击鼠标右键以弹出功能模板【7】。
功能模板如图(8)所示,其子模块如表3所示。
(个别不常用的子模块未包含)
图(8)功能模板
表3各功能子模板的名称和功能
图标
子模板名称
功 能
1
Structure(结构)
包括程序控制结构命令,例如循环控制等,以及全局变量和局部变量。
2
Numeric(数值运算)
包括各种常用的数值运算,还包括数制转换、三角函数、对数、复数等运算,以及各种数值常数。
3
Boolean(布尔运算)
包括各种逻辑运算符以及布尔常数。
4
String(字符串运算)
包含各种字符串操作函数、数值与字符串之间的转换函数,以及字符(串)常数等。
5
Array(数组)
包括数组运算函数、数组转换函数,以及常数数组等。
6
Cluster(簇)
包括簇的处理函数,以及群常数等。
这里的群相当于C语言中的结构。
7
Comparison(比较)
包括各种比较运算函数,如大于、小于、等于。
8
Time&Dialog(时间和对话框)
包括对话框窗口、时间和出错处理函数等。
9
FileI/O(文件输入/输出)
包括处理文件输入/输出的程序和函数。
10
DataAcquisition(数据采集)
包括数据采集硬件的驱动,以及信号调理所需的各种功能模块。
11
Waveform(波形)
各种波形处理工具
12
Analyze(分析)
信号发生、时域及频域分析功能模块及数学工具。
13
InstrumentI/O(仪器输入/输出)
包括GPIB(488、488.2)、串行、VXI仪器控制的程序和函数,以及VISA的操作功能函数。
14
Motion&Vision(运动与景像)
15
Mathematics(数学)
包括统计、曲线拟合、公式框节点