李能禾,成谢锋
(南京邮电大学 电子科学与工程学院,江苏 南京 210003)
心脏病是人类健康的头号杀手,而我国每年有几十万人死于心脏病。目前,心脏病的发病率逐年升高,已经成为严重威胁人类健康的疾病之一。心音检测和分析是了解心脏和大血管状态的一种不可缺少的手段。心音信号是人体的重要声音信号之一,含有关于心脏各个部分如心房、心室、大血管、心血管及各个瓣膜功能状态的大量病理信息,是临床评估心脏功能状态的最基本方法,是心脏及大血管机械运动状况的反映。当心血管疾病尚未发展到产生临床及病理改变(如ECG变化)之前,心音中出现的杂音和畸变就是重要的诊断信息。心音信号提取在心血管疾病中具有重要价值,是心血管疾病无创性检测的重要方法,具有心电图、超声心电图不可取代的优势。因此,运用新技术进行心音信号的提取一直是人们感兴趣的研究方向[1-2]。
LabVIEW是美国国家仪器公司NI(National Instrument)的软件产品。它是一个具有革命性的图形化开发环境,内置信号采集、测量分析与数据显示功能,摒弃了传统开发工具的复杂性。用LabVIEW开发的程序称为虚拟仪器[3]。虚拟仪器是计算机技术与仪器技术结合的完美产物,代表仪器发展的方向。
但是,对于一些需要进行大量数据运算处理的复杂应用,LabVIEW则显得有些力不从心[4-5]。而MATLAB具有很强的工程计算功能,已经成为应用学科中的计算机辅助分析、设计、仿真等不可缺少的基础软件。因此,研究LabVIEW与MATLAB之间的混合编程,使它们在功能上互补,具有实用价值。
传统的心音图仪完全没有量化分析功能,在心音的存储、处理上存在着较大的局限性,故临床应用较少。随着数字技术的发展,国内外再次出现心音研究的热情,研究内容包括心音信号检测、表示形式、分析、识别和模拟以及心音信号处理的临床应用。但是现有的心音检测仪在功能上有很多不足,如:功能单一、体积较大、成本较高、存在较多人为误差、测试时间太短等。
针对以上问题,本文所提出的方法利用了虚拟仪器的各种特点,将LabVIEW与MATLAB强大的数据分析功能结合,实现心音信号的采集分析。并且该方法利用PC机的声卡进行采集,而不用市面上价格昂贵的数据采集卡,大大降低了成本,使得信号的采集更加容易实现。
(1)性能良好的普通个人台式机或笔记本电脑,要求带有能正常工作的声卡。
一般地,人耳的听力范围在20 Hz~20 kHz之间,因此,只要采样频率达到 20 kHz×2=40 kHz时,就可以满足人们的要求。现时大多数声卡的采样频率都已达到44.1 kHz或48 kHz,即已达到了CD音质水平。
(2)HKY-06B心音信号传感器:采用新型高分子聚合材料微音传感元件采集心脏搏动和其他体表动脉搏动信号,再经过高度集成化信号处理电路处理,输出低阻抗音频信号。可广泛应用于各类心音采集设备。配合HKY06B-PC适配器与计算机声卡连接,则可通过声卡与计算机连接进行心音信号的采集录音处理。
1.2.1 LabVIEW8.20程序开发软件
LabVIEW8.20是美国国家仪器有限公司推出的LabVIEW图形化开发平台的新版本,提高了设计、控制和测试领域工程师的效率,同时包括对LabVIEW实时模块、LabVIEW FPGA模块、LabVIEW PDA模块以及LabVIEW数据记录和监控模块的升级[6]。LabVIEW8.20提供大量完成信号产生、信号处理、信号分析及滤波器设计的子程序,结合普通PC声卡可以方便地采集声音信号。
1.2.2 MATLAB 7.0语言编译平台
MATLAB拥有强大的科学计算功能、完整的数字信号处理及图形图像工具箱支持,使系统的即时性和准确性得到有力的保证。应用范围涵盖了工业、电子、医疗以及建筑等领域,其主要特点如下[7]:
(1)MATLAB的基本单位为矩阵,其表达式与数学、工程计算中常用的形式类似,并且矩阵的行和列无需定义,可随时添加或修改。
(2)MATLAB语言以解释方式工作,对每条语句进行解释后即运行,键入算式即得结果,无需编译,对错误可立即做出反应,大大减少了编程和调试的工作。
(3)具有非常友好的人机界面。MATLAB语言规则与人们长期以来使用的在演算纸上进行演算的书写习惯十分相似,易学易读适于交流。
(4)具有强大的做图和数据可视化功能。可以把数据以多种形式加以表现,非常简单、直观、方便。
(5)具有很强的可扩展性。MATLAB软件包括MATLAB主程序和许多日益增多的工具箱,工具箱实际就是用MATLAB的基本语句编写的各种子程序集,用于解决某一方面的专门问题或实现某一类的新算法。MATLAB还提供了与其他应用语言的接口,以实现数据的共享和传递。
系统结构框图如图1所示。
图1 系统结构框图
心音信号采集功能的实现是由LabVIEW控制计算机声卡将传感器得到的模拟信号转换为数字信号并存储在计算机中。从数据采集的角度,PC声卡本身就是一个优秀的数据采集系统,它同时具有A/D和D/A转换功能,不仅价格低廉,而且兼容性好、性能稳定、灵活通用,特别是软件驱动程序升级方便。如果测量对象的频率在音频范围(20 Hz~20 kHz)内,而且对采样频率等指标又没有太高要求,就可以考虑使用声卡。
LabVIEW中提供了一系列使用Windows底层函数编写的与声卡有关的函数,这些函数集中在Functions、All Function、Graphics&Sound、Sound下。由于使用 Windows底层函数直接与声卡驱动程序打交道,因而封装层次低、速度快,而且可以访问、采集缓冲区中任意位置的数据,具有很大的灵活性,能够满足实时不间断采集的需要。
如图2所示,利用LabVIEW的函数控件和声卡对语音信号进行采样。图中,SI Configure设置声卡中与数据采集相关的硬件参数,将device设置为0,采样位数为单声道16位,采样频率为11 025 Hz,缓冲区长度为默认值8 192字节;SI Start通知声卡开始采集外部数据;SI Read将数据缓冲区中的内容读取到用户程序的数组中,1次可读取缓冲区长度的一半(4096字节);SIStop通知声卡停止采集外部数据;SI Clear完成最终的清理工作。
图2 声音信号采集流程
2.2.1 小波分析理论
非平稳信号的表示方法除了短时Fourier变换和直接在联合时频平面上表征该信号外,也可以将频率域的表征改为另外一个域 (如尺度域),而用联合的时间和尺度平面来描述信号,这正是小波分析的基本思想。小波分析利用多种小波基函数对原始信号进行分解,运用小波基可以提取信号中的指定时间和指定频率的变化。
信号小波变换的基本含义[8]是:将一个基本小波做尺度变换和时移后与待分析的信号进行内积。小波变换的最基本形式是连续小波变换。信号x(t)的连续小波变换 CWTx(a,b)定义为:
小波函数ψa,b(t)还可以定义为:
信号x(t)的连续小波变换 CWTx(a,b)还可以写成:
式中,<x(t),ψa,b(t)> 表示信号x(t)和小波函数ψa,b(t)的内积。信号与小波函数内积示意图如图3所示。
图3 信号与小波函数内积示意图
可见,连续小波变换定量地表示了信号和小波系数中各个小波函数的相关程度。
对于平方可积的小波函数,如果将小波看成是L2(R)空间的基函数系,则连续小波变换定义为信号在该基函数系上的分解或投影。小波分解示意图如图4所示。
连续小波变换在频域上还可以定义为:
式中,X(ω)、ψ(ω)分别为 x(t)、ψ(t)的傅里叶变换。
图4 小波分解示意图
可见,如果ψ(ω)具有带通的幅频特性,则连续小波变换可表示信号x(t)的局部频域特性。采用不同的a值时,ψ(aω)的中心频率和带宽各不相同,但是品质因素 Q(Q=中心频率/带宽)却保持不变。因此,不同尺度下的小波变换还可以理解为用一组品质因素相同的带通滤波器对信号进行分析。
可见a越大(对应于频率越低的情况)时,频率分辨率越高,时间分辨率越差;反之,a越小(对应于频率越低的情况)时,时间分辨率越高,频率分辨率越差。小波变换的这种“变焦距”性质正好与信号的自然特征相吻合,这是小波变换适应于非平稳信号处理的一个主要原因[9]。
2.2.2 LabVIEW 中调用 MATLAB Script节点
LabVIEW使用ActiveX技术来实现MATLAB脚本节点。ActiveX是由Microsoft公司定义的用于Internet的一种对象链接与嵌入技术,它满足了网络上不同应用程序间交换信息的需求。LabVIEW中提供了各种与其他应用程序进行相互调用的方法,如ActiveX、DDE等事实上的标准接口方式。虽然可以通过这些方式实现在LabVIEW中调用MATLAB,但是过程相对繁琐。NI公司为此提供了一种相对容易的方式,即MATLAB Script节点方式。这种方式是LabVIEW开发组推荐使用的方式。通过这种方式,用户可以在LabVIEW中使用MATLAB强大的数值运算功能。
MATLAB Script节点如图5所示,使用户可以将MATLAB程序导入到流程图中,又可以在流程图中根据MATLAB程序的语法编辑MATLAB程序。选择该节点的操作为:Functions>>Mathematics>>Formula Palette, 即从框图窗口Function选项板的Mathematics/Formula子选项板上访问MATLAB脚本节点,在将该节点添加到流程图中后,选择对应的脚本服务器。本文即选择MATLAB Script。从选择菜单中可以看出与其有关的菜单项。通过这些菜单可以将MATLAB程序导入到该节点并且可以给节点增加输入输出变量。添加节点后就可以按照MATLAB的语法要求在节点中编写MATLAB程序,完成后通过单击Export将程序保存到选定的目录中。如果已经将MATLAB程序编好,则可以通过单击Import直接将其导入到节点中。还可以对节点增加输入、输出变量,这些变量在程序运行时,起到在LabVIEW和MATLAB间传递参数的作用。MATLAB脚本节点与其外部LabVIEW框图程序依靠脚本节点的输入输出来连接。可以在脚本节点的快捷菜单中选择Add Input/Add Output添加输入输出。
在LabVIEW中调用MATLAB时有几点必须注意[10]:
(1)LabVIEW使用ActiveX技术来实现MATLAB脚本节点,因此,MATLAB脚本节点只能用于Windows平台上。
(2)MATLAB Script节点方式要求计算机上必须安装MATLAB 5.0及以上版本,因为执行脚本节点时要调用MATLAB脚本服务器。
(3)因为LabVIEW和MATLAB是两种不同的编程语言,有各自的数据类型定义,所以结合应用时必须注意MATLAB脚本节点内外数据类型的匹配,否则LabVIEW运行时将产生错误或错误的信息。可以为脚本点的输入输出端子从其快捷菜单上Choose Data Type中选择合适的数据类型[11]。
图5 MATLAB Script节点
2.2.3 使用 MATLAB进行小波降噪
采用小波变换对心音信号进行去噪时,需要考虑几个因素:选用何种小波母函数、分解的层数和闭值的选取方法等。但在以上的3个步骤中,最关键的就是如何选取阈值和如何进行阈值的量化,它直接关系到信号消噪的质量。
MATLAB小波工具箱(Wavelet Toolbox)提供了许多小波分析功能函数,其中对一维信号提取的小波函数是wden函数,该函数最简单的用法为:Sd=wden(s,tptr,sorh,scal,n,wav),它的返回值是经过对原始信号 s进行处理后的信号 Sd。另外,sorh指定软阈值(sorh=‘s’)或硬阈值(sorh=‘h’)的选择;scal定义了阈值是否需要调整:(scal=‘one’)时表示不需要调整,(scal=‘sln’)时表示根据第1层的系数进行1次噪声层的估计来调整阈值,(scal=‘mln’)时表示在不同层估计噪声层,以此来调整阈值;n为小波分解的层数;wav指定分解时所用的小波;tptr指定阈值选取规则:tptr=‘rigrsure’时,采用无偏估计原则进行适应性阈值选择。tptr=‘heursure’时选用首次选择的启发式变量作为阈值。tptr=‘sqtwolog’时,选用 sqrt(2*log(length(x)))作为阈值;当 tptr=‘mini maxi’时,极大极小原理选择阈值。
使用MATLAB小波工具箱只需要根据采集信号的特点选择合适的函数和命令,就可以实现信号的降噪处理。经过对小波母函数的选择、分解层数和阈值的选择规则进行分析[12],经过多次实验,提出采用coif5小波进行5层分解,选择固定阈值处理心音信号效果最佳。降噪后的波形图如图6所示。
图6 小波降噪前后心音对比
从仿真结果可以看出,利用LabVIEW与MATLAB小波工具箱结合进行编程能有效采集心音信号并且降低心音信号中的噪声。对MATLAB程序的改进及开发将成为后续研究中分析声音信号的重点。
在工程领域中,LabVIEW和MATLAB是风靡世界的2种语言,其中LabVIEW备受工程应用人员的青睐,被认为是图形化编程语言的最优秀的代表;而MATLAB被称为是最强大的工程计算语言。在医学领域结合2种语言的特点,利用LabVIEW和MATLAB混合编程,实现了一个简单的心音检测分析系统,该系统编程方便、计算简单、便于实现,是检测分析心音的一条有效途径。
[1]GEDDES L A.Birth of the stethoscope[J].Engineering in Medicine and Biology Magazine, 2005,24:84-86.
[2]KARNATH B,THORNTON W.Auscultation of the heart[J].Hospital Physician, 2002(9):39-43.
[3]XIANG Xue Jun, XIA Ping, YANG Sheng, et al.Realtime digital simulation of control system with LabVIEW simulation interface toolkit[C].Proceedings of the 26th Chinese Control Conference, July 26-31 2007:318-322.
[4]刘君华,郭会军,赵向阳,等.基于LabVIEW的虚拟仪器设计[M].北京:电子工业出版社,2003.
[5]杨乐平,李海涛,赵勇,等.LabVIEW高级程序设计[M].北京:清华大学出版社,2003.
[6]刘刚,王立香,张连俊.LabVIEW8.20中文版编程及应用[M].北京:电子工业出版社,2008.
[7]初秀琴,何蕾,李玉山.MATLAB外部接口的研究与实现[J].计算机仿真,2002(1):107-109.
[8]汪源源.现代信号处理理论和方法[M].上海:复旦大学出版社,2002.
[9]岳宇.生物雷达检测技术中心跳与呼吸信号分离技术的研究[D].西安:第四军医大学,2007.
[10]石博强.LabVIEW 6.1编程技术实用教程[M].北京:中国铁道出版社,2002.
[11]ROBERT H.Bishop LabVIEW 6.1实用教程[M].乔瑞萍,译.北京:电子工业出版社,2002.
[12]杨艳妮.基于MATLAB的心音信号分析比较研究[D].西安:陕西师范大学,2007.