吴金灿 李 扬 程凤娟
一个手机鼾声录音睡眠分析系统的设计与实现
吴金灿1李 扬2程凤娟1
(1.河南工业大学信息科学与工程学院,河南 郑州 450001;2.郑州铁路局郑州职工培训基地,河南 郑州 450001)
针对越来越多有潜在睡眠呼吸问题患者的出现,本文设计一个基于Android手机的鼾声录音睡眠分析系统,通过监测声音波形、频率等信息,检测用户打鼾和阻塞性呼吸暂停情况,并形成记录供用户查看,能够为有潜在睡眠呼吸问题的患者提供便捷的帮助。系统利用Android智能手机开放平台,具有较好的隐私保护,同时具有很好的应用前景,将会形成比较好的社会效应。
鼾声录音分析;声音特征;阻塞性呼吸暂停
打鼾也被称为打呼噜,往往与睡眠联系起来,其发声的生理原因是咽部通道变窄后,当气流通过时就会发出声音。打鼾除了影响同屋的他人外,还对自身健康有很大的影响。过去很少有人知道打鼾对本人的影响,但学者研究打鼾者的睡眠发现,长期打鼾的人往往伴随着睡眠呼吸暂停、低通气,在睡眠的过程中血液氧气含量减小,时间久了便影响人的身体健康[1]。
现在我国主流呼吸暂停检查还是比较落后的多导睡眠图监测,虽然其有很专业的研究设备,检测脑电、口鼻气流、鼾声、心电等很多参数,但还是要依赖专业医疗技术人员整夜的检查,完全手动分析,为进一步治疗做准备[2]。虽然现在无电极检测方式改进极大,但还是有很高的使用成本。一方面对打鼾的认知比较主观,其特征也受多种原因的影响;另一方面其多变性加大了研究的难度[3]。现在对鼾声的研究已经有很多,如音频信号的分类、鼾声信号的检查、频谱中能量的分布、计算共振峰频率以及鼾声的基频等[4-6]。同时,最近20年语音信号的处理识别有显著的进步,鼾声也可以看作一种特殊的语音信号进行相关研究,相关理论技术也有很大的参考价值,如使用手机对鼾声的检测有很大的可行性。
本APP程序是一个对睡眠录音进而对鼾声检测、睡眠分析的系统,基于Android操作系统提供的AudioRe⁃cord类,获取声音数据,借助鼾声录音对使用者的睡眠情况给出分析反馈。对于鼾声信息,主要对鼾声发生的时间间隔信息进行分析,设计分析方法,从而得出睡眠的情况,给出分析结果。通过确定鼾声模型,过滤掉可能出现的杂音,统计相关信息;查找分析资料,解析信息代表的实际含义,结合相关资料给出评价。应用程序流程设计方面,主要包括提供鼾声检测分析,存储处理后的数据和时间信息,存档到本地文件系统。相关录音记录保存到SQLite上,便于以后的显示历史、查看调取。
本系统对鼾声的分析检测采用FFT算法,一种由离散傅氏变换(DFT)改进而来的快速算法,可以获取声音频率中所包含的有用信息[7]。FFT将时域上信号变换到频域,方便在频谱等方面对数据进行分析。实践中为了方便运算,通常N取2的整数次方。声波采样频率Fs=44 100Hz,从Android麦克风传感器中读取的PCM数字信号short[](每个取样位为16位),调整中转数据保证输入数据长度为N=214=16 384,经过FFT之后,就可以得到N个点的FFT结果。每个点对应一个频率点。第一个点就是直流分量,其模值就是直流分量的N倍(即0Hz),其他一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍,最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点)则表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。例如,某点n所表示的频率ƒ为ƒn=(n-1)×Fs/N(ƒn所能分辨到频率为Fs/N,即精度),本例分辨率为44 100/16 384(Hz),假设FFT之后某点n用复数表示为a+bi,那么这个复数的模就是An=a2+b2;该点的模值除以N/2就是对应该频率下信号的幅度(对于直流信号是除以N),相位是对应该频率下的信号相位。相位的计算用数学函数Pn=atan2(b,a)计算。atan2(b,a)是求坐标为(a,b)点的角度值,范围从-π到π。可以计算出n点(n≠1,且n≤N/2)对应的实际语言信号的还原表达式为:An/(N/2)×cos(2×π×Fn×t+Pn)。这里幅度可以表示该频率下声音的振幅:Rn=An/(N/2),其中n=1点的信号,是直流分量,幅度为A1/N。FFT变换结果具有对称性,所以系统只使用变换后频域信息的前半部分。
2.1 系统配置及架构
系统开发使用最新的Android Studio,其提供快捷的开发环境和单词级的代码语义支持编辑、调试,能够灵活地构建系统和即时构建/部署系统。运行系统的Android智能手机应最低支持Android 4.4.2,且有麦克风传感器。
系统主要包含2个核心功能:录音分析和解析记录数据。其中录音处理流程图如图1所示。
系统通过睡眠分析记录表,如表1所示,用来保存用户每次录音的记录,包括数据文件名、时间等信息。
图1 录音处理流程图
表1 睡眠分析记录表
2.2 主要逻辑的代码
接收整合输出数据逻辑:这里为了匹配各个不同设备所读取处理数据长度不同,增加了一个数据缓存区,将数据放入,数据取出分离,没有直接将原始数据加入运算逻辑,主要原因是采集数据需要的缓冲区的大小,如果不知道最小需要的大小可以在getMinBufferSize()查看。这个数值在不同设备上大小不一致,如果编码自行设置一个读取大小的值时,又有一些设备不支持特定大小的读取,所以有了这个整合模块,主要代码如下。
System.arraycopy(audiodata,0,recordset,front,size);front+=size;
while(front-tailgt;=FFT_N){
short newCp[]=new short[FFT_N];
System.arraycopy(recordset,tail,newCp,0,FFT_N);
tail+=FFT_N;
onWork(newCp);
if(BUF_SIZE-taillt;FFT_N*2){
int remain=front-tail;System.arraycopy(recordset,tail,recordset,0,remain);
tail=0;front=remain;
}
}
声音检测是本系统的功能基础,支撑的鼾声检测主要就是基于这个信息记录的,这里首先对原始数据进行遍历计算出基本信息,主要计算是求均值,其中负数值累加为了不与正数中和抵消,也转成正数求绝对值的算术均值,在此期间也计算了声音段的声音大小信息和最大值信息。然后利用均值信息,对源数据进行再处理,将小于均值的采样点全部赋值为0。最后,基于这种数据检测样本数据的相关信息。这里并没有查找波峰信息,没有查看保留下来的波峰信息和声音的时间信息,而是反其道而行,统计这个数据中连续0的个数,可以确定如果声音是无规律的持续混乱数据,统计出来的连续0个数一定会很比较小,当声音中包含有声段时,由于这种情况下,声音段的均值会被拔高,这里就会将所有的环境噪声淹没掉,并且由于极值集中这种情况下,连续0个数相对来说就会很大,从侧面反映出数据中包涵有声信息。确定检测到有声段后,会对这段声音进行傅里叶变换分析,查看频率等相关信息用于程序进行辅助判断鼾声信息。
public static boolean work(short[]shortArr){
maxVolAndavgVol(shortArr,shortArr.length);
emergeArr(shortArr,avgAudio);
getQuietLevel=testAudio(shortArr);
return getQuietLevelgt;QUIET_LEVEL;
}
2.3 应用程序实现
打开录音睡眠分析应用后,点击录音,将手机放置在身旁,用户就可以休息。这里开启了3个线程,类似流水线作业,一个线程读出原始信息,一个线程对读入信息格式化,一个线程对信息进行运算,判断鼾声事件是否发生,并记录结果[8]。
当用户想要结束录音分析时,点击结束录音,录音记录即停止。点击历史记录,最上面的第一条就是最新的分析记录。用户可以点击查看详情。这里使用了一个标识变量,将其设置为停止,录音读取工作线程每次取值前都会检查该值,自行感知是否退出。
如图2所示是程序的录音历史,用户可以点击某条记录,查看记录的详细情况。在这个界面对某个记录左滑动,即可出现删除菜单。当数据比较多时,还可以上下滑动查找选择需要的记录。
图2 用户录音记录信息界面
表格以小时为单位生成,每小时有2份表格,包括鼾声检测报表和呼吸暂停检测报表。点击某个记录后,即可查看每小时的打鼾记录,以及根据这些记录推测出可能有的呼吸暂停事件记录,这个都按照每10min一个记录的报表。如图3所示,1∶40-1∶50检测到了3次呼吸暂停,整夜出现3次呼吸暂停事件。
图3 睡眠记录查看页,检测到呼吸暂停报
系统实现后,通过选用不同的Android智能手机,在不同的环境声音状况下,分别进行了功能测试、兼容性测试、稳定性测试和耗电测试,系统基本满足应用需求,实现了预定目标。但也发现了一些局限性,比如:系统UI设计还有很大的完善空间;取样数据也可以自己降频后再行处理;对于鼾声的识别,准确性还需要进一步增强;市场上一些类似产品还具有鼾声回放功能,使得软件数据可信度更高等。
[1]Adam Gerber,Clifton Craig.Android Studio实战[M].北京:清华大学出版社,2016.
[2]张军朝.Android技术及应用[M].北京:电子工业出版社,2016.
[3]朱元波.Android传感器开发与智能设备案例实战[M].北京:人民邮电出版社,2016.
[4]彭好,许辉杰,黄魏宁,等.阻塞性睡眠呼吸暂停低通气综合征和单纯鼾症者鼾声的基频及共振峰分析[J].听力学及言语疾病杂志,2013(1):27-31.
[5]许辉杰,余力生,黄魏宁,等.OSAHS患者与单纯打鼾者鼾声声学特性初步研究[J].听力学及言语疾病杂志,2009(3):235-238.
[6]张诗玙.基于安卓手机的睡眠呼吸暂停综合症筛查系统[D].大连:大连理工大学,2016.
[7]钱昆.鼾声相关信号自动检测与分类研究[D].南京:南京理工大学,2014.
[8]Ryo Nonaka.Automatic snore sound extraction from sleep sound recordings via auditory image modeling[J].Biomed⁃ical Signal Processingamp;Control,2016(27):7-14.
Design and Implementation of a Sleep Snoring Recording Analysis Application System
Wu Jincan1Li Yang2Cheng Fengjuan1
(1.College of Information Science and Technology,Henan University of Technology,Zhengzhou Henan 450000;2.Zhengzhou Staff Training Base,Zhengzhou Railway Bureau,Zhengzhou Henan 450000)
Aiming at more and more sleep apnea patients,this paper designed a sleep snoring recording analysis application system based on Android mobile phone,by monitoring the sound waveform and frequen⁃cy information,detect users snoring and obstructive apnea,and make record for users to view,to provide help for potential sleep apnea patients.This system uses Android smart phone open platform,has better pri⁃vacy protection,and has a good application prospect,will form a better social effect.
snoring recording analysis;sound characteristics;obstructive apnea
TP274
A
1003-5168(2017)10-0011-03
2017-09-15
河南省教育厅自然科学项目科学技术重点研究项目(15B520004)。
吴金灿(1994-),男,本科,研究方向:计算机运用;李扬(1984-),女,本科,助理工程师,研究方向:计算机运用。
程凤娟(1976-),女,硕士,副教授,研究方向:软件工程网络安全。