基于Android 移动平台的心音采集软件的设计与实现

2020-03-18 06:02:56申玉静
医疗卫生装备 2020年2期
关键词:香农心音通滤波

申玉静,王 寻,唐 闽*

(1.中国医学科学院阜外医院心律失常中心,北京100037;2.中国科学院声学研究所语言声学与内容理解重点实验室,北京100190)

0 引言

心血管疾病是世界范围内导致死亡率较高的疾病之一[1-2]。随着我国国民经济的发展和人口老龄化的加快,心血管疾病的发病率呈现出明显的上升趋势。尽早发现、及时治疗心血管疾病是目前医学领域的研究热点。心音是人体一种重要的生理信号,在心脏疾病的症状显现之前,心音往往就会出现异常。因此,对心音信号进行分析有助于较早发现心脏疾病。正常的心音中可听音通常包含第一心音(S1)和第二心音(S2)2 个部分,它们统称为基础心音[3]。S1 产生于心室收缩的开始阶段,是由二尖瓣和三尖瓣的关闭引起的;S2 产生于心室舒张的开始阶段,是由主动脉瓣和肺动脉瓣的关闭引起的[4]。

心音听诊是一种成本低廉、操作简单的心脏检查方法[5]。由于传统的听诊器体积较大,信号难以被放大,数据无法保存,所以人们发明了功能更加丰富的电子听诊器。如张雷等[6]设计了一种军用便携式一体化远程检诊箱,其中包括了蓝牙电子听诊器,但其全套系统较为复杂,不适合民用。黄彬等[7]考虑到传统心电和心音采集设备相对独立且不便于携带,设计了基于Android 操作系统的心电心音采集设备,但该设备软件端上只能实现心电和心音的波形显示,不能保存和进一步分析数据。廖庆丰等[8]报道了一种便携式电子听诊器,但该听诊器需要挂接U 盘才能进行心音的存储,使用较为不便。陈刚等[9]设计了一种心音检测装置,其主要创新在于硬件设计,但并未设计移动平台软件。樊容[10]设计了一种低噪声电子听诊器用于心音和肺音的听诊,该设备可以将采集到的声音由扬声器或耳机输出,但不能使用上位机分析和保存数据。

由于Android 平台是完全开放的移动设备平台,用户界面友好,资源丰富[11-12],所以本文使用Android Studio 集成开发工具[13]设计了基于Android 移动平台的心音采集软件。本软件具有患者姓名输入、听诊区选择的功能,能够实时显示滤波前和滤波后的心音波形,且波形幅值可以调节。此外,本软件还可以实时显示心音香农能量包络,使得用户能够实时监测当前听诊位置的心音强度,从而调整采集位置,较为准确地找到心音最强的听诊部位。

1 系统总体设计

心音数据采集系统由3 个部分组成:心音采集传感器、信号处理采集电路(包括信号放大、数字化采样和蓝牙发送)和上位机(平板计算机),如图1 所示。其中心音采集传感器用于将传播至胸壁的心音信号转换为电信号,需要具备抗干扰性强、灵敏度高、频率响应曲线平坦等特点[14]。故本研究选用HKY-06B[15]作为心音采集传感器,OPA2340PA 芯片用于将HKY-06B 输出的信号放大。由于心音有效频率范围通常低于1 kHz,本研究设计二阶巴特沃斯低通滤波器滤除1 kHz 以上的信号。此后,使用MAX9867芯片对心音进行采样,采样频率为4 kHz,采样数据宽度为16 bit。考虑到蓝牙(Bluetooth)无线通信技术能够实现点对点的实时数据传输,且链路稳定可靠,在医疗设备中已经得到了广泛的应用[16],本系统选用具备蓝牙功能的RDA5841S芯片作为主控制器。RDA5841S可以设置MAX9867 采样时的参数,也可以通过其自带的蓝牙功能将采样后的数据发送至Android 上位机。上位机可以显示心音波形及其香农能量包络,并保存心音数据(具体过程如图1 所示)。

图1 心音数据采集系统整体设计

2 心音采集软件设计

心音采集软件包括数据接收、数据处理、数据显示和数据保存4 个部分,其结构如图2 所示。软件通过蓝牙接收心音数据后,对其进行滤波处理。同时,可以选择显示滤波前的原始数据或滤波后的数据,滤波前后的数据都会被保存,且数据显示与数据保存是同步进行的。

在软件设计中,定义MainActivity 类用于控制数据接收中的蓝牙连接,Filter类用于心音带通滤波,CalculateS 类用于计算心音的香农能量包络,MyView1 和MyView2 类分别用于控制心音波形和心音香农能量包络的实时显示,RTMonitorActivity 类用于控制心音数据的接收和存储,MainActivity_file类用于查看已存储的心音文件,WabHeader 类包含.wav 文件的头信息。

图2 心音采集软件结构

2.1 数据接收

软件需要实时接收RDA5841S 芯片通过蓝牙发送的数据。首先在Android 工程的Manifest.xml 文件中声明需要的权限BLUETOOTH 和BLUETOOTH ADMIN,声明方式如下:<uses-permission android:name="android.permission.BLUETOOTH"/><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

