陈 娟
(九江职业大学 机电工程学院,江西 九江 332000)
无论是实验研究时用传感器采集,还是医学临床时用专业仪器去采集,心音信号都很容易受到外界或自身噪音的影响。即便是正常心音采集,也受到环境的噪音、自身的呼吸产生的噪音、检测时摩擦的声音等方面的影响。而对于病理心音来讲,因其自带的病理性杂音,就更加会干扰心音信号的收集,不利于心音信号的识别和提取。
心音信号的去噪方法用得最多的就是小波变换,该方法可以在不失特征的前提下提取干净有用的第一心音S1和第二心音S2,而这两项信号是基本上能够反映大多数心脏运动状态的心音信号,以供后续的心音信号处理和分析[1]。
心音信号是一组非线性的信号,其特点是非平稳性。而经由小波变换方法处理之后的波形变化的特点是无规则、波形变化尖锐,如果再结合使用Matlab工具,那么就非常适合于心音信号的时频分析。
一般而言,目前最简捷且便于计算的去噪方法就是小波阈值去噪法。其原理如下所示:
设是小波基函数,经过伸缩和平移,得到如下公式:
(1)
然后进行连续小波变换:
(2)
其中:a为尺度因子;b为平移因子;Ψ*为Ψ(t)的复共轭。
设若a=2-j,b=k*2-j则:
(3)
然后再进行离散小波变换:
(4)
小波阈值法对心音信号去噪的总体架构思路如图1所示:①选取合适的小波基函数,确定分解的层数;②选择合适的阈值函数,确认恰当的阈值;③将能覆盖S1和S2频率的层数系数进行重构,获取干净的心音信号。
图1 阈值法去噪流程
假设心音信号模型为:x(t)=f(t)+σn(t)
其中f(t)为含噪心音函数,即采集到的心音信号;σ为噪音强度;n(t)为噪音。将此信号进行小波变换可得到如下:
(5)
N为采样的心音信号总数;x(n)为采样点的多次离散小波变换后得到的多个小波系数。
对分解的各层小波系数选取适当的阈值,然后对心音信号进行处理,在此过程中可得到一组最能体现原始心音信号的系数。
小波基函数的选取,是有效去噪的第一步。如果该函数没有选取好,则势必影响到整个去噪的效果。常用的小波基函数有:Symlets(symN)、Daubechies(dbN)、Coiflets(coifN)。其中Coiflets支撑长度不够短,而能量的聚集度较Symlets和Daubechies函数为差。而Symlets的对称性较Daubechies差。因此根据以往的研究数据表明,在上述3种小波基函数族里,使用比较多的有:sym8、db6、coif5,其对应的尺度函数波形如图2所示。
图2 三种小波基函数对应的尺度函数
就该研究而言,基于心音信号的特点,因此要求所选取的小波基信号必须能够正交,且具有对称性。经上述3个图的对比分析,就对称性和正交性能而言,db6都较其余两者为佳,故该研究选取的小波基函数是db6。
分解层数的多少对心音去噪的结果同样也至关重要。心音信号的频率随着层数越多越细化,因此也就越容易分离。但与此同时伴随的副作用是信号的延时现象也会变得更加严重,而且也会增大重构时的误差、错误过滤部分原始心音信号,从而造成部分有效信息的遗失。但如果分解层数过少,则会使得噪音不能完全滤除,无法达到理想的去噪效果和提取出干净的心音信号,因此分解也就变得毫无意义。
经过对比分析以往研究得出的各种实验数据,以及检阅相关的文献参考,发现当小波分解成5层时,效果最好,且效率最高。
将db6小波函数进行5层分解,部分程序如下:
a5=wrcoef(′a′,c1,l1,′db6′,5);
d5=wrcoef(′d′,c1,l1,′db6′,5);
d4=wrcoef(′d′,c1,l1,′db6′,4);
d3=wrcoef(′d′,c1,l1,′db6′,3);
d2=wrcoef(′d′,c1,l1,′db6′,2);
d1=wrcoef(′d′,c1,l1,′db6',1);
subplot(3,1,1);plot(a5);ylabel(′a5′);
subplot(3,1,2);plot(d5);ylabel(′d5′);
subplot(3,1,3);plot(d4);ylabel(′d4′);
subplot(3,1,4);plot(d3);ylabel(′d3′);
subplot(3,1,5);plot(d2);ylabel(′d2′);
subplot(3,1,6);plot(d1);ylabel(′d1′);
得到的图形,如图3所示。
图3 db6进行5层分解明细
图3中,先对心音信号进行降低采用频率的处理,故此处的频率为2 000Hz。将信号进行5层分解后得到5层高频频带d1~d5,一个低频频带a5。
上述各频带范围约为:d1(450Hz~900Hz),d2(225Hz~450Hz),d3(112.5Hz~225Hz),d4(55.8Hz~112.5Hz),d5(27.9Hz~55.8 Hz),a5(0~27.9Hz)。
第一心音s1和第二心音s2的频率范围为30Hz~100Hz,而d4和d5的频带范围综合为 27.9Hz~112.5Hz,因此能够覆盖s1和s2的频率范围,最大程度保留了心音的基本特性。
小波阈值法去噪中最重要的一步便是阈值函数和阈值的选取[2]。大多研究资料表明,使用最多的,且常用来作比较的两种阈值函数为硬阈值和软阈值。分析对比的结果为:硬阈值函数失真程度比较轻,但信号不连续现象比较明显;而软阈值函数去噪后的信号失真比较严重。以上两者皆有缺点,为了尽可能避免上述缺陷,笔者选取中阈值函数,使用两个阈值T1和T2:
T1=α·T,T2=β·T
(6)
中阈值函数的特点是:保留较大的小波系数(第4层和第5层的小波系数),置零较小的小波系数,缩小中间的小波系数。借此来解决硬阈值的不连续问题和软阈值的失真的问题[3]。其阈值函数公式如下所示:
(7)
由于分解出的第4层和第5层系数能够最大限度地反映心音的原始特征,故将这两个细节层进行阈值化处理,公式如下:
(8)
系数重构的部分程序如下所示:
c1=[a5,d5,d4,d3,d2,d1];
s1=waverec(c1,l,′db6′);
figure(4); plot(s1); title(′重构信号′);
err2=norm(s-s1); %重构后误差为1.09E-09
d5=zeros(1,length(d5));
d4=zeros(1,length(d6));
d3=zeros(1,length(d3));
d2=zeros(1,length(d2));
d1=zeros(1,length(d1));
c1=[a5,d5,d4,d3,d2,d1];
s1=waverec(c1,l,′db6′);
figure(4);
subplot(411),plot(s);title(‘原始信号’);
subplot(412),plot(s1),title(‘重构信号’);
生成的波形如图4所示。
图4 去噪前后信号对比
图4所反映的是正常心音信号去噪前后的对比图。由该图可以看出,通过上述的小波阈值法去噪后,心音信号的波形更干净、噪音更少,且没有失真,保留了原始信号的细节特点。因此,去噪效果是比较明显的。
下面选用两例异常心音信号进行实例的去噪处理[4]。
异常心音1:二尖瓣狭窄,即患有心房心颤疾病。
二尖瓣狭窄的特点:S2增强。根据上述方法对其原始信号去噪,如图5所示,右边对比左边的原图,去噪效果显著,波形干净不失真。
图5 二尖瓣狭窄异常心音去噪前后对比
异常心音2:主动脉瓣关闭不全。
原始心音信号有舒张期高调递减型、叹气样杂音,进行去噪处理后,保留了主动脉瓣区第二心音减弱或消失、心尖区第一心音减弱的特点,如图6所示,右图信号清晰更凸显波形特性。
图6 主动脉瓣关闭不全异常心音去噪前后对比
通过对比分析sym8、db6和coif5三种小波基函数的波形,确定选择小波基函数作为心音信号的分析工具。再将小波基函数db6进行层次细分,得出分解5层效果最佳的结论,然后结合软、硬阈值函数的优缺点,给出一种“中阈值函数”的解决方法,再通过重构第4层和第5层小波系数,分析心音信号。最后通过应用两则实例,即具体分析两例正常心音和病理心音信号的前后去噪效果图对比,结果证明了应用小波阈值法进行心音信号去噪的可行性、准确性和优越性。从而表明该算法在心音信号的处理中,具有良好应用价值和发展前景。