参考链接:http://www.cnblogs.com/linkr/articles/2299707.html
小波去噪的方法主要分为三类
%%
% 一阶小波去噪分解
% reference : http://blog.csdn.net/cai2016/article/details/52982397
clc,clear,close all
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')
%% 图像小波去噪
% reference : http://blog.csdn.net/mingtian715/article/details/60873875
img = imread( 'lena.bmp' );
if size(img, 3) > 1
img = rgb2gray( img );
end
img = double( img ) ;
imgN = img + 50*randn( size(img) );
% 利用小波函数coif2对图像XX进行2层分解
[c, l] = wavedec2( imgN, 2, 'coif2' );
% 重构第2层图像的近似系数
A2 = wrcoef( 'a', c, l, 'coif2', 2 );
% 设置尺度向量
n = [1, 2];
% 设置阈值向量
p = [ 10.28, 24.08 ] ;
nc = wthcoef2( 'h', c, l, n, p, 's' );
X1=waverec2(nc,l,'coif2'); %图像的二维小波重构
figure
subplot(221),imshow(img, []), title('原始图像')
subplot(222),imshow( imgN, [] ), title('加噪声图像')
subplot(223),imshow( X1, [] ), title('去噪后图像')