信号小波系数的上下层之间有强相关性,而噪声没有这种相关性。相关性去噪的原理就是基于这种相关性的。
相关性去噪原理为比较每一层每一个位置的归一化的相关系数,从相关性的大小判断是信号还是噪声控制的点。
具体步骤为:
1.给定分解层数M,选取小波函数,计算带噪信号的每一层的小波系数
2.比较和,判断
若,则认为大相关量对应信号的特征,取=,置=0;
若,则认为点K处的小波系数由噪声控制,保留,置=0
3.在每一个尺度上重新计算
4.重复上面的过程
5.所取 中各对应由信号控制的点,而中点全部对应于噪声。
相关性去噪的方法有它的缺点:它依赖于小波系数,而小波系数无平移不变性,容易有错误。一种改进的方法是区域相关去噪,也就是在一个区域内进行相关性度量。这两种去噪方法的原理是相通的。
function f_n = xden(f,n,wf)
%相关性去噪法
%输入参数:f为带噪信号,n为分解层数,wf为小波函数名称
%返回函数f_n为去噪信号
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);
[swa,swd]=swt(f,n,Lo_D,Hi_D);%swd是细节系数,swa是近似系数
ss =swd;
s1=swd;
T=zeros(size(ss));
%先把系数处理矩阵设置为全0
%在1:n-1分解层次上对高频系数处理,最后一层无法求相关系数,所以不作处理
for j=1:n-1
cw=s1(j,:).*s1(j+1,:);%定义相关系数为相邻两层的乘积
pw=sum(abs(swd(j,:)).^2);%计算小波能量
pcw=sum(abs(cw).^2);%计算相关系数能量
w_n=cw.*((pw/pcw)^0.5);%归一化
acw=abs(w_n);
aw=abs(swd(j,:));
ss=swd(j,:).*(acw>aw);%(acw>aw)返回0或者1,1为信号,0为噪声
ss1=(ss~=0);%将选出的点赋给系数处理矩阵相应位置
end
mask_max=ones(1,length(T));
T=[T((1:(n-1)),:);mask_max];%最后一层系数处理矩阵全置1
s1=s1.*T;
f_n=iswt(swa,s1,wf);
end
load sumsin;%读入带噪信号
f=[sumsin zeros(1,24)];%补零使得信号变成2的幂次,这里是信号长度变为1024
lev=4;%分解层数
wf='db3';%采用的小波函数
s=xden(f,lev,wf);%相关性去噪算法
%计算psnr值,mse值
P=psnr(f,s);
m=mse(f,s);
figure,
plot(s);grid on;
xlabel('t'),ylabel('s(t)')
————————————————
版权声明:本文为CSDN博主「乐正倩彦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42261630/article/details/118896167