加大门户网站安全制度建设,网站建设贰金手指科杰2,上海网络维护找哪家好,久久建筑服务网文章目录一、问题描述二、代码问题1#xff1a;原始信号加6分贝高斯白噪声问题2#xff1a;确定合适的小波基函数问题3#xff1a;确定最合适的阈值计算估计方法问题4#xff1a;确定合适的分解层数问题5#xff1a;实际信号去噪问题6#xff1a;对比三、演示视频最后一、…
文章目录一、问题描述二、代码问题1原始信号加6分贝高斯白噪声问题2确定合适的小波基函数问题3确定最合适的阈值计算估计方法问题4确定合适的分解层数问题5实际信号去噪问题6对比三、演示视频最后一、问题描述
1.利用MATLAB绘制原始信号对其加6分贝高斯白噪声 2.以Minimaxi阈值法软阈值函数3层分解层数分别用dbN和symN小波对加噪信号去噪获得分解图和去噪后的图并用信噪比和均方根误差作为评判标准确定合适的小波基函数 3.用第2步确定的小波基函数软阈值函数分解层数为3层对无偏估计阈值RigrSure、固定式阈值Sqtwolog、启发式阈值HeurSure和极大极小阈值(Minimaxi)四种分别去噪获得去噪后的图并用信噪比和均方根误差作为评判标准确定最合适的阈值计算估计方法 4.用第2步确定的小波基函数第3步确定的阈值计算估计准则分别用分解层数为123456对加噪信号进行去噪获得去噪后得到图并用信噪比和均方根误差作为评判标准 5.用实际的信号加6分贝噪声对前面确定的小波基函数阈值计算方法以及分解层数用小波阈值进行去噪并求信噪比和均方根误差。 6、确定好小波基函数、阈值函数和分解层数后分别模拟加入不同量的噪声与4阶巴特沃斯低通滤波器滤波对比
二、代码
问题1原始信号加6分贝高斯白噪声
代码如下示例
clear
clc
close all
%% MATLAB绘制原始信号
load(data.mat); %私聊发数据
datadata;
%% 加6分贝高斯白噪声
SNR6; %6dB
noise0.2*randn(size(data))*std(data)/db2mag(SNR);
sdatanoise;
figure;
subplot(211)
plot(data);ylabel(P/MPa);title(原始信号)
subplot(212)
plot(s);ylabel(P/MPa);title(加6dB高斯白噪声)
问题2确定合适的小波基函数
代码如下示例
clear
clc
close all
%% MATLAB绘制原始信号
load(data.mat);
datadata;
%% 加6分贝高斯白噪声
SNR6; %6dB
noise0.2*randn(size(data))*std(data)/db2mag(SNR);
sdatanoise;
%% Minimaxi阈值法软阈值函数3层分解层数db5去噪
wnamestrvcat(sym4,sym5,db4,db5);
for i1:4[C,L] wavedec(s,3,wname(i,:)); %进行3层小波包分解s1wden(s,minimaxi,s,mln,3,wname(i,:)); %Minimaxi、软阈值3层db5figure;subplot(311)plot(data);xlabel(t/ms);ylabel(P/MPa);title(原始信号)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,:)])figuresubplot(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
%% 根据SNR选取较好的小波基函数
[m,index]max(SNR_s1);
disp([最合适的阈值计算估计方法为,wname(index,:)])
disp(-----------------------------------------------------------)问题3确定最合适的阈值计算估计方法
代码如下示例
clear
clc
close all
%% MATLAB绘制原始信号
load(data.mat);
datadata;
%% 加6分贝高斯白噪声
SNR6; %6dB
noise0.2*randn(size(data))*std(data)/db2mag(SNR);
sdatanoise;
%% main2已经确定最合适的小波基函数
wnamesym5;
%% 无偏估计阈值RigrSure、固定式阈值Sqtwolog、启发式阈值HeurSure和极大极小阈值(Minimaxi)
TPTR[rigrsure;sqtwolog;heursure;minimaxi];
for i1:4s3wden(s,TPTR(i,:),s,mln,3,wname); %依次进行滤波figuresubplot(311)plot(data);xlabel(t/ms);ylabel(P/MPa);title(原始信号)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,:),进行滤波])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
%% 根据SNR选取较好的阈值计算估计方法
[m,index]max(snr_s3);
disp([最合适的阈值计算估计方法为,TPTR(index,:)])
disp(-----------------------------------------------------------)问题4确定合适的分解层数
代码如下示例
clear
clc
close all
%% MATLAB绘制原始信号
load(data.mat);
datadata;
%% 加6分贝高斯白噪声
SNR6; %6dB
noise0.2*randn(size(data))*std(data)/db2mag(SNR);
sdatanoise;
%% main2和main3确定的小波基函数和阈值计算估计方法
wnamesym5;
TPTRsqtwolog;
%% 分解层数为123456
for i1:6s4wden(s,TPTR,s,mln,i,wname); %依次进行滤波figuresubplot(311)plot(data);xlabel(t/ms);ylabel(P/MPa);title(原始信号)subplot(312)plot(s);xlabel(t/ms);ylabel(P/MPa);title(加6dB高斯白噪声)subplot(313)plot(s4);xlabel(t/ms);ylabel(P/MPa);title([分解层数,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
%% 根据SNR选取较好的分解层数
[m,index]max(snr_s4);
disp([最合适的分解层数为,num2str(index)])
disp(-----------------------------------------------------------)问题5实际信号去噪
代码如下示例
clear
clc
close all
%% 读取实际的信号
dataxlsread(14#c1.csv);
datadata(:,2);
%% 加6分贝高斯白噪声
SNR6; %6dB
noise0.2*randn(size(data))*std(data)/db2mag(SNR);
sdatanoise;
%% 根据234确定参数
wnamesym5;
TPTRsqtwolog;
lev6;
%% 进行滤波
s5wden(s,TPTR,s,mln,lev,wname); %进行滤波
%% 绘制
figure;
subplot(311)
plot(data);xlabel(t/ms);ylabel(P/MPa);title(实际信号)
subplot(312)
plot(s);xlabel(t/ms);ylabel(P/MPa);title(加6dB高斯白噪声)
subplot(313)
plot(s5);xlabel(t/ms);ylabel(P/MPa);title(信号去噪)
snr_s55snr(s,s5-s);
snr_s5snr(data,s5-data);RMSE_s5sqrt(mse(data-s5));
disp([TPTR,-软阈值-,num2str(lev),层-,wname,信噪比,num2str(snr_s5),dB均方根误差,num2str(RMSE_s5)])
disp([加噪后信噪比,num2str(snr_s55),dB])问题6对比
代码如下示例
clear
clc
close all
%% 读取实际的信号
dataxlsread(14#c1.csv);
datadata(:,2);
fs125000;
%%
wnamesym5;
TPTRsqtwolog;
lev6;
%% 设计4阶巴特沃斯低通滤波器
fc10000;
n4; %阶数
[b,a]butter(n,fc/(fs/2), low);
%% 加1-16分贝高斯白噪声
for SNR1:16 %6dBnoise0.2*randn(size(data))*std(data)/db2mag(SNR);sdatanoise;s1filter(b,a,s); %filter既能进行IIR滤波又能进行FIR滤波s2wden(s,TPTR,s,mln,lev,wname); %进行滤波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(信噪比曲线)
%%
for SNR2:2:10 %6dBnoise0.2*randn(size(data))*std(data)/db2mag(SNR);sdatanoise;s1filter(b,a,s); %filter既能进行IIR滤波又能进行FIR滤波s2wden(s,TPTR,s,mln,lev,wname); %进行滤波figure;subplot(411)plot(data);xlabel(t/ms);ylabel(P/MPa);title(实际信号)subplot(412)plot(s);xlabel(t/ms);ylabel(P/MPa);title(加16dB高斯白噪声)subplot(413)plot(s1);xlabel(t/ms);ylabel(P/MPa);title(FIR信号去噪)subplot(414)plot(s1);xlabel(t/ms);ylabel(P/MPa);title(小波信号去噪)suptitle([噪声大小,num2str(SNR),dB])
end 三、演示视频 基于wden函数的去噪演示最后
不定期发布一些matlab设计内容,敬请期待。包括但不限于如下内容:信号处理、通信仿真、gui设计、matlab appdesignersimulink仿真。有任何有关MATLAB的问题可咨询