Android 移动平台蓝牙开发的应用程序接口(application programming interface,API)主要包括[17]:

(1)BluetoothAdapter:本地蓝牙适配器对象,通过该类可以发现蓝牙设备并查询已配对列表,也可以获取设备的蓝牙状态信息。

(2)BluetoothDevice:远端蓝牙设备对象,利用该对象可以获得蓝牙设备相关信息。

(3)BluetoothSocket:蓝牙套接字接口,使用该类可以实现数据的输入和输出。

(4)BluetoothServerSocket:用于打开服务连接和监听连接的请求。

(5)BluetoothClass:用于描述一个蓝牙设备的属性,是只读的属性集合。

本软件在RTMonitorActivity 类中定义Bluetooth Socket 的实例mBTSocket 来控制数据的发送和接收。当蓝牙连接成功后,定义变量byte[]test={0x01,0x02,0x03,0x04}作为指令,并使用mBTSocket.getOut putStream().write(test)函数通知下位机开始蓝牙数据的传输,此后使用该实例的getInputStream().read()函数来读取缓存中的数据,并将读取到的8 bit 数据拼接为16 bit 数据。蓝牙连接和数据传输的具体流程如图3 所示。软件中先打开蓝牙,然后扫描设备,连接成功后开始传输数据。每次接收到数据后就对数据进行实时处理。

图3 蓝牙连接和数据传输流程图

2.2 数据处理

软件将每次接收到的16 bit 数据存放在data 变量中。在每次接收到新数据时,软件对data 中的数据进行带通滤波。使用MATLAB 2014 中的butter 函数求得巴特沃斯带通滤波器系统函数分子、分母多项式的系数向量B和A,该函数的使用格式为

其中,N为滤波器阶数,本文设定N=4;Wn为滤波器3 dB 截止频率的归一化值。软件中设置的通带频率为20~1 000 Hz,对应地设置Wn=[0.01,0.5]。求得的B和A分别为

向量B和A需要预先写入Filter 类成员变量中。在Filter 类中定义filter 函数如下:

其中,signal 为待滤波信号,参数b和a分别表示滤波器系统函数的分子、分母多项式系数。当调用filter函数时,将B和A的值分别赋给b和a。软件中filter 函数利用滤波器的系统函数与输入信号卷积实现带通滤波。

滤波之后的数据存储在filtered_data 数组中。带通滤波前和滤波后的心音波形及其时频图如图4 所示。由图4 可以看出,带通滤波后心音质量得到了明显改善,通带外的低频和高频杂音都被衰减。为了让用户实时了解当前心音的采集质量,需要将心音波形画在Android 上位机的显示屏上。

2.3 数据显示

为了实时显示当前采集的心音波形,软件自定义View1 控件,在控件中设置坐标轴的宽度和高度分别为680 和340 个像素。由于16 bit 有符号数的数据范围为-32 768~32 767,远远超过控件的像素值,需要将采集到的数据除以一个常数C以更好地显示在此控件中。在本软件中,使用一个SeekBar 控件控制常数C的值。将SeekBar 控件的progress 变量设置为12 挡,数值为0~11 范围内的整数。SeekBar中progress 的数值与C的对应关系详见表1。

同时,软件中还定义了一个Switch 控件,用于控制View1 控件显示滤波前或滤波后的心音波形。当滤波开关关闭时,每隔0.1 s 将当前data 数组中的数据显示在View1 上。当滤波开关打开时,则显示filtered_data 数组中的数据。波形显示的主要代码如下:

图4 心音信号带通滤波前后的波形及其时频图

表1 SeekBar 中progress 数值与常数C 的对应关系

其中,data.size()用于判断data 数组中是否有数据,如果有数据则显示。考虑到依据心音进行诊断的准确程度与采集到心音质量的关系很大,软件界面需要实时显示基础心音包络,以便于用户及时掌握当前采集位置的心音强度,从而进行位置调整。而S1 和S2 的频率范围通常不超过100 Hz[18],故这里采用2.2节描述的方式进行带通滤波,但此时将滤波器的通带调整为30~100 Hz,从而计算出的巴特沃斯滤波器的系数B和A分别为

心音经过30~100 Hz 的带通滤波后,其包含的大部分杂音能量已经被滤除了。此后,软件需要计算上述经过带通滤波的心音的香农能量包络。香农能量计算公式为[19]

其中,x为时域心音信号。则平均香农能量可以表示为

其中,xnorm为归一化后的心音信号;MS为信号长度,本软件中设置MS=40。对ES求均值和方差即可得到香农能量包络,计算公式如下[20]:

其中,M(ES(t))为香农能量的均值,S(ES(t))为香农能量的方差。软件中使用Pt 数组来存储香农能量包络,另一个自定义控件View2 用于显示香农能量包络。设定View2 控件每隔0.1 s 读取一次Pt 数组中的数据并显示,显示原理与心音波形图一致。

2.4 数据保存

软件采集到的心音信号需要被完好无损地保存下来,以便于回放或进一步分析。软件以16 bit 有符号数保存带通滤波前和带通滤波后的数据,保存的数据格式有.pcm、.wav 和.txt 3 种。其中,.pcm 格式存储最原始的波形数据;.wav 格式为微软发布的一种声音文件格式,用户可以随时在平板设备上播放此格式的音频文件,但保存时需要添加的文件头应在WabHeader 类中预先写好;纯文本.txt 格式是为了便于用户直接查看保存的心音数据。常用的心音听诊区有5 个,包括主动脉瓣听诊区、肺动脉瓣听诊区、主动脉瓣第二听诊区、三尖瓣听诊区和二尖瓣听诊区[21],这些听诊区采集到的心音差异很大。遗憾的是,现有的心音听诊软件采集数据时往往不分听诊区,这导致了难以对特定瓣膜的疾病进行准确判断。本软件定义了RadioButton 控件以供用户在这5 个听诊区中选择,用户也可以在文本框中自行输入听诊位置,听诊区的名字会加入到保存音频的文件名中。以.pcm 格式文件保存为例,实现步骤如下:

(1)定义File 对象file_name,具体如下:

(2)获取系统时间:

该系统时间被加入到保存心音文件的文件名中,以避免相同名字的录音文件互相覆盖。

(3)在刚才创建的文件夹中新建.pcm 格式文件:

(4)文件创建完成后,定义流fos:

(5)每次接收到新的数据后,使用fos.write(tmp,0,len)将数据写入到文件中。当数据传输完成后,使用fos.close()关闭流。如此便完成了文件中数据的写入操作。

3 软件实现

3.1 蓝牙连接

软件界面主要包括蓝牙连接、心音采集和文件查看3 个界面。打开软件首先进入蓝牙连接界面,如图5 所示,选择nbbsw 将平板计算机与听诊器通过蓝牙连接。连接完成后,软件会自动跳到心音采集界面,如图6 所示,此时可以输入患者姓名并选择听诊区。

图5 蓝牙连接界面

图6 心音采集界面

3.2 数据处理与显示

患者信息输入完成后,点击“开始录音”按钮即可开始心音采集。此时姓名文本框和听诊区选择框变为不可编辑状态,以防止被误修改。采集时,界面左下方显示的是心音波形,右下方显示的是心音的香农能量包络。软件设置滤波开关android:checked=“true”时,滤波默认开启。如果关闭滤波,其心音波形如图7(a)所示。此时可以看出心音基线不稳定,即有低频干扰。在同一个听诊位置连续采集心音,同时左右拖动“放大”滑块(该滑块的位置与2.3 节中SeekBar:progress的数值一一对应)。当SeekBar 中progress 取值为3时,其心音如图7(b)所示。对比缩小后[SeekBar 中progress 取值为0,如图7(c)所示]和放大后[SeekBar中progress 取值为5,如图7(d)所示]的心音波形,容易看出,拖动“放大”滑块可以有效调节心音信号的幅度,便于用户查看心音的概貌或细节。

图7 心音波形

3.3 数据保存及查看

当采集完成后,点击“停止录音”按钮可立即停止心音的采集。此后,点击“查看文件”按钮跳转到文件查看界面,可以查看保存的心音文件,如图8(a)所示。每一次采集都会产生2 个文件夹,分别保存滤波前[如图8(a)中062600021]和滤波后[如图8(a)中062600021filtered]的心音。“病人1”文件夹保存了每一次采集的3 种格式(.pcm、.txt 和.wav)的数据,其文件名包括了患者姓名、听诊区和采集时间的信息,如图8(b)所示。

图8 保存的心音文件

基于Android 移动平台的心音采集软件界面直观、页面跳转少、使用过程流畅、可以实时滤波和保存数据、有利于数据的后续处理,具有较高的实用价值和进一步开发潜力。

4 结语

本文设计了一个基于Android 移动平台的心音采集软件,可以手动输入患者姓名、选择听诊区,便于进行多人多听诊区的心音采集。同时,本软件还具有心音波形实时显示和放大功能。此外,软件实时计算了香农能量包络并显示在界面上,有利于用户寻找心音信号较强的部位,提高心音采集质量。这弥补了目前我国研究人员设计的电子听诊器软件功能较为单一的缺点。然而,本软件仍然存在一定的不足之处,如没有自动诊断功能、降噪算法较为单一等。未来将进一步丰富软件功能,如增加小波降噪、基于深度学习的自动诊断功能等。

猜你喜欢
香农心音通滤波
大卫,不可以
声呐发射机负载阻抗变化仿真分析
基于双阈值的心音快速分段算法及其应用研究
双声道心音能量熵比的提取与识别研究
二阶有源低通滤波电路的计算机辅助设计
电子制作(2017年1期)2017-05-17 03:54:07
校园恩仇录:小混混和易拉罐女王的故事
基于香农熵的心音信号检测方法研究
艾米丽的呼噜
基于复带通滤波的智能电表量测算法及其DSP实现
基于频域分析和低通滤波的光伏并网逆变器谐振抑制研究