本发明属于心音处理技术领域和信号处理领域,具体设计一种基于遗传算法优化阈值的mallat算法的小波变换对心音信号进行优化处理。
背景技术:
一个正常的心动周期包含四个心音的组成,往往用s1、s2、s3、s4来划分,通常情况下s3、s4强度很低,一般只考虑s1、s2信号。其中s1是在心室收缩时期,s2是在心室舒张时期。心音频率一般处于1-1000hz范围内,其中s1、s2信号主要集中在50-200hz,大部分噪音集中在40-600hz甚至更高频率。杂音包括呼吸、心尖搏动、环境噪音,以及电子仪器的离散噪声、电阻热噪与音频格式转换时引入的噪声。仪器采集的心音信号不可避免的掺杂着机械噪声、肌电噪声等噪声,因此如何快速处理信号获取过程中由于各种原因而掺杂引入的噪声成为一个重要课题。传统的去噪方法,如傅立叶信号分析法等是对信号全局的分析,而不能很好的对信号的微细部分进行处理。
小波变换(wavelettransform,wt)将信号细分为多个小波函数,再通过局部时频变化提取有效信息。马拉(mallat)算法是一种处理信号的快速分解和重构算法。
遗传算法(geneticalgorithm,ga),是一种全局搜索的优化方法。本发明通过遗传算法优化马拉算法分解过程中使用的阈值,使得在保留较好细节条件下提高对心音信号的去噪能力。
经验模态分解(empiricalmodedecomposition,emd),是一种实现信号平滑的自适应时频处理方法。随时间序列发展,方差、均值与当下是相同的,即可以在时间上预知未来,这样就叫做平稳性,若这些值不具有“惯性”延续,就是非平稳的。
小波变换可以看成函数与小波基的内积,即把函数φ(t)作为母小波,位移b后,再在不同尺度a下与待分析信号s(t)做内积,如公式1所示:
其中a为小波变换的尺度伸缩系数,若a值过大,则会导致采样过密,从而导致产生新的噪声,b反应位移,wtx(a,b)为连续小波变换。
技术实现要素:
本发明提出一种基于遗传算法优化阈值的mallat算法对心音信号进行快速去噪。
本发明有以下步骤:
1)获取待处理的心音信号;
2)确定小波基与分解层数;
3)将步骤1所得的心音信号进行分解;
4)通过ga对步骤3中的小波系数的阈值进行优化;
5)重建心音信号,用emd算法得到包络图;
6)计算信噪比。
本方法的优点在于:采用自设的阈值函数,通过ga对其进行优化,再通过马拉算法对信号进行分解重构,去噪效果好,处理速度快,能够较好地区分有用信号和噪声的同时不引入新的噪声,最后有效提高了心音信号滤波的信噪比。
附图说明
1)图1.整体流程图;
2)图2.遗传算法流程图;
3)图3.原信号时域图;
4)图4.原信号频谱图;
5)图5.原信号分解图;
6)图6.原信号分解频谱图;
7)图7.重构信号图;
8)图8.重构信号频谱图;
9)图9.原信号与重构信号比对图;
10)图10.原信号与重构信号频谱比对图;
11)图11.包络比对图;
12)图12.信噪比图。
具体实施方式
下面,将结合附图对该方法进行解释。具体流程如附图1所示。
1)获取心音原始信号;
具体为:获取一段心音信号,设原始信号的模型为
其中,s(x)为含噪信号,f(x)为真实信号,n(x)为噪声。我们主要滤去中高频信号中的噪声。信号实际采样频率f为2000hz。
2)确定小波基与分解层数;
具体为:选择db10小波函数作为小波基,特点是双正交性与支撑性,并不严格对称,保证了良好的时频局部特性,平滑性强,重建时失真率低。分解后高频部分认为是噪声,低频部分是有效的信号。因此,可对心音信号进行一定层数的分解,然后在每层上使用不同的阈值进行处理,达到去噪的目的。分解层数越多,其高频部分被去除得越多,但过多的层数会导致分解过度,即部分有用信号被剔除出去。根据所需的s1、s2信号所在频率,选用分解层数为6层。
3)将步骤1所得的心音信号进行分解;
具体为:若原始信号为,其分解算法为:
其中:t为离散时间序列号,t=1,2,…,n;j为层数,j=1,2,…,j;j=log2n,h是低通滤波器,g是带通滤波器。aj,k和dj,k分别为信号在第j层的低频部分和高频部分的小波系数。
由多分辨率理论可得:
其中,pjf(t)是函数f(t)在分辨率j下的平滑逼近,xn(j)是线性组合的权重,фjn(t)是离散正交小波基。
对信号进行一定层数分解。这里以第一层的分解为例。令公式5中的j为0,可求得近似系数xk(1)为:
1层细节系数dk(1)为:
使用递归算法,求得剩余层的近似系数及细节系数。
4)采用ga对步骤3中的小波系数的阈值进行优化;
具体为:一般来说,阈值是由原信号的信噪比选定的。阈值过大会使得信号边缘信息也被过滤掉,过小的阈值则无法有效过滤噪音。本发明采用遗传算法优化阈值。待阈值δj如公式8所示:
公式中n为信号的长度。ω为0到1之间的一个数值。根据分解层数的不同采用了不同的阈值,从而进一步在保留信号有效成分的情况下提高信号的质量,使得信号相对平滑。使用计算出的阈值δj处理第j层的细节部分dk(j)。处理公式如下:
其中
ga相应参数设置如下:
1.参数ω变化范围为0-1。采用二进制编码,随机产生大小为20的种群。种群数目过大会增加计算量,但是可以在空间中进行更多点的搜索,故折中考虑选用大小为20的种群;
2.适应度函数选择见下公式:
rmse表示均方根误差。含常数1是为了防止在rmse特别小的情况下函数发散。输入参数ω,输出参数为y,rmse最低,即y最大时的ω即为最优解。其中rmse函数见公式11:
3.考虑到种群的未定性和算法的收敛性将代沟设置为0.9,即每代父代中有2个个体会被子代个体淘汰,此时为种群b。选择函数选用轮盘赌,交叉方式为单点交叉。交叉率则为默认的0.7,交叉后种群为c,异变率为0.01,异变后种群为d。这样做可以最大程度保留上一代最优结果的同时,通过变异、交叉的方式产生一定的不确定性,使得结果不陷入局部最优,存在找到全局最优的可能性;
4.种群更新机制。计算种群d个体适应度,根据种群跟新机制进行比较生成种群e,然后转步骤2,重复步骤直到满足终止条件;
5.终止条件为达到最大迭代次数或超过20代后适应度增加的值小于1%,则认为找到了最优的结果,如果满足上述条件则停止运算,否则重复步骤4。
5)重建心音信号,用emd算法得到包络图;
具体为:将第j层低频系数和第1-j层的高频系数相加,重构为新信号。重构算法见公式12。
公式中:xn(j)是第j层的近似系数,dn(j)是第j层的细节系数,xn(j-1)是通过xn(j)和dn(j)重建的上层近似系数,g0和g1均为重建系数。
下面进行emd分解,提取包络图:
对于一个给定的信号x(t),进行有效的emd分解步骤如下:1.找出x(t)的所有极值点;2.通过插值法,在极小值点处生成下包络emint(t),极大值处生成上包络emax(t);3.计算均值m(t)=(emint(t)+emax(t))/2;4.抽离细节d(t)=x(t)-m(t);5.对残余的m(t)重复上诉步骤。
通过上述步骤求得原信号与重构信号的包络图,再通过图观察去噪后的显示效果。
6)计算信噪比;
信噪比公式见公式13:
psignal表示信号能量,pnoise表示噪声能量,snr为信噪比。snr越高,信号中的噪声比率越低。
以下将通过实例进一步解释。
整体流程图见图1。取一组心音音频,时域图见附图3,频谱图见附图4。用db10小波基进行6层小波分解,再通过ga优化各层的阈值,流程图见图2。具体为:步骤1,使用二进制编码,随机生成大小为20的种群。种群数目过大会增加计算量,但是可以在空间中进行更多点的搜索,故折中考虑选用大小为20的种群。步骤2,适应度函数选择