小波去噪和小波包去噪matlab代码

%% 这是自己学习整理的matlab代码,希望对大家有所帮助
%% 小波变换的阈值去噪步骤 (信号——小波分解——阈值处理——小波重构——去噪后的信号)

clear all; clc;
load leleccum; %装载信号(一维电压信号)(matlab内置示例信号)
s=leleccum(1:4000); %将信号中第1到第4000个采样点赋值给s
ls=length(s);
subplot(4,1,1); plot(s); title(‘原始信号图形’); grid on;
%用db2小波对原始信号进行3层分解并提取系数, 'db2’是小波基;
%一般来说,小波基应具有一些特定的性质,如正交性、紧支性、平滑性、对称性等,这些性质会影响小波分解的结果
%选择适合的小波基需要根据信号的特征和所需分析的目的来进行选择。
%对于电压信号,通常是周期性的,并且当电压信号出现故障或异常时,会出现瞬态信号。
%因此,可以考虑选择具有好的瞬态性能和周期性能的小波基。常用的小波基有haar、db1、db2、db3等,
%它们都是具有好的瞬态性能和周期性能的小波基。其中,db2是一种非常常用的小波基,可以适用于多种信号处理任务。
%此外,还有一些针对电力系统中电压信号的小波基,如Symmlet 6、Daubechies 8等,这些小波基在电力系统故障检测和分析中得到了广泛应用。
%因此,对于电压信号的小波分析,可以先尝试使用haar、db2等常用的小波基,
%如果需要更精确的分析结果,可以选择Symmlet 6、Daubechies 8等专门针对电力系统中电压信号的小波基。

base = ‘db2’; %紧支集正交小波
% base = ‘haar’; %Haar函数是小波分析中最早用到的一个具有紧支撑的正交小波函数
% base = 'Sym6 ; %近似对称的紧支集正交小波

[c,l]=wavedec(s,3,base); %进行3层分解,c=ca3+cd3+cd2+cd1
ca3=appcoef(c,l,base,3); %提取一维小波变换的第3层低频系数
cd3=detcoef(c,l,3); %提取3层高频系数
cd2=detcoef(c,l,2); %提取2层高频系数
cd1=detcoef(c,l,1); %提取1层高频系数

%% 1.对信号进行强制性去噪处理
cdd3=zeros(1,length(cd3)); %高频系数 直接强制置零
cdd2=zeros(1,length(cd2));
cdd1=zeros(1,length(cd1));
c1=[ca3 cdd3 cdd2 cdd1];
s1=waverec(c1,l,base); %小波重构
subplot(4,1,2);
plot(s1); title(‘1.强制去噪后的信号’); grid on;

%% 2.用默认阈值对信号进行去噪处理
%用ddencmp()函数获得信号的默认阈值,使用wdencmp()命令函数实现去噪过程
[thr,sorh,keepapp] = ddencmp(‘den’,‘wv’,s);
s2=wdencmp(‘gbl’,c,l,base,3,thr,sorh,keepapp);
subplot(4,1,3);
plot(s2); title(‘2.默认阙值去噪后的信号’); grid on;

%% 3.用给定的软阈值进行去噪处理
cd1soft=wthresh(cd1,‘s’,2.65);
cd2soft=wthresh(cd2,‘s’,1.53);
cd3soft=wthresh(cd3,‘s’,1.76);
c2=[ca3 cd3soft cd2soft cd1soft];
s3=waverec(c2,l,base) ;
subplot(4,1,4); plot(s3); title(‘3.给定软阈值去噪后的信号’); grid on;
%或者用以下代码先得到阈值thr,再用wthresh进行处理
thr=thselect(s,‘sqtwolog’); %MATLAB自带的自适应阈值选择函数
% 'rigrsure’无偏风险估计阈值; 'minimaxi’极大极小阈值; 'sqtwolog’固定阈值; 'heursure’启发式阈值
% 极大极小阈值和无偏风险估计阈值比较保守,当噪声在信号的高频段分布较少时,这两种阈值估计方法效果较好,可以将微弱的信号提取出来。
% 而固定阈值和启发式阈值去噪比较彻底,在去噪时显得更为有效,但是也容易把有用的信号误认为噪声去掉。
cd1soft=wthresh(cd1,‘s’,thr); %MATLAB自带的阈值处理函数,'s’表示软阈值处理,'h’表示硬阈值处理
cd2soft=wthresh(cd2,‘s’,thr);

%% 4.用阈值函数wden进行去噪处理
xdh=wden(X,‘sqtwolog’,‘h’,‘mln’,N,wname);
% X:含噪声信号;
% TPTR:阈值规则, 主要有’rigrsure’, ‘heursure’, ‘sqtwolog’, ‘minimaxi’;
% SORH:阈值方法, ‘s’ (soft阈值), ‘h’ (hard阈值);
% SCAL:阈值尺度的调整方法,主要有’one’, ’ sln’, ’ mln’;
% N:离散小波变换的级数, 如N=5; wname:小波名,如’db4’, ‘Sym8’

%% 三、小波包分解程序
clear all; clc
fs=1024; %采样频率
f1=100; %信号的第一个频率
f2=300; %信号第二个频率
t=0:1/fs:1;
s=sin(2pif1t)+sin(2pif2t); %生成混合信号

[tt]=wpdec(s,3,‘sym5’); %小波包分解,3代表分解3层,像图1那样,2dmey’使用meyr小波
plot(tt) %画小波包树图,可以用鼠标在上面点
wpviewcf(tt,1); %画出时间频率图

%% 四、小波包去噪函数
%ddencmp————用于获取去噪或压缩的默认阈值
%wpdencmp————使用小波包去噪或压缩
s=u1;
[thr,sorh,deepapp,crit]=ddencmp(‘den’,‘wp’,s);
[YY,wpt,perf0,perf1]=wpdencmp(s,sorh,3,‘sym6’,crit,thr,deepapp);
figure(2);
plot(YY);title(‘去噪信号(3层)’);

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值