一种心音端点检测方法
技术领域
本发明涉及心音检测领域,更具体地,涉及一种心音端点检测方法。
背景技术
现有端点检测方法对日常语音识别能有很好的识别效果,但心音因为其信号微弱,现有的端点检测方法很难完整的识别心音,错把心音当成噪声杂声,从而漏掉一部分的心音,得到错误的心音频率等信息。
发明内容
本发明为克服上述现有技术所述的至少一种缺陷,提供一种心音端点检测方法。
本发明旨在至少在一定程度上解决上述技术问题。
本发明的首要目的是提供一种能正确检测心音的端点检测方法。
为解决上述技术问题,本发明的技术方案如下:
一种心音端点检测方法,包括以下步骤:
S1:定义参数Status表示心音状态,其中,Status=0表示静音状态,Status=1表示可能处于心音状态,Status=2表示处于心音状态,Status=3表示心音结束状态,定义Status初试值为0,即心音处于静音状态;
S2:对心音信号分帧,逐帧判断心音状态,将心音分为静音状态/可能处于心音状态、心音状态和心音结束状态三个状态;
S3:双门限法与峰值法结合使用,确定端点,循环步骤S2,直到心音信号结束;
S4:去除噪音杂音的端点,还原心音信号的端点;
上述方案中,在第一心音为中强信号时使用双门限法检测信号起始点与结束点,在第二心音为弱信号时使用峰值法寻找峰值点从而判断信号起始点与结束点。
优选地,心音信号分帧的每一帧为20ms-30ms,每一帧有240个数据点,相邻的两帧信号间有重叠,不重叠的地方为滑窗。
优选地,步骤S3中对心音状态处于Status=0和Status=1两种状态的检测方法如下:
S3.1:该帧信号短时能量大于设定的短时能量阈值amp1时,若该帧信号起始数据点位置比前一帧结束数据点位置大,则进入步骤S3.1.1,若该帧信号起始数据点位置比前一帧结束数据点位置小,则执行步骤S3.1.2;
S3.1.1:确定该帧信号起始数据点为起始点,且心音状态为Status=2,静音长度为0,语音长度加1数据点,返回执行步骤S2;
S3.1.2:返回执行步骤S2
S3.2:该帧信号短时能量小于设定的短时能量阈值amp1时,若该帧信号短时能量大于设定的短时能量阈值amp2或该帧过零率大于设定的过零率阈值zcr2时,则执行步骤S3.2.1,若该帧信号短时能量小于设定的短时能量阈值amp2且该帧过零率小于设定的过零率阈值zcr2时,则执行步骤S3.2.2;
S3.2.1:若该帧信号为弱信号则执行步骤S3.2.1.1,若该帧信号为中强信号或强信号时,则执行步骤S3.2.1.2;
S3.2.1.1:该帧信号起始数据点位置大于当前帧峰值数据点位置减去5,则确定该帧信号起始数据点为起始点,心音状态为Status=2,静音长度为0,语音长度加1数据点,返回执行步骤S2;
该帧信号起始数据点位置小于当前帧峰值数据点位置减去5,返回执行步骤S2;
S3.2.1.2:该帧信号起始数据点位置大于当前帧峰值数据点位置减去5,则确定该帧信号起始数据点为起始点,心音状态为Status=2,静音长度为0,语音长度加1数据点,返回执行步骤S2;
该帧信号起始数据点位置小于当前帧峰值数据点位置减去5,心音状态为Status=1,语音长度加1数据点,返回执行步骤S2;
对心音状态处于Status=2状态的检测方法如下:
S3.3:当该帧信号短时能量大于设定的短时能量阈值amp2或过零率大于设定的过零率zcr2,则语音长度加1数据点,返回执行步骤S2;
当该帧信号短时能量小于设定的短时能量阈值amp2且过零率小于设定的过零率zcr2,则静音信号长度加1数据点,执行步骤S3.4;
S3.4:静音信号长度小于设定的静音信号长度阈值,则静音信号长度加1数据点,返回执行步骤S2;
若静音信号长度大于设定的静音信号长度阈值,则执行步骤S3.5;
S3.5:若语音长度小于设定的最小语音长度阈值,则心音状态为Status=0,静音信号长度为0,语音长度为0,返回执行步骤S2;
若语音长度大于设定的最小语音长度阈值,则心音状态为Status=3,且给数据点为端点,返回执行步骤S2;
对心音状态处于Status=3状态的检测方法如下:
S3.6:计算语音长度,确定语音起始点X1、语音结束点X2,若峰值点减去X2大于等于0且小于等于2,则使X2加2,执行S3.7;
若峰值点减去X2小于0或大于2,执行S3.7;
S3.7:若未到最后一个峰值点且峰值点在X1和X2之间,则移到下一个峰值点,执行步骤S3.8;
若到了最后一个峰值点或峰值点不在X1和X2之间,则执行步骤S3.8;
S3.8:心音状态为Status=0,保存起始点与结束点参数,X1为0,X2为0,循环未结束,则返回执行步骤S2;
若循环结束,则进入步骤S4;
上述对信号端点的检测方法中,虽然讲第一心音与第二心音的起始点与结束点都找出来了,但可能还是有少量比较明显的噪声和心杂音被识别标记,若想得到真实的心音起始点与结束点,还需要对得到的端点进行排除。
优选地,步骤S4中去除噪音杂音的端点的方法如下:
S4.1:逐个能量端点判断;
S4.2:若判断结束,则保存每个峰值对应的起始点和结束点参数;
若未结束,则执行步骤S4.3;
S4.3:若后端点减去前端点大于等于2479,则设定辅助计算参数h的值加1,计算峰值对应的起始点和结束点,设定辅助计算参数p的值为0,设定辅助计算参数Distance的值为0,返回执行步骤S4.1;
若后端点减去前端点小于2479,则辅助计算参数p的值加1,Distance的值加上后端点减前端点的差乘以设置的原始步长参数所得的值,若Distance大于2479,则辅助计算参数h的值加1,计算峰值对应的起始点和结束点,辅助计算参数p的值为0,辅助计算参数Distance的值为0;
若Distance小于2479,执行步骤S4.4;
S4.4:若p等于1且后区间中点能量值大于前区间中点能量,则判别区分端点为起始点还是结束点,返回执行步骤S4.1;
若p不等于1且后区间中点能量值小于前区间中点能量,返回执行步骤S4.1;
上述方案中,根据心音是周期信号,当前周期第一心音与当前周期第二心音、当前第二心音与下一周期第一心音之间的间距是一个比较稳定的范围,就可以排除噪声杂音的端点,保留下来的端点就是真正的心音端点。
与现有技术相比,本发明技术方案的有益效果是:
通过双门限法检测第一心音的端点,峰值法检测第二心音的端点,双门限法与峰值法互相弥补,使原先难以检测端点的心音信号被准确检测,并利用心音信号的周期性排除噪声杂声的干扰,进一步保证端点检测的准确度。
附图说明
图1为本发明提供的心音端点检测方法流程图。
图2为实施例提供的端点检测波形图。
具体实施方式
附图仅用于示例性说明,不能理解为对本专利的限制;
为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;
对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
下面结合附图和实施例对本发明的技术方案做进一步的说明。
实施例1
一种心音端点检测方法,如图1,包括以下步骤:
S1:定义参数Status表示心音状态,其中,Status=0表示静音状态,Status=1表示可能处于心音状态,Status=2表示处于心音状态,Status=3表示心音结束状态,定义Status初试值为0,即心音处于静音状态;
S2:对心音信号分帧,逐帧判断心音状态,将心音分为静音状态/可能处于心音状态、心音状态和心音结束状态三个状态;
S3:双门限法与峰值法结合使用,确定端点,循环步骤S2,直到心音信号结束;
S4:去除噪音杂音的端点,还原心音信号的端点;
心音信号分帧的每一帧为20ms-30ms,每一帧有240个数据点,相邻的两帧信号间有重叠,不重叠的地方为滑窗。
步骤S3中对心音状态处于Status=0和Status=1两种状态的检测方法如下:
S3.1:该帧信号短时能量大于设定的短时能量阈值amp1时,若该帧信号起始数据点位置比前一帧结束数据点位置大,则进入步骤S3.1.1,若该帧信号起始数据点位置比前一帧结束数据点位置小,则执行步骤S3.1.2;
S3.1.1:确定该帧信号起始数据点为起始点,且心音状态为Status=2,静音长度为0,语音长度加1数据点,返回执行步骤S2;
S3.1.2:返回执行步骤S2
S3.2:该帧信号短时能量小于设定的短时能量阈值amp1时,若该帧信号短时能量大于设定的短时能量阈值amp2或该帧过零率大于设定的过零率阈值zcr2时,则执行步骤S3.2.1,若该帧信号短时能量小于设定的短时能量阈值amp2且该帧过零率小于设定的过零率阈值zcr2时,则执行步骤S3.2.2;
S3.2.1:若该帧信号为弱信号则执行步骤S3.2.1.1,若该帧信号为中强信号或强信号时,则执行步骤S3.2.1.2;
S3.2.1.1:该帧信号起始数据点位置大于当前帧峰值数据点位置减去5,则确定该帧信号起始数据点为起始点,心音状态为Status=2,静音长度为0,语音长度加1数据点,返回执行步骤S2;
该帧信号起始数据点位置小于当前帧峰值数据点位置减去5,返回执行步骤S2;
S3.2.1.2:该帧信号起始数据点位置大于当前帧峰值数据点位置减去5,则确定该帧信号起始数据点为起始点,心音状态为Status=2,静音长度为0,语音长度加1数据点,返回执行步骤S2;
该帧信号起始数据点位置小于当前帧峰值数据点位置减去5,心音状态为Status=1,语音长度加1数据点,返回执行步骤S2;
对心音状态处于Status=2状态的检测方法如下:
S3.3:当该帧信号短时能量大于设定的短时能量阈值amp2或过零率大于设定的过零率zcr2,则语音长度加1数据点,返回执行步骤S2;
当该帧信号短时能量小于设定的短时能量阈值amp2且过零率小于设定的过零率zcr2,则静音信号长度加1数据点,执行步骤S3.4;
S3.4:静音信号长度小于设定的静音信号长度阈值,则静音信号长度加1数据点,返回执行步骤S2;
若静音信号长度大于设定的静音信号长度阈值,则执行步骤S3.5;
S3.5:若语音长度小于设定的最小语音长度阈值,则心音状态为Status=0,静音信号长度为0,语音长度为0,返回执行步骤S2;
若语音长度大于设定的最小语音长度阈值,则心音状态为Status=3,且给数据点为端点,返回执行步骤S2;
对心音状态处于Status=3状态的检测方法如下:
S3.6:计算语音长度,确定语音起始点X1、语音结束点X2,若峰值点减去X2大于等于0且小于等于2,则使X2加2,执行S3.7;
若峰值点减去X2小于0或大于2,执行S3.7;
S3.7:若未到最后一个峰值点且峰值点在X1和X2之间,则移到下一个峰值点,执行步骤S3.8;
若到了最后一个峰值点或峰值点不在X1和X2之间,则执行步骤S3.8;
S3.8:心音状态为Status=0,保存起始点与结束点参数,X1为0,X2为0,循环未结束,则返回执行步骤S2;
若循环结束,则进入步骤S4;
步骤S4中去除噪音杂音的端点的方法如下:
S4.1:逐个能量端点判断;
S4.2:若判断结束,则保存每个峰值对应的起始点和结束点参数;
若未结束,则执行步骤S4.3;
S4.3:若后端点减去前端点大于等于2479,则设定辅助计算参数h的值加1,计算峰值对应的起始点和结束点,设定辅助计算参数p的值为0,设定辅助计算参数Distance的值为0,返回执行步骤S4.1;
若后端点减去前端点小于2479,则辅助计算参数p的值加1,Distance的值加上后端点减前端点的差乘以设置的原始步长参数所得的值,若Distance大于2479,则辅助计算参数h的值加1,计算峰值对应的起始点和结束点,辅助计算参数p的值为0,辅助计算参数Distance的值为0;
若Distance小于2479,执行步骤S4.4;
S4.4:若p等于1且后区间中点能量值大于前区间中点能量,则判别区分端点为起始点还是结束点,返回执行步骤S4.1;
若p不等于1且后区间中点能量值小于前区间中点能量,返回执行步骤S4.1。
在具体实施过程中,端点检测波形图如图2所示,可以看到9、10两个心音短时能量图中某些周期出现可能的噪音或者心杂音,如果把它作为端点的话,计算出来的心率等参数会稍微偏大或偏小,因此需要做一些处理,利用本实施例提供的心音端点检测方法,结果如下表:
相同或相似的标号对应相同或相似的部件;
附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制;
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。