來源:本文內容整理自lxppopo新浪博客和gufengyueban的MATLAB論壇。
小波去噪方法就是一種建立在小波變換多分辨分析基礎上的算法,其基本思想是根據(jù)噪聲與信號在不同頻帶上的小波分解系數(shù)具有不同強度分布的特點,將各頻帶上的噪聲對應的小波系數(shù)去除,保留原始信號的小波分解系數(shù),然后對處理后的系數(shù)進行小波重構,得到純凈信號。
相比以往的其他去噪方法,小波變換在低信噪比情況下的去噪效果較好,去噪后的信號識別率較高,同時小波去噪方法對時變信號和突變信號的去噪效果尤其明顯。 圖1 小波去噪基本原理圖
利用小波分析對監(jiān)測采集的信號進行去噪處理,可以恢復原始信號。利用小波分析進行去噪,包括以下3種方法:
默認閾值去噪處理:該方法利用函數(shù)ddencmp() 生成信號的默認閾值,然后利用函數(shù)wdencmp() 進行去噪處理; 給定閾值去噪處理:在實際的去噪處理過程中,閾值往往可通過經驗公式獲得,且這種閾值比默認閾值的可信度高。在進行閾值量化處理時可利用函數(shù)wthresh(); 強制去噪處理:該方法是將小波分解結構中的高頻系數(shù)全部置0,即濾掉所有高頻部分,然后對信號進行小波重構。這種方法比較簡單,且去噪后的信號比較平滑,但是容易丟失信號中的有用成分。
clear all; clc; load default.txt; %裝載采集的信號 x= default; lx=length(x); t=[0:1:length(x)-1]'; %% 繪制監(jiān)測所得信號%% subplot(2,2,1); plot(t,x); title('原始信號'); grid on set(gcf,'color','w') set(gca,'fontname','times New Roman') set(gca,'fontsize',14.0) %% 用db1小波對原始信號進行3層分解并提取小波系數(shù)%% [c,l]=wavedec(x,3,'db1'); %sym8 ca3=appcoef(c,l,'db1',3); %低頻部分 cd3=detcoef(c,l,3); %高頻部分 cd2=detcoef(c,l,2); %高頻部分 cd1=detcoef(c,l,1); %高頻部分 %% 對信號進行強制去噪處理并圖示%% cdd3=zeros(1,length(cd3)); cdd2=zeros(1,length(cd2)); cdd1=zeros(1,length(cd1)); c1=[ca3,cdd3,cdd2,cdd1]; x1=waverec(c1,1,'db1'); subplot(2,2,2); plot(x1); title('強制去噪后信號'); grid on set(gcf,'color','w') set(gca,'fontname','times New Roman') set(gca,'fontsize',14.0) %% 默認閾值對信號去噪并圖示%% %用ddencmp( )函數(shù)獲得信號的默認閾值,使用wdencmp( )函數(shù)實現(xiàn)去噪過程 [thr,sorh,keepapp]=ddencmp('den','wv',x); x2=wdencmp('gbl',c,l,'db1',3,thr,sorh,keepapp); subplot(2,2,3); plot(x2); title('默認閾值去噪后信號'); grid on set(gcf,'color','w') set(gca,'fontname','times New Roman') set(gca,'fontsize',14.0) %% 給定的軟閾值進行去噪處理并圖示%% cd1soft=wthresh(cd1,'x',1.465); %經驗給出軟閾值數(shù) cd2soft=wthresh(cd2,'x',1.823); %經驗給出軟閾值數(shù) cd3soft=wthresh(cd3,'x',2.768); %經驗給出軟閾值數(shù) c2=[ca3,cd3soft,cd2soft,cd1soft]; x3=waverec(c2,1,'db1'); subplot(2,2,4); plot(x3); title('給定軟閾值去噪后信號'); grid on set(gcf,'color','w') set(gca,'fontname','times New Roman') set(gca,'fontsize',14.0)
%在馬達負載為1,轉速為1771,內圈的故障信號
load D:\我的文檔\MATLAB\106.mat %讀數(shù)據(jù)序列 x=X106_DE_time(1:2000); %將信號1到2000個采樣點給x %x=X106_DE_time; %賦予變量 fs=12000; %采樣率 dt=1/fs; %采樣間隔時間1/fs n=length(x); %得到序列的長度 t=[0:n-1]*dt; y=fft(x); %對信號進行快速FFT變換 figure(1) subplot(2,2,1), plot(t,x); %繪制原始信號序列 xlabel('時間/s'), title('時間域') grid on %subplot(2,2,2), %plot([0:n-1]/(n*dt),abs(y)*2/n) %繪制信號的振幅譜 %xlabel('頻率/HZ'),title('幅頻圖') %ylabel('振幅') %grid on %小波去噪1 %將信號用小波函數(shù)SYM5分解到第5層,用minimaxi閾值選擇對系數(shù)進行處理,消除噪聲 lev=5; xd=wden(x,'minimaxi','s','mln',lev,'sym5'); subplot(2,2,2), plot(t,xd) xlabel('時間/s'), title('消噪后的信號') grid on
程序運行結果如下: 圖2 去噪前
圖3 去噪后
|