时间:2024-07-28
尹智龙
(九江职业大学机电工程学院 江西九江 332000)
高斯混合模型(gaussian mixture model,GMM)就是用高斯概率密度函数将对象分解,形成正太分布曲线的模型。建模方式多种,但GMM建模是最成功的建模方法之一,其背景干净清晰,用于建模心音信号系统,具有较高的识别率。
文章选取50例正常心音,对其建立一个GMM模型库,将需要识别的心音信号与建立的模型库进行匹配,识别被测心音是否属于正常心音。
近年来,对于生物识别系统,越来越多用到了高斯建模。对于心音信号的识别系统研究,建立GMM模型库,最重要的一个环节就是正确提取MFCC特征参数。将样本心音信号的特征参数进行一系列的计算,最后建立GMM模型库,同时将需要进行识别的心音信号的特征参数也提取出来,对GMM模型库进行训练和匹配。判断是否匹配的标准时计算其后验概率p,当p>0.95 时[1],表示与此模型库中样本信号接近,诊断被测心音正常。识别思路如图1所示。
图1 心音识别思路图
建立GMM模型的主要思路就是将提取的心音信号MFCC频率倒谱系数用概率函数表达出来,把所有的概率函数进行加权,得到这例心音信号的GMM概率密度函数[2],表达式如下所示:
bi(x)=
(1)
(2)
λ={ωi,μi,Σi}i=1,2…,M
(3)
相同的方法,确定50例正常心音信号的参数λ,从而建立起一个50例正常心音信号的模型库。
(4)
心音模型的初始参数有M和λ,确定参数的初始值对整个心音信号的训练和识别起着至关重要的作用。阶数M选取过大,概率函数的参数多,增加了计算量和识别时间;阶数M取值过小,模型没能完全表现出信号的特征,识别存在误差,整个识别将变得毫无意义。M的取值通过各种文献资料查询和实验结果论证,在此取值48。
对λ参数的初始化,采用聚类选择法。利用最小距离法则来对心音信号参数进行初始化,具体步骤如下:
(2)对待识别的信号分类:
(5)
满足式(5),表示xk与第i类特征最相似。
(3)找到i后,对信号重新分类,得到新的聚类中心,计算公式如式(6)所示:
(6)
T=50,样本个数
(4)条件判断:
(7)
当δ>0时,转到第(2)步,继续找最相关的样本,当δ→0时,满足收敛条件,则计算出初始参数λ。
(4)初始参数λ公式如式(8)到式(10)所示:
(8)
(9)
(10)
初始化代码如下:
def init_params(self):
self.mu =1/ni.random.rand(self.K,self.D)
self.cov =1/ni.array([np.eye(self.D)]* self.K)* 0.1
self.amiga = ni.array([1.0/self.K]* self.K)
被测心音信号的识别过程,可以概括成两个步骤:
(1)计算期望值,即E步。
假设被测心音信号属于GMM模型库中第i个模型,建立其概率公式[3]:
(11)
E步的代码如下:
def e_step(self,data):
gamma_log_prob = np.mat(np.zeros((self.N,self.K)))
for k in range(self.K):
gamma_log_prob[:,k]= log_weight_prob(data,self.alpha[k],self.mu[k],self.cov[k])
log_prob_norm = logsumexp(gamma_log_prob,axis=1)
log_gamma = gamma_log_prob-log_prob_norm[:,np.newaxis]
return log_prob_norm,np.exp(log_gamma)
(2)期望值最大化,即M步
定义一个似然函数Q,如式(12)所示:
(12)
Q反映的是被测心音信号的特征参数与GMM模型库的参数的对数关系。对Q求λi中的三个参数求偏导,并令偏导数为零,得到λi新的估算值:
(13)
(14)
(15)
Matlab仿真程序如下:
def m_step(self):
newmu = np.zeros([self.K,self.D])
newcov =[]
newamiga = np.zeros(self.K)
for k in range(self.K):
Nk = np.sum(self.gamma[:,k])
newmu[k,:]= np.dot(self.gamma[:,k].T,self.X)/Nk
cov_k = self.compute_cov(k,Nk)
newcov.append(cov_k)
newamiga[k]= Nk/self.N
newcov = np.array(newcov)
return newmu,newcov,newamiga
文章选取了80例正常心音信号(包括50例GMM模型库中的心音信号),20例异常心音信号,用来测试后概率准确率。测试结果统计如表1所示。
表1 识别结果统计
从表1中可知,采用文章方法,心音识别率达到90%以上。
阶数M的选取,没有公式参照,只能通过经验值不断的实验,得出最佳值。利用不同的M值,测试识别性能,得到表2。
表2 阶数M对识别结果的影响
表2可以看出,M从16~48阶时,识别率以近10%的幅度增长,识别时长没有增加太多,当48阶过后,识别率提高的很缓慢,如48~64阶,识别率只增长了0.7%,识别时间却多用了近一倍,所以当M>48时,系统用较多的时间而识别率没有得到多少提高,增大M增加了GMM高斯建模的计算难度,所以综合考虑,M取值48比较合理。
在测试一段心音信号时,测试的时间长短对系统的识别度时有影响的。识别时间太长,
计算时间长,产生很多没用的数据,加重系统识别的负担。识别时间太短,不能充分识别,造成与原信号不符的后果。该系统分别测试了几段不同时长的心音信号,不同时长经过GMM模型训练后的识别率如下表3所示:
表3 不同信号的时长对应的识别率
从表3中可以看出,10~30s,时长增加不到一倍,但识别率从74.2%增加到90%以上,30~60s,识别时间变为5倍,识别率只增长2.5%,综合考虑,取30s的识别时长比较合理。
通过GMM模型训练,对心音信号进行归属分类,经数据分析,识别率达到90%以上,验证率比较高,为心音信号的诊断提供了有效的方法。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!