% 测试文件
clc;clear;close all
%% 1.生成仿真信号
N=1000;Fs=1000;%%采样频率自己设置
t=((0:N-1)*1/Fs)';f1=5;f2=30;y1=5*sin(2*pi*f1*t);y2=3*sin(2*pi*f2*t);
y=y1+y2;
SNR=10;rng(100);sig_noise = awgn(y,SNR,'measured'); %添加噪声
%% 画图
ylabel('\fontname{宋体}幅值');xlabel('\fontname{Times new roman}Frequency/\it{Hz}');
subplot(221);plot(y,'k');title('\fontname{宋体}原始信号');
ylabel('\fontname{宋体}幅值');xlabel('采样点数/n');
subplot(222);pFFT(y,Fs);title('\fontname{宋体}频谱图');
ylabel('\fontname{宋体}幅值');xlabel('\fontname{Times new roman}Frequency/\it{Hz}');
subplot(223);plot(sig_noise,'k');title('\fontname{宋体}加噪后信号');
ylabel('\fontname{宋体}幅值');xlabel('采样点数/n');
subplot(224);pFFT(sig_noise,Fs);title('\fontname{宋体}频谱图');
ylabel('\fontname{宋体}幅值');xlabel('\fontname{Times new roman}Frequency/\it{Hz}');
%% 2.小波阈值去噪
%%小波基函数的选择 %%分解层数的选择 %%阈值选择规则 %%小波基函数的选择:https://www.mathworks.cn/help/wavelet/ref/wfilters.html?searchHighlight=wname&s_tid=srchtitle_wname_2#d123e130597
wname='db3'; lev=4; tptr='heursure'; %'rigsure','heursure','sqtwolog','minimaxi'
option=[];SORH={'h','s','a2'};
for i=1:length(SORH)
WT_sig{i}=IWTD(sig_noise,wname,SORH{i},lev,tptr,option); %调用函数进行滤波
end
figure('color','w');set(gcf, 'Position', [400 300 500 500]);
subplot(2,2,1);plot(sig_noise,'k'); title('\fontname{宋体}加噪后信号');
ylabel('幅值');xlabel('采样点数/n');
Name={'硬阈值小波去噪','软阈值小波去噪','改进阈值函数小波去噪'};
for i=1:length(SORH)
subplot(2,2,i+1);plot(WT_sig{i});
ylabel('\fontname{宋体}幅值');xlabel('采样点数/n');title(Name{i});
end
Simulate_Signal=y;
for i=1:length(SORH)
[~,RMSE,RMS,MAE,SNR,~,cross_core,R,SER,NM,~,BIAS]=evaluate_denoising_metrics(Simulate_Signal,WT_sig{i});
disp(['---------------------------------',SORH{i},'小波的去噪的指标----------------------------------']);
disp(['均方根误差RMSE=',num2str(RMSE),'均方根值RMS=',num2str(RMS),',平均绝对值误差MAE=',num2str(MAE),',信噪比SNR=',num2str(SNR),',互相关系数cc=',num2str(cross_core),'平滑度指标R=',num2str(R),',信号能量比SER=',num2str(SER),',噪声的模NM=',num2str(NM),',信号偏差BIAS=',num2str(BIAS)]);
end