高晓洁
2011-11-25, 12:21
信号:
A=2;
f_signal=20;
fs=1000;
N=64;
snr=10;
t=(0:N-1)/fs;
x=A*cos(2*pi*f_signal*t);
signal=awgn(x,snr,'measured');
主程序:
tic
xinhao1;
%%%%%%%%%%%%%%%%%%%%%%%分解参数的设定%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
interative_number=30;
[a,N]=size(signal);
signal_reconstruct=zeros(1,N);
signal_r=signal;
a_base=1/2;
j_min=0;
j_max=log2(N);
u_base=1/2;
p_min=0;
v_base=pi;
k_min=0;
w_base=pi/6;
i_min=0;
i_max=12;
M=52*(N*log2(N)+N-1);
%%%%%%%%%%%%%分解的程序%%%%%%%%
for n=1:interative_number
[proj,scale,translation,freq,phase]=select_best_gabor(signal_r,N,a_base,j_min,j_max,u_base,p_min,v_base,k_min,w_base,i_min,i_max);%用一个子程序来实现最佳原子参数的选取
t=0:N-1;
t=(t-translation)/scale;
g=(1/sqrt(scale))*exp(-pi*t.*t).*cos(freq*t+phase);%原子
g=g/sqrt(sum(g.*g));%归一化最佳原子
signal_reconstruct=signal_reconstruct+proj*g;%重建信号
signal_r=signal_r-proj*g;%残余信号
figure(1)
subplot(5,1,1);plot(x);
subplot(5,1,2);plot(signal);
subplot(5,1,3);plot(g);
subplot(5,1,4);plot(signal_reconstruct);
subplot(5,1,5);plot(signal_r);
%output('Press a key')
%pause
end
mse=sqrt(sum((signal-signal_reconstruct).^2)/N)
toc
子函数:
function [proj,scale,translation,freq,phase]=select_best_gabor(signal_r,N,a_base,j_min,j_max,u_base,p_min,v_base,k_min,w_base,i_min,i_max);
proj_trans=0;
proj=0;
size_dic=0;
for j=j_min:j_max
for p=p_min:N*2^(-j+1)
for k=k_min:2^(j+1)
for i=i_min:i_max
size_dic=size_dic+1;
s=a_base^j;
u=p*s*u_base;
v=k*(1/s)*v_base;
w=i*u_base;
t=0:N-1;
t=(t-u)/s;
g=(1/sqrt(s))*exp(-pi*t.*t).*cos(v*t+w);
g=g/sqrt(sum(g.*g));
proj_trans=sum(signal_r.*g);%做内积
if abs(proj_trans)>abs(proj) %选取内积的模最大的原子的参数做为最佳原子的参数
proj=proj_trans;
scale=s;
translation=u;
freq=v;
phase=w;
end
end
end
end
end
程序能够运行,但就是结果并没有达到降噪的结果,不知道问题出在哪 里,请大家帮忙看一下,很重要的程序,帮帮忙了
A=2;
f_signal=20;
fs=1000;
N=64;
snr=10;
t=(0:N-1)/fs;
x=A*cos(2*pi*f_signal*t);
signal=awgn(x,snr,'measured');
主程序:
tic
xinhao1;
%%%%%%%%%%%%%%%%%%%%%%%分解参数的设定%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
interative_number=30;
[a,N]=size(signal);
signal_reconstruct=zeros(1,N);
signal_r=signal;
a_base=1/2;
j_min=0;
j_max=log2(N);
u_base=1/2;
p_min=0;
v_base=pi;
k_min=0;
w_base=pi/6;
i_min=0;
i_max=12;
M=52*(N*log2(N)+N-1);
%%%%%%%%%%%%%分解的程序%%%%%%%%
for n=1:interative_number
[proj,scale,translation,freq,phase]=select_best_gabor(signal_r,N,a_base,j_min,j_max,u_base,p_min,v_base,k_min,w_base,i_min,i_max);%用一个子程序来实现最佳原子参数的选取
t=0:N-1;
t=(t-translation)/scale;
g=(1/sqrt(scale))*exp(-pi*t.*t).*cos(freq*t+phase);%原子
g=g/sqrt(sum(g.*g));%归一化最佳原子
signal_reconstruct=signal_reconstruct+proj*g;%重建信号
signal_r=signal_r-proj*g;%残余信号
figure(1)
subplot(5,1,1);plot(x);
subplot(5,1,2);plot(signal);
subplot(5,1,3);plot(g);
subplot(5,1,4);plot(signal_reconstruct);
subplot(5,1,5);plot(signal_r);
%output('Press a key')
%pause
end
mse=sqrt(sum((signal-signal_reconstruct).^2)/N)
toc
子函数:
function [proj,scale,translation,freq,phase]=select_best_gabor(signal_r,N,a_base,j_min,j_max,u_base,p_min,v_base,k_min,w_base,i_min,i_max);
proj_trans=0;
proj=0;
size_dic=0;
for j=j_min:j_max
for p=p_min:N*2^(-j+1)
for k=k_min:2^(j+1)
for i=i_min:i_max
size_dic=size_dic+1;
s=a_base^j;
u=p*s*u_base;
v=k*(1/s)*v_base;
w=i*u_base;
t=0:N-1;
t=(t-u)/s;
g=(1/sqrt(s))*exp(-pi*t.*t).*cos(v*t+w);
g=g/sqrt(sum(g.*g));
proj_trans=sum(signal_r.*g);%做内积
if abs(proj_trans)>abs(proj) %选取内积的模最大的原子的参数做为最佳原子的参数
proj=proj_trans;
scale=s;
translation=u;
freq=v;
phase=w;
end
end
end
end
end
程序能够运行,但就是结果并没有达到降噪的结果,不知道问题出在哪 里,请大家帮忙看一下,很重要的程序,帮帮忙了