小波分解

一维离散小波的单层分解

clear all;
close all;
load noissin.mat;
[ca,cd]=dwt(noissin,'sym4');
%%ca是近似系数(低频部分),cd是细节系数(高频部分),采用的小波是sym4
figure;
subplot(311);
plot(noissin);
title('原始信号');
subplot(312);
plot(ca);
title('近似系数');/去噪后的信号
subplot(313);
plot(cd);
title('细节系数');//噪声
set(gcf,'position',[60,60,500,300]);%%显示格式

一维小波的多层分解

clear all;
close all;
load noissin.mat;
x=noissin;
[C,L]=wavedec(x,3,'db4');   %3层分解,使用db4小波

[cd1,cd2,cd3]=detcoef(C,L,[1,2,3]); %使用detcoef函数获取细节系数

ca3=appcoef(C,L,'db4',3); %使用appcoef函数获取近似系数*****

figure;
subplot(511);
plot(x);
ylabel('x');

subplot(512);
plot(1:L(1),ca3);//低频==趋势
ylabel('ca3');

subplot(513);
plot(1:L(2),cd3);
ylabel('cd3');

subplot(514);
plot(1:L(3),cd2);
ylabel('cd2');

subplot(515);
plot(1:L(4),cd1);
ylabel('cd1');

set(gcf,'position',[30,30,600,500])

https://www.bilibili.com/video/av87489685?from=search&seid=14914681410556431964

小波去噪的主要种类

小波去噪的方法主要分为三类:

1.小波变换模极大值去噪法:根据信号和噪声在小波在小波变换各尺度上的不同传播特性,剔除由噪声产生的模极大值点,保留信号对应的模极大值点,然后利用所余模极大值点重构小波系数,进而恢复信号。

2.小波系数相关性去噪法:对含噪信号作小波变换之后,计算相邻尺度间小波系数的相关性,根据相关性的大小区别小波系数的类型,从而进行取舍,然后直接重构信号。

3.小波变换阈值去噪法:信号对应的小波系数包含有信号的重要信息,其幅值比较大,但是数目较少,而噪声对应的小波系数是一致分布的,个数较多,但是幅值较小。通过这种方法进行去噪的方法比较经典,阈值的选取有软、硬阈值等,这种方法已经做得相当全了,主要步骤有三步

  • 计算含噪声信号的小波变换,选择合适的小波基和小波分解层数J,将图像进行小波分解,得到相应的小波分解系数。
  • 对分解后的高频系数进行阈值量化,对于从1到J的每一层,选择一个适当的阈值和合适的阈值函数,将分解得到的高频系数进行阈值量化,得到估计小波系数。
  • 进行小波逆变换,根据小波分解后的第J层的低频系数(尺度系数)和经过阈值量化处理的各层高频系数(小波系数)。再利用重构算法进行小波重构,得到去噪后信号。
t = -10:.1:10;
% 干净的信号
ori_sig = sin(t);
% 加上噪声之后的信号
signal = ori_sig + 0.2 * randn( size(t) );
% 信号长度

% 1层小波分解
sigLen = length( signal );
[cA1, cD1] = dwt( signal, 'db1' );
% 系数构建
% A1 是信号的近似系数
% D1 是信号的细节系数
% 在这里 A1就可以近似地被视为信号去噪后结果,而D1可以被视为噪声信号
A1 = idwt( cA1, [], 'db1', sigLen );
D1 = idwt( cD1, [], 'db1', sigLen );
% 用近似系数和细节系数进行重建
A0 = idwt( cA1, cD1, 'db1', sigLen );
% 信号误差
sigErr = signal - A0;

figure
subplot(231),plot(t, ori_sig),title('原始信号')
subplot(232),plot(t, signal),title('加上高斯噪声的信号信号')
subplot(233),plot(t, A1),title('近似信号系数')
subplot(234),plot(t, D1),title('细节系数')
subplot(235),plot(t, A0),title('恢复信号')
subplot(236),plot(t, sigErr),title('绝对误差')

%% wnoise去噪分解
% reference : http://blog.sina.com.cn/s/blog_506122ec0100817o.html
sqrt_snr = 3;
[x, xn] = wnoise( 3, 11, sqrt_snr );

lev = 5;
% 利用sym8小波信号对信号进行分解,在第5层上,利用启发式sure阈值选择法对信号去噪
xdOne = wden( xn, 'heursure', 's', 'one', lev, 'sym8' );
% 利用sym8对信号分解,但是使用软sure阈值选择选择算法对信号去噪
xdSln = wden(x, 'heursure', 's', 'sln', lev, 'sym8');
% sym8小波对信号分解条件,但用固定域值选择算法去噪
xdSqt = wden( x, 'sqtwolog', 's', 'sln', lev, 'sym8' );

figure
subplot(231),plot(x), title('original test fcn')
subplot(232),plot(xn), title('test fcn with noise')
subplot(233),plot(xdOne), title('one denoised fcn')
subplot(234),plot(xdSln), title('sln denoised fcn')
subplot(235),plot(xdSqt), title('universal threshold denoised fcn')

https://blog.csdn.net/u012526003/article/details/77822036?ops_request_misc=%7B%22request%5Fid%22%3A%22158320410919724846449459%22%2C%22scm%22%3A%2220140713.130056874…%22%7D&request_id=158320410919724846449459&biz_id=0&utm_source=distribute.pc_search_result.none-task

你可能感兴趣的:(数据处理)