实例1%应用db5作为小波函数进行3层分解%利用无偏似然估计阈值%对100.datfromMIT-BIH-DB的单导联数据进行去噪处理clear;clcload('D:/matlab/matlab7.2/work/M.mat');E=M(:,2);E=E';n=size(E);s=E(1:2000);%小波分解[CL]=wavedec(E,3,'db5');%从c中提取尺度3下的近似小波系数cA3=appcoef(C,L,'db5',3);%从信号c中提取尺度1,2,3下的细节小波系数cD1=detcoef(C,L,1);cD2=detcoef(C,L,2);cD3=detcoef(C,L,3);%使用stein的无偏似然估计原理进行选择各层的阈值%cD1,cD2,cD3为各层小波系数,%'rigrsure’为无偏似然估计阈值类型thr1=thselect(cD1,'rigrsure');thr2=thselect(cD2,'rigrsure');thr3=thselect(cD3,'rigrsure');%各层的阈值TR=[thr1,thr2,thr3];%'s'为软阈值;'h'硬阈值。SORH='s';%--------去噪---------------%XC为去噪后信号%[CXC,LXC]为的小波分解结构%PERF0和PERF2是恢复和压缩的范数百分比。%'lvd'为允许设置各层的阈值,%'gbl'为固定阈值。%3为阈值的长度[XC,CXC,LXC,PERF0,PERF2]=wdencmp('lvd',E,...'db5',3,TR,SORH);%---------去噪效果衡量(SNR越大效果越好,%RMSE越小越好)%选取信号的长度。N=n(2);x=E;y=XC;F=0;M=0;forii=1:Nm(ii)=(x(ii)-y(ii))^2;t(ii)=y(ii)^2;f(ii)=t(ii)/m(ii);F=F+f(ii);M=M+m(ii);end;SNR=10*log10(F);MSE=M/N;SM=SNR/MSE;%对比原始信号和除噪后的信号subplot(2,1,1);plot(s(1:1000));title('原始信号')subplot(2,1,2);plot(XC(1:1000));title('除噪后的信号')SNR,MSE实例2小波去噪的M文件局部放电试验所采集的信号中往往混有白噪声、周期干扰信号去除。此处采用常用db系列小波中的db6小波进行9尺度的多分辨分解后,根据白噪声能量特性,估算各尺度的阈值大小,采用硬值进行处理,后进行重构。Matlab程序如下:functionsd=xiao_denoise(mix_signal)%此函数用于去除白躁信号&周期性干扰信号%输入参数mix_signal为采集到的信号波形s=[-1.580.420.460.78-0.490.59-1.3-1.42-0.16-1.47-1.350.36-0.44-0.141-0.5-0.2-0.06-0.60.42-1.520.510.76-1.50.16-1.29-0.65-1.480.6-1.65-0.55]p=0.6745;w_dept=9;w_name='db6';coef=cell(1,w_dept);thr=zeros(1,w_dept+1);[c,l]=wavedec(mix_signal,w_dept,w_name);%对混合信号S进行db6的9尺度一维分解coef(1)={appcoef(c,l,w_name,w_dept)};%计算尺度为9的一维分解低频系数cs=[cs,coef_soft{j}];thr(1)=median(abs(coef{1}))/p*sqrt(2*log(length(coef{1})));%计算1尺度上的阈值coef_soft(1)={wthresh(coef{1},'h',thr(1))};%对小波系数进行阈值为thr(1)的硬阈值处理cs=[coef_soft{1}];forj=2:w_dept+1coef(j)={detcoef(c,l,w_dept-j+2)};%计算尺度为9到2的各尺度高频小波系数coef1(j)={detcoef(c,l,w_dept-j+2)};thr(j)=median(abs(coef{j}))/p*sqrt(2*log(length(coef{j})));%计算9到2各尺度上的阈值coef_soft(j)={wthresh(coef{j},'h',thr(j))};%对小波系数进行阈值为thr(j)的硬阈值处理cs=[cs,coef_soft{j}];endsd=waverec(cs,l,w_name);%根据小波系数[cs,l]对信号进行重构subplot(2,1,1);plot(s);title(‘原始信号’);subplot(2,1,2);plot(sd);title(‘重构信号’)实例验证为了验证去噪的有效性,先仿真产生一个局放脉冲然后叠加0.1倍白噪声和周期干扰,利用前面的程序去造,结果如图1,从图上可以看到去噪后信号与原始信号幅值、相位都基本没有变化程序如下:fc=40e4;%振荡频率t4=0.8e-3;%脉冲起始时间tn=1e-3;%总时间x=0:step:tn;x4=t4:step:tn;%s4=(exp((t4-x4)*13/t)-exp((t4-x4)*22/t)).*sin(2*pi*fc*x4);s4=(exp((t4-x4)/tr)-exp((t4-x4)/td)).*sin(2*pi*fc*x4);s4=[zeros(1,t4/step),s4];p=tn/step;n=0.1*randn(1,p);%产生白噪信号n=[n,0];s5=0.1*sin(2*pi*10000000*x);%产生周期性干扰信号s6=s4+n+s5;sd=liu_denoise(s6);subplot(311);plot(x,s4);title('单个局放脉冲仿真波形');subplot(312);plot(x,mix_signal);title('染噪后波形');subplot(313);plot(x,sd);title('小波去噪后波形');图1小波去噪对比图