一、問(wèn)題描述
1.利用MATLAB繪制原始信號(hào),對(duì)其加6分貝高斯白噪聲;
2.以Minimaxi閾值法,軟閾值函數(shù),3層分解層數(shù),分別用dbN和symN小波對(duì)加噪信號(hào)去噪,獲得分解圖和去噪后的圖,并用信噪比和均方根誤差作為評(píng)判標(biāo)準(zhǔn),確定合適的小波基函數(shù);
3.用第2步確定的小波基函數(shù),軟閾值函數(shù),分解層數(shù)為3層,對(duì)無(wú)偏估計(jì)閾值(RigrSure)、固定式閾值(Sqtwolog)、啟發(fā)式閾值(HeurSure)和極大極小閾值(Minimaxi)四種分別去噪,獲得去噪后的圖,并用信噪比和均方根誤差作為評(píng)判標(biāo)準(zhǔn),確定最合適的閾值計(jì)算估計(jì)方法;
4.用第2步確定的小波基函數(shù),第3步確定的閾值計(jì)算估計(jì)準(zhǔn)則,分別用分解層數(shù)為1,2,3,4,5,6對(duì)加噪信號(hào)進(jìn)行去噪,獲得去噪后得到圖,并用信噪比和均方根誤差作為評(píng)判標(biāo)準(zhǔn);
5.用實(shí)際的信號(hào)加6分貝噪聲對(duì)前面確定的小波基函數(shù),閾值計(jì)算方法以及分解層數(shù)用小波閾值進(jìn)行去噪,并求信噪比和均方根誤差。
6、確定好小波基函數(shù)、閾值函數(shù)和分解層數(shù)后,分別模擬加入不同量的噪聲與4階巴特沃斯低通濾波器濾波對(duì)比
二、代碼
問(wèn)題1:原始信號(hào)加6分貝高斯白噪聲
代碼如下(示例):
clear
clc
close all
%% MATLAB繪制原始信號(hào)
load('data.mat'); %私聊發(fā)數(shù)據(jù)
data=data;
%% 加6分貝高斯白噪聲
SNR=6; %6dB
noise=0.2*randn(size(data))*std(data)/db2mag(SNR);
s=data+noise;
figure;
subplot(211)
plot(data);ylabel('P/MPa');title('原始信號(hào)')
subplot(212)
plot(s);ylabel('P/MPa');title('加6dB高斯白噪聲')
問(wèn)題2:確定合適的小波基函數(shù)
代碼如下(示例):
clear
clc
close all
%% MATLAB繪制原始信號(hào)
load('data.mat');
data=data;
%% 加6分貝高斯白噪聲
SNR=6; %6dB
noise=0.2*randn(size(data))*std(data)/db2mag(SNR);
s=data+noise;
%% Minimaxi閾值法,軟閾值函數(shù),3層分解層數(shù),db5去噪
wname=strvcat('sym4','sym5','db4','db5');
for i=1:4
[C,L] = wavedec(s,3,wname(i,:)); %進(jìn)行3層小波包分解
s1=wden(s,'minimaxi','s','mln',3,wname(i,:)); %Minimaxi、軟閾值,3層,db5
figure;
subplot(311)
plot(data);xlabel('t/ms');ylabel('P/MPa');title('原始信號(hào)')
subplot(312)
plot(s);xlabel('t/ms');ylabel('P/MPa');title('加6dB高斯白噪聲')
subplot(313)
plot(s1);xlabel('t/ms');ylabel('P/MPa');title(['Minimaxi-軟閾值-3層-',wname(i,:)])
figure
subplot(511)
plot(data,'r');ylabel('s');title([wname(i,:),'小波分解圖'])
set(gca,'ytick',[])
set(gca,'xtick',[])
subplot(512)
plot(C(1:L(2)),'b');ylabel('a3')
set(gca,'ytick',[])
set(gca,'xtick',[])
subplot(513)
plot(C(L(2):L(3)));ylabel('d3')
set(gca,'ytick',[])
set(gca,'xtick',[])
subplot(514)
plot(C(L(3):L(4)));ylabel('d2')
set(gca,'ytick',[])
set(gca,'xtick',[])
subplot(515)
plot(C(L(4):L(5)));ylabel('d1')
SNR_s1(i)=snr(data,s1-data);RMSE_s1(i)=sqrt(mse(data-s1));
SNR_s11(i)=snr(s,s1-s);
disp(['Minimaxi-軟閾值-3層-',wname(i,:),':信噪比=',num2str(SNR_s1(i)),'dB,均方根誤差=',num2str(RMSE_s1(i))])
disp(['加噪后信噪比=',num2str(SNR_s11(i)),'dB'])
disp('-----------------------------------------------------------')
end
%% 根據(jù)SNR選取較好的小波基函數(shù)
[m,index]=max(SNR_s1);
disp(['最合適的閾值計(jì)算估計(jì)方法為:',wname(index,:)])
disp('-----------------------------------------------------------')
問(wèn)題3:確定最合適的閾值計(jì)算估計(jì)方法
代碼如下(示例):
clear
clc
close all
%% MATLAB繪制原始信號(hào)
load('data.mat');
data=data;
%% 加6分貝高斯白噪聲
SNR=6; %6dB
noise=0.2*randn(size(data))*std(data)/db2mag(SNR);
s=data+noise;
%% main2已經(jīng)確定最合適的小波基函數(shù)
wname='sym5';
%% 無(wú)偏估計(jì)閾值(RigrSure)、固定式閾值(Sqtwolog)、啟發(fā)式閾值(HeurSure)和極大極小閾值(Minimaxi)
TPTR=['rigrsure';'sqtwolog';'heursure';'minimaxi'];
for i=1:4
s3=wden(s,TPTR(i,:),'s','mln',3,wname); %依次進(jìn)行濾波
figure
subplot(311)
plot(data);xlabel('t/ms');ylabel('P/MPa');title('原始信號(hào)')
subplot(312)
plot(s);xlabel('t/ms');ylabel('P/MPa');title('加6dB高斯白噪聲')
subplot(313)
plot(s3);xlabel('t/ms');ylabel('P/MPa');title(['采用',TPTR(i,:),'進(jìn)行濾波'])
snr_s3(i)=snr(data,s3-data);RMSE_s3(i)=sqrt(mse(data-s3));
snr_s33(i)=snr(s,s3-s);
disp([TPTR(i,:),'-軟閾值-3層-',wname,':信噪比=',num2str(snr_s3(i)),'dB,均方根誤差=',num2str(RMSE_s3(i))])
disp(['加噪后信噪比=',num2str(snr_s33(i)),'dB'])
disp('-----------------------------------------------------------')
end
%% 根據(jù)SNR選取較好的閾值計(jì)算估計(jì)方法
[m,index]=max(snr_s3);
disp(['最合適的閾值計(jì)算估計(jì)方法為:',TPTR(index,:)])
disp('-----------------------------------------------------------')
問(wèn)題4:確定合適的分解層數(shù)
代碼如下(示例):
clear
clc
close all
%% MATLAB繪制原始信號(hào)
load('data.mat');
data=data;
%% 加6分貝高斯白噪聲
SNR=6; %6dB
noise=0.2*randn(size(data))*std(data)/db2mag(SNR);
s=data+noise;
%% main2和main3確定的小波基函數(shù)和閾值計(jì)算估計(jì)方法
wname='sym5';
TPTR='sqtwolog';
%% 分解層數(shù)為1,2,3,4,5,6
for i=1:6
s4=wden(s,TPTR,'s','mln',i,wname); %依次進(jìn)行濾波
figure
subplot(311)
plot(data);xlabel('t/ms');ylabel('P/MPa');title('原始信號(hào)')
subplot(312)
plot(s);xlabel('t/ms');ylabel('P/MPa');title('加6dB高斯白噪聲')
subplot(313)
plot(s4);xlabel('t/ms');ylabel('P/MPa');title(['分解層數(shù)=',num2str(i)])
snr_s4(i)=snr(data,s4-data);RMSE_s4(i)=sqrt(mse(data-s4));
snr_s44(i)=snr(s,s4-s);
disp([TPTR,'-軟閾值-',num2str(i),'層-',wname,':信噪比=',num2str(snr_s4(i)),'dB,均方根誤差=',num2str(RMSE_s4(i))])
disp(['加噪后信噪比=',num2str(snr_s44(i)),'dB'])
disp('-----------------------------------------------------------')
end
%% 根據(jù)SNR選取較好的分解層數(shù)
[m,index]=max(snr_s4);
disp(['最合適的分解層數(shù)為:',num2str(index)])
disp('-----------------------------------------------------------')
問(wèn)題5:實(shí)際信號(hào)去噪
代碼如下(示例):
clear
clc
close all
%% 讀取實(shí)際的信號(hào)
data=xlsread('14#c1.csv');
data=data(:,2);
%% 加6分貝高斯白噪聲
SNR=6; %6dB
noise=0.2*randn(size(data))*std(data)/db2mag(SNR);
s=data+noise;
%% 根據(jù)(2)(3)(4)確定參數(shù)
wname='sym5';
TPTR='sqtwolog';
lev=6;
%% 進(jìn)行濾波
s5=wden(s,TPTR,'s','mln',lev,wname); %進(jìn)行濾波
%% 繪制
figure;
subplot(311)
plot(data);xlabel('t/ms');ylabel('P/MPa');title('實(shí)際信號(hào)')
subplot(312)
plot(s);xlabel('t/ms');ylabel('P/MPa');title('加6dB高斯白噪聲')
subplot(313)
plot(s5);xlabel('t/ms');ylabel('P/MPa');title('信號(hào)去噪')
snr_s55=snr(s,s5-s);
snr_s5=snr(data,s5-data);RMSE_s5=sqrt(mse(data-s5));
disp([TPTR,'-軟閾值-',num2str(lev),'層-',wname,':信噪比=',num2str(snr_s5),'dB,均方根誤差=',num2str(RMSE_s5)])
disp(['加噪后信噪比=',num2str(snr_s55),'dB'])
問(wèn)題6:對(duì)比
代碼如下(示例):
clear
clc
close all
%% 讀取實(shí)際的信號(hào)
data=xlsread('14#c1.csv');
data=data(:,2);
fs=125000;
%%
wname='sym5';
TPTR='sqtwolog';
lev=6;
%% 設(shè)計(jì)4階巴特沃斯低通濾波器
fc=10000;
n=4; %階數(shù)
[b,a]=butter(n,fc/(fs/2), 'low');
%% 加1-16分貝高斯白噪聲
for SNR=1:16 %6dB
noise=0.2*randn(size(data))*std(data)/db2mag(SNR);
s=data+noise;
s1=filter(b,a,s); %filter既能進(jìn)行IIR濾波又能進(jìn)行FIR濾波
s2=wden(s,TPTR,'s','mln',lev,wname); %進(jìn)行濾波
snr_s1(SNR)=snr(data,s1-data);RMSE_s1(SNR)=sqrt(mse(data-s1));
snr_s2(SNR)=snr(data,s2-data);RMSE_s2(SNR)=sqrt(mse(data-s2));
end
figure;
plot(1:16,snr_s1,'o-r');
hold on
plot(1:16,snr_s2,'*-b');
xlabel('高斯白噪聲dB');ylabel('SNR')
legend('FIR濾波','小波濾波')
title('信噪比曲線(xiàn)')
%%
for SNR=2:2:10 %6dB
noise=0.2*randn(size(data))*std(data)/db2mag(SNR);
s=data+noise;
s1=filter(b,a,s); %filter既能進(jìn)行IIR濾波又能進(jìn)行FIR濾波
s2=wden(s,TPTR,'s','mln',lev,wname); %進(jìn)行濾波
figure;
subplot(411)
plot(data);xlabel('t/ms');ylabel('P/MPa');title('實(shí)際信號(hào)')
subplot(412)
plot(s);xlabel('t/ms');ylabel('P/MPa');title('加16dB高斯白噪聲')
subplot(413)
plot(s1);xlabel('t/ms');ylabel('P/MPa');title('FIR信號(hào)去噪')
subplot(414)
plot(s1);xlabel('t/ms');ylabel('P/MPa');title('小波信號(hào)去噪')
suptitle(['噪聲大小=',num2str(SNR),'dB'])
end
三、演示視頻
基于wden函數(shù)的去噪演示文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-443403.html
最后
如果你想要進(jìn)一步了解更多的相關(guān)知識(shí),可以關(guān)注下面公眾號(hào)聯(lián)系~會(huì)不定期發(fā)布相關(guān)設(shè)計(jì)內(nèi)容包括但不限于如下內(nèi)容:信號(hào)處理、通信仿真、算法設(shè)計(jì)、matlab appdesigner,gui設(shè)計(jì)、simulink仿真…希望能幫到你!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-443403.html
到了這里,關(guān)于Matlab小波去噪——基于wden函數(shù)的去噪分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!