% % MATLAB中用 wnoise函数 测试去噪算法
% % wavelet noise
% sqrt_snr=3 % 噪声方差
% init=128%231434
% [x,xn]=wnoise(3,11,sqrt_snr,init)
% % X是原始信号,XN为加噪后的信号
% % 产生一个长为2的11次幂个点,包含高斯白噪声的正弦信号,噪声的标准差为3
%
% % [X,XN] = WNOISE(FUN,N,SQRT_SNR,INIT) returns previous
% % vectors X and XN, but the generator seed is set to INIT
% % value. (被设置为INIT的值)
% % FUN = 1 or FUN = 'blocks'
% % FUN = 2 or FUN = 'bumps'
% % FUN = 3 or FUN = 'heavy sine'
% % FUN = 4 or FUN = 'doppler'
% % FUN = 5 or FUN = 'quadchirp'
% % FUN = 6 or FUN = 'mishmash'
%
% 7位巴克码,信号载频为4kHz,码宽0.5毫妙,采样频率250kHz
f=1
t=0:2*pi/499:2*pi;
cp=[];sp=[];
mod=[];mod1=[];bit=[];
code=[1 1 1 -1 -1 1 -1] % 7位巴克码
code1=[0 0 0 code 0 0 0 0 0 0 0 0 0 0 0 0]
% g=code
g=[code1 code1 code1 code1 code1 code1 code1 code1 code1]
for n=1:length(g);
switch g(n)
case 1 %码元1对应180°相位
die=-ones(1,500); %码元宽度500
se=-ones(1,500);
case -1 %码元-1对应0°相位
die=ones(1,500);
se=ones(1,500);
case 0 %0对应无信号
die=zeros(1,500);
se=zeros(1,500);
end
c=sin(2*f*t); %一个码元宽度内有2个码元
cp=[cp die];
mod=[mod c];
bit=[bit se];
end
bpsk=cp.*mod;
x=bpsk
% xn=x
xn=x+1.5*randn(1,length(bpsk)) %信噪比为4
% x=0.2239*bpsk
% xn=x+randn(1,length(bpsk)) %信噪比为:-13dB
figure(1)
subplot(2,1,1),plot(x)
title('original signal')
subplot(2,1,2),plot(xn)
title('noised signal')
lev=5
xd=wden(xn,'heursure','s','one',lev,'sym8')
% [XD,CXD,LXD]=WDEN(X,TPRT,SORH,SCAL,N,'wname')
% WEDN 利用小波对一维信号进行自动降噪,就是对小波系数阈值比较后,返回
% 输入信号X降噪后的处理信号XD,以及XD的小波分解结构{CXD,LXD}
% TPTR 是一个阈值选择规则:
% 'rigrsure' use principle of Stein's Unbiased Risk. Stein无偏似然估计阈值
% 'heursure' is an heuristic variant of the first option. 启发式阈值
% 'sqtwolog' for universal threshold sqrt(2*log(.)). 固定阈值
% 'minimaxi' for minimax thresholding. 最大最小准则阈值去噪
% (see THSELECT for more details).
% SORH ('s' or 'h') is for soft or hard thresholding
% (see WTHRESH for more details).
% SCAL=‘one’ for no rescaling
% SCAL=‘sln’ for 对第一层系数的层噪声分别进行估计和调整
% SCAL=‘mln’ for 对各层系数的层噪声分别进行估计和调整
% 'wname'='sym8'
figure(2)
subplot(2,1,1),plot(xd)
title('One de-noised signal(启发式阈值小波去噪)')
xlabel('(a)')
% 利用'sym8'小波对信号分解,再分解的第5层上,利用'heuristic'(启发式阈值选择法)
% 对信号去噪
xd=wden(xn,'heursure','s','sln',lev,'sym8')
% 根据第一层小波分解的噪声方差调整阈值
subplot(2,1,2),plot(xd)
title('Sln de-noised signal')
xlabel('(b)根据第一层小波分解的噪声方差调整阈值')
xd=wden(xn,'sqtwolog','s','sln',lev,'sym8')
% 固定阈值法去噪
figure(3)
subplot(2,1,1),plot(xd)
title('Sqtwolog de-noised signa(固定阈值法小波去噪)')
xlabel('(a)')
[c,l]=wavedec(xn,lev,'sym8')
% [C,L]=WAVEDEC(X,N,'wname') 按照一定的顺序存储信号小波分解的近似分量和
% 细节分量的系数,各近似分量和细节分量系数的长度
% xd=wden(c,l,'minimaxi','s','sln',lev,'sym8') 选择极大极小原则定阈值
subplot(2,1,2),plot(xd)
title('CL de-noised signal') % 利用小波分解的结构[C,L]对信号进行去噪处理
xlabel('(b)')
% [f1,f2]=wfilters('sym8','d')
% figure(4)
% plot(xd)
%============================================================
% Wdencmp函数
% [xc,cxc,lxc,perf0,perfl2]=wdencmp('gb1',x,'sym4',2,thr,sorh,keepapp)
% 是使用小波进行一维或二维小波压缩或降噪的函数,前面的语句是对于输入的一维或
% 二维信号X,使用全局正阈值THR,由小波系数阈值得到降噪或压缩后的信号XC
% 附加的输出变量[cxc,lxc]是XC的小波分解结构
% [perf0,perfl2]是恢复和压缩的L2范数百分比
%使用小波'sym4'执行小波分解到第N=2层。Sorh是软阈值或硬阈值。
% 若 keepapp=1,低频系数不能进行阈值处理。