📄 wave.m
字号:
%一段小波分解的程序
load leleccum;%载入信号,leleccum为4320个元素
s=leleccum(1:3920);%设置变量
ls=length(s);
%对信号进行单步小波分解,采用db1小波进行单步分解,其中dwt函数是专门用来进行单步小波分解的
[ca1,cd1]=dwt(s,'db1');
%这样就得到了信号在尺度为1时小波分解的近似部分ca1和细节部分cd1,这两个都是系数,而不是信号
%从分解系数构件近似部分和细节部分。为了从系数ca1、cd1构件近似部分和细节部分a1,d1输入
a1=upcoef('a',ca1,'db1',1,ls);
d1=upcoef('d',cd1,'db1',1,ls);
%显示结果
subplot(1,4,1);plot(a1);title('近似部分a1')
subplot(1,4,2);plot(d1);title('细节部分a1')
subplot(1,4,3);plot(s);title('原始信号')
%逆小波变换重构信号,逆变换函数执行如下,其中idwt是专门用来进行单步小波重建的
a0=idwt(ca1,cd1,'db1',ls);
subplot(1,4,4);plot(a0);title('小波重构')
%
%上面对信号做的一次分解,还需对信号进行多尺度的小波分解,为了完成信号在尺度3下的db1小波分析,输入
[c,L]=wavedec(s,3,'db1');
%其中wavedec是专门进行多尺度分解的函数,上述命令行中将尺度水平为3下的所有分解单元(即第三级近似和第一、二、三级细节)的系数都保存在了矢量c中
%,矢量l是分别对应每个系数单元的长度;
%提取近似部分和细节部分系数。为了从c中提取第三级近似部分系数,输入
ca3=appcoef(c,L,'db3',3);
%为了从c中提取尺度为3,2,1的细节部分系数,输入
cd3=detcoef(c,L,3);
cd2=detcoef(c,L,2);
cd1=detcoef(c,L,1);
%重建尺度3水平下的近似部分系数。为了从c中重建尺度为3时的近似部分系数,输入
a3=wrcoef('a',c,L,'db1',3);%其中参数‘a’表示是近似(approximation)部分
%重建尺度为1,2,3时的细节系数
d1=wrcoef('d',c,L,'db1',1);
d2=wrcoef('d',c,L,'db1',2);
d3=wrcoef('d',c,L,'db1',3);%其中参数‘d’表示是细节(deail)部分
%显示多尺度分解结果
subplot(2,2,1);plot(a3);title('approximation a3')
subplot(2,2,2);plot(d1);title('detail d1')
subplot(2,2,3);plot(d2);title('detail d2')
subplot(2,2,4);plot(d3);title('detail d3')
%由三级分解重构原信号,
a0=waverec(c,L,'db1');
%以上是进行了小波的多尺度分解和重构
%下面进行的是小波的阈值去噪
%为了比较原信号与小波分解的近似部分a3之间的差异,先绘制下图
subplot(2,1,1);plot(s);title('original');axis off
subplot(2,1,2);plot(a3);title('level3 approximation');axis off
%为了去除噪声,利用ddencmp函数获取去噪的默认参数,利用wdencmp进行去噪操作
[thr,sorh,keepapp]=ddencmp('den','wv',s);
%其中thr为获得的默认阈值,sorh返回值为s(软阈值)或h(硬阈值),keerapp是是否保存近似系数,‘den’表示降噪操作,‘wv’表示小波变
%换,s为原信号
clean=wdencmp('gbl',c,L,'db1',3,thr,sorh,keepapp);
%此时获得的信号clean为去噪后的信号
%显示原始信号和去噪信号
subplot(2,1,1);plot(s);title('原始信号')
subplot(2,1,2);plot(clean);title('去噪信号')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -