matlab运行程序:
t=linspace(0,2*pi,1024);
f1=sin(1/2*t).*cos(15*t);
subplot(4,2,1);plot(f1); title('原始信号'); axis([1,1024,-1,1]);
l=length(f1);
noise=2*rand(1,l)-1;
f2=0.5*noise+f1;
snr=SNR_singlech(f1,f2) %信噪比
subplot(4,2,2);plot(f2);title('含噪信号'); axis([1,1024,-1,1]);
%使用小波函数db6对信号进行4层分解
[c,l]=wavedec(f2,4,'db7');
%估计尺度1的噪声标准偏差
sigma=wnoisest(c,l,1)
alpha=2;
%获取去噪过程中的阈值
thr=wbmpen(c,l,sigma,alpha);
keepapp=1;
%对信号进行去噪
f3=wdencmp('gbl',c,l,'db7',4,thr,'s',keepapp);
subplot(4,2,3);plot(f3);title('去噪信号'); axis([1,1024,-1,1]);
snr=SNR_singlech(f1,f3) %信噪比
f4=wdencmp('gbl',c,l,'db7',4,thr,'h',keepapp);
subplot(4,2,4);plot(f4);title('去噪信号'); axis([1,1024,-1,1]);
snr=SNR_singlech(f1,f4) %信噪比
信噪比函数SNR_singlech(I,In)
function snr=SNR_singlech(I,In)
% 计算信噪比函数
% I :original signal
% In:noisy signal(ie. original signal + noise signal)
snr=0;
Ps=sum(sum((I-mean(mean(I))).^2));%signal power
Pn=sum(sum((I-In).^2)); %noise power
snr=10*log10(Ps/Pn);
运行结果
snr =
4.7471
sigma =
0.3088
snr =
17.4639
snr =
17.4639
2013-5-7 12:24 上传
波形