├── GA.m ├── README.md ├── SA.m ├── WTD_main.m ├── fobj.m ├── parameter_best.m └── 自适应SVR效果图.png /GA.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TEDddr/Adap-WTD/2b0c233c7f3d99d7e0b4f51d48bc9476b31a85b9/GA.m -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Adap-WTD 2 | 自适应的小波阈值降噪 3 | ![image](https://github.com/TEDddr/Adap-WTD/assets/130724106/f9fa8e12-f3e6-4001-8fa1-47d1cc2f1b56) 4 | -------------------------------------------------------------------------------- /SA.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TEDddr/Adap-WTD/2b0c233c7f3d99d7e0b4f51d48bc9476b31a85b9/SA.m -------------------------------------------------------------------------------- /WTD_main.m: -------------------------------------------------------------------------------- 1 | %% 基于小波变换的阈值去噪 2 | clc; 3 | clear ; 4 | close all; 5 | [~, ~] =system('taskkill /F /IM EXCEL.EXE'); % Keill all running "EXCEL" processes.解决文件被锁定问题 6 | % wavemenu %工具箱分析 7 | %% 寻优最佳参数 8 | main_best; 9 | %% a第一步a:对原始信号做一个初筛: 10 | %筛出有降噪价值的数据 11 | %读取数据:理想信号a_x (原始信号) 噪音a_nt 12 | %直接调用即可 13 | a_x=xlsread('(理想值)原始信号.xlsx','Sheet1','D1:D100'); 14 | a_nt=xlsread('(波动值).xlsx','Sheet1','D1:D100'); 15 | [a_m,~]=size(a_x); 16 | a_t=(1:1:a_m)';%序号 17 | %波动百分比计算 18 | a_bdz = abs(a_nt); %波动值绝对值 19 | a_Pbdz = a_bdz./a_x; %波动百分比 20 | aa = [a_t,a_x,a_x+a_nt,a_nt,a_Pbdz]; %原始数据表 21 | %[0.18,0.25]疑似故障、[0.03,0.05]较准确,都需要筛出 22 | a_Pbdz(a_Pbdz>0.18) = 1000; 23 | a_Pbdz(a_Pbdz<0.05) = 100; 24 | a_FenJiB = [a_t,a_x,a_x+a_nt,a_nt,a_Pbdz];%原始数据表 25 | xlswrite('经分级的源数据.xlsx',a_FenJiB) 26 | [m1,n1]=size(a_FenJiB); 27 | z=zeros(1,n1); %列数对齐 28 | for i=1:m1 29 | if(a_FenJiB(i,5) ~=100 & a_FenJiB(i,5) ~= 1000) 30 | z = [z;a_FenJiB(i,:)]; 31 | end 32 | end 33 | a_ZaoYinB = z(2:size(z,1),:); 34 | xlswrite('待小波滤波处理的数据.xlsx',a_ZaoYinB) 35 | %筛选出待处理数据 36 | a_ZaoYinC = z2(2:size(z2,1),:); 37 | %% 第二步b:输入待处理信号 38 | %读取数据:理想信号x (原始信号) 波动值nt 39 | b_x=xlsread('待小波滤波处理的数据.xlsx','Sheet1','B1:B100'); 40 | b_nt=xlsread('待小波滤波处理的数据.xlsx','Sheet1','D1:D100'); 41 | %得到含噪信号 y = x + nt 42 | b_y=b_x+b_nt; 43 | %数据t采样值 N采样数目 44 | [m2,n2]=size(b_x); 45 | t=(1:1:m2)'; 46 | %% 第三步c:求解函数确立and小波基选择 47 | c_a5=appcoef(c_fjxs,l,'sym4',5); 48 | %取各层高频细节系数 49 | c_d5=detcoef(c_fjxs,l,5); 50 | c_d4=detcoef(c_fjxs,l,4); 51 | c_d3=detcoef(c_fjxs,l,3); 52 | c_d2=detcoef(c_fjxs,l,2); 53 | c_d1=detcoef(c_fjxs,l,1); 54 | %% 第四步d:获取最佳参数 55 | d_thr=bestX_GA; 56 | d_a = bestX_a; 57 | % d_thr=thselect(b_y,'heursure'); % √去噪的阈值选择, 58 | %% 第五步e:阈值函数选择: 59 | e_ysoft5=wthresh_i(c_d5,'s',d_thr,d_a);%改进的阙值函数 60 | e_ysoft4=wthresh_i(c_d4,'s',d_thr,d_a); 61 | e_ysoft3=wthresh_i(c_d3,'s',d_thr,d_a); 62 | e_ysoft2=wthresh_i(c_d2,'s',d_thr,d_a); 63 | e_ysoft1=wthresh_i(c_d1,'s',d_thr,d_a); 64 | e_c1=[c_a5;e_ysoft5;e_ysoft4;e_ysoft3;e_ysoft2;e_ysoft1]; 65 | % wthcoef %一维信号小波系数的阙值处理 66 | %% 第六步f:重构信号 67 | f_CgXh=waverec(e_c1,l,'sym4'); %多尺度一维小波重构 68 | f_bdz=f_CgXh-b_x;%降噪后波动值 69 | %% 第七步g:重组信号 70 | %按顺序,将[0,0.05]+[降噪部分]+[0.18,∞]给拼接起来 71 | % 针对F 72 | g_JzQian=aa(:,1:4);%降噪前 73 | g_JzHou=[a_ZaoYinA(:,1:4);f_fin;a_ZaoYinC(:,1:4)];%降噪后 74 | g_JzHou_rank=sortrows(g_JzHou);%降噪后,按序号排序 75 | 76 | % 针对整表波动值 77 | g_JzQ_ZbBdz=abs(xlsread('(波动值)rcoFT.xlsx')); 78 | g_jzH_ZbBdz=abs([g_JzQ_ZbBdz(:,1:3),g_JzHou_rank(:,4),g_JzQ_ZbBdz(:,5)]); 79 | %% 第八步h:降噪指标 80 | %信噪比(实际-降噪后) 81 | h_SNR1=sum(b_x.^2); %纯净信号 82 | h_SNR2=sum(f_CgXh.^2);%去噪后信号 83 | h_SNR3=sum((b_x-f_CgXh).^2);%降噪后的差值 84 | SNR=10*log10(h_SNR1/h_SNR3);%信噪比 85 | %原始信噪比 (实际-理想) 86 | h_SNR4=sum((b_nt).^2); %原始噪音值 87 | SNR_Q=10*log10(h_SNR1/h_SNR4);%信噪比, 88 | 89 | % 针对整个数据表 90 | % 降噪前数据评分:权重*波动值 91 | h_JzQ_ZB_Score=(h_Qzz(:,1:5) * g_JzQ_ZbBdz')'; 92 | h_JzQ_ZB_PjzScore=mean(h_JzQ_ZB_Score,1); 93 | % 降噪后数据评分 94 | h_JzH_ZB_Score=(h_Qzz(:,1:5) * g_jzH_ZbBdz')'; 95 | h_JzH_ZB_PjzScore=mean(h_JzH_ZB_Score,1); 96 | %% 最后一部分fin:拼接各评价指标 97 | %信噪比 98 | %降噪后噪音分、前后分数差额;降噪后整表噪音均分、前后整表分数差额 99 | %原分数只需要简单提一下即可,为方便观察,也把原分数放在fin部分 100 | fin_bdz=h_JzQ_Bdz; 101 | fin_bdz_bfb=(h_JzH_Bdz - h_JzQ_Bdz)/h_JzQ_Bdz; 102 | 103 | fin_Fscore=h_JzQ_Score; 104 | fin_Fscore_bfb=(h_JzH_Score - h_JzQ_Score)/h_JzQ_Score; 105 | 106 | fin_ZBscore=h_JzQ_ZB_PjzScore; 107 | fin_ZBscore_bfb=(h_JzH_ZB_PjzScore - h_JzQ_ZB_PjzScore)/h_JzQ_ZB_PjzScore; 108 | 109 | fin_SNR_bfb=(SNR-SNR_Q)/SNR_Q; 110 | fin_all=[h_JzH_AEFF,fin_EFF_bfb, h_JzH_Bdz,fin_bdz_bfb ,SNR,fin_SNR_bfb,h_JzH_Score,fin_Fscore_bfb ,h_JzH_ZB_PjzScore,fin_ZBscore_bfb]; 111 | %% 额外部分:画图 112 | % 频数波形对比图 113 | figure; 114 | hold on; 115 | %根据需要去调整 116 | % subplot(2,2,1);plot(t,b_x);xlabel('频数f');ylabel('值');title('理想信号值x'); 117 | % subplot(2,2,2);plot(t,b_y);xlabel('频数f');ylabel('值');title('含噪信号值y'); 118 | % subplot(2,2,3);plot(t,f_CgXh);xlabel('频数f');ylabel('值');title('去噪后信号值X'); 119 | % subplot(3,1,1);plot(t,f_CgXh);xlabel(' 频数\newline(g)自己所提自适应阈值降噪算法');ylabel('值');axis([0,60,100,200]); 120 | 121 | %属性设置 122 | plot(t,b_y);%含噪值 123 | plot(t,b_x,'--'); %理想值 124 | % plot(t,f_CgXh,'-b');%降噪后值 125 | % legend('理想信号值s(t)','含噪信号值f(t)','去噪后信号值X'); %右上角标注 126 | %% 画迭代曲线 127 | % load('color_list') 128 | % figure(2) 129 | % color_all=color_list(randperm(length(color_list)),:); 130 | % %画迭代过程曲线 131 | % for N=1:length(Fival_compare) 132 | % plot(curve_compare(N,:),'Color',color_all(N,:),'LineWidth',2) 133 | % hold on 134 | % end 135 | % xlabel('迭代次数'); 136 | % ylabel('目标函数值'); 137 | % grid on 138 | % box on 139 | % legend(name_all) 140 | -------------------------------------------------------------------------------- /fobj.m: -------------------------------------------------------------------------------- 1 | function [lb,ub,dim,fobj] = fobj(F) 2 | switch F 3 | case 'F1' 4 | fobj = @F1; 5 | lb=0;%下限 6 | ub=30;%上限 7 | dim=2;%维度 8 | end 9 | end 10 | % F1 11 | function o = F1(x) 12 | close all; 13 | %% 第四步d:参数获取 14 | d_thr=x(1); % √去噪的阈值选择 15 | d_a = x(2); 16 | % 可以选择sqtwolog平均值、heursure启发式阈值、rigrsure无偏风险估计原理、minimaxi极大极小原理 17 | %% 第五步e:阈值函数选择3: 18 | % SORH=s,软阈值;Sorh=h,硬阈值; 19 | e_ysoft5=wthresh_i(c_d5,'s',d_thr,d_a);%软阙值处理 20 | e_ysoft4=wthresh_i(c_d4,'s',d_thr,d_a); 21 | e_ysoft3=wthresh_i(c_d3,'s',d_thr,d_a); 22 | e_ysoft2=wthresh_i(c_d2,'s',d_thr,d_a); 23 | e_ysoft1=wthresh_i(c_d1,'s',d_thr,d_a); 24 | e_c1=[c_a5;e_ysoft5;e_ysoft4;e_ysoft3;e_ysoft2;e_ysoft1]; 25 | %% 第六步f:重构信号4 26 | f_CgXh=waverec(e_c1,l,'sym4'); %多尺度一维小波重构 27 | f_bdz=f_CgXh-b_x;%降噪后波动值 28 | f_fin=[a_ZaoYinB(:,1),b_x,f_CgXh,f_bdz] 29 | %% 评价指标 30 | %信噪比 31 | % g_JzHou_rank=sortrows(g_JzHou);%降噪后,按序号排序 32 | % h_yXh=sum(abs(g_JzHou_rank(:,2)).^2)/a_m; %原始信号 33 | % h_JzXh=sum(abs(g_JzHou_rank(:,4)).^2)/a_m;%去噪后信号 34 | % SNR=10*log10(h_yXh/h_JzXh); 35 | %波动均值 36 | h_JzH_Bdz=mean(abs(f_fin(:,4)),1); 37 | %F噪音分 38 | h_Qzz=xlsread('权重值.xlsx'); 39 | h_JzH_Score=h_Qzz(:,4)* h_JzH_Bdz;%噪音分均值 40 | %% 输出最佳评价指标 41 | mean_error = h_JzH_Score;%适应度函数:噪音分(信噪比) 42 | disp(mean_error); 43 | o = mean_error; 44 | end 45 | -------------------------------------------------------------------------------- /parameter_best.m: -------------------------------------------------------------------------------- 1 | clear;clc;close all 2 | [~, ~] =system('taskkill /F /IM EXCEL.EXE'); % Keill all running "EXCEL" processes.解决文件被锁定问题 3 | 4 | Function_name='F1'; % 使用所求目标函数的名字,对应 Functions_details 文件 5 | [lb,ub,dim,fobj]=fobj(Function_name); %得到具体的方程即目标函数,变量的维度,变量的上下限 6 | pop_num=8; % 种群数量 7 | Max_iter=8; % 最大迭代次数 8 | %各种优化算法性能的比较 9 | Time_compare=[]; %算法的运行时间比较 10 | Fival_compare=[]; %算法的最终目标比较 11 | curve_compare=[]; %算法的过程函数比较 12 | name_all=[]; %算法的名称记录 13 | iter=1;%迭代次数 14 | 15 | %要用什么算法就把什么算法解除注释即可,可以多个算法包一同比较优劣。 16 | %各类算法包,可以从网上自己调包。 17 | %% 模拟退火优化算法 SA 18 | % t1=clock; 19 | % [fMin_SA,bestX2,SA_curve]=SA(Max_iter,lb,ub,dim,fobj); % 模拟退火优化算法 20 | % t2=clock; 21 | % time_SA=(t2(end)+t2(end-1)*60+t2(end-2)*3600-t1(end)-t1(end-1)*60-t1(end-2)*3600); 22 | % Fival_compare=[Fival_compare,fMin_SA]; 23 | % Time_compare=[Time_compare,time_SA(end)]; 24 | % curve_compare=[curve_compare;SA_curve]; 25 | % name_all{1,iter}='SA'; 26 | % iter=iter+1; 27 | 28 | %% 遗传算法优化算法 √ GA 29 | % t1=clock; 30 | % [fMin_GA,bestX_GA,GA_curve]=GA(pop_num,Max_iter,lb,ub,dim,fobj); % 遗传算法优化算法 31 | % %[目标函数最小值,最佳x值,迭代曲线] 32 | % time_GA=(clock-t1); 33 | % Fival_compare=[Fival_compare,fMin_GA]; 34 | % Time_compare=[Time_compare,time_GA(end)]; 35 | % curve_compare=[curve_compare;GA_curve]; 36 | % name_all{1,iter}='GA'; 37 | % iter=iter+1; 38 | 39 | %% 画迭代曲线 40 | load('color_list') 41 | figure(2) 42 | color_all=color_list(randperm(length(color_list)),:); 43 | %画迭代过程曲线 44 | for N=1:length(Fival_compare) 45 | plot(curve_compare(N,:),'Color',color_all(N,:),'LineWidth',2) 46 | hold on 47 | end 48 | xlabel('迭代次数'); 49 | ylabel('目标函数值'); 50 | grid on 51 | box on 52 | legend(name_all) 53 | %以下可以显示 54 | % display(['The best solution obtained by SSA is : ', num2str(bestX)]); 55 | % display(['The best optimal value of the objective funciton found by SSA is : ', num2str(fMin)]); 56 | -------------------------------------------------------------------------------- /自适应SVR效果图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TEDddr/Adap-WTD/2b0c233c7f3d99d7e0b4f51d48bc9476b31a85b9/自适应SVR效果图.png --------------------------------------------------------------------------------