clc;
clear;
T=0:0.001:0.3;
for i=[1:301]
A=0;
bat(1,i)=2*cos(100*pi*(T(1,i))+pi/3)+A*cos(100*pi*(T(1,i))-2*pi/3);
for j=[80:131]
A=1;
bat(1,j)=2*cos(100*pi*(T(1,j))+pi/3)+A*cos(100*pi*(T(1,j))-2*pi/3);
end
end
signal=bat;
figure
plot(T,signal);
iterative_number=200;
[a,N]=size(signal);
signal_reconstruct=zeros(1,N);
signal_r=signal;
%参数设定
a_base=2;
j_min=0;
j_max=log2(N);
u_base=1/2;
v_base=pi;
k_min=0;
k_max=2^(j+1);
w_base=pi/6;
i_min=0;
i_max=12;
gaborcanshu=zeros(iterative_number,4);%储存最佳原子的参数
gbest=zeros(iterative_number,N);%储存最佳原子
garxi=zeros(iterative_number,1);%储存最佳原子的系数
%wipe off the direct current vector%
signal_reconstruct=(1/N)*sum(signal);
signal_r=signal-signal_reconstruct;
%creat dictionary%
[atoms]=dic_a(signal_r,N,a_base,j_min,j_max,u_base,v_base,k_min,w_base,i_min,i_max);
error=0.2
for n=1:iterative_number
n
if (error>0.001)
[proj,scale,translation,freq,phase]=select_bestFFT(signal_r,N,a_base,j_min,j_max,u_base,v_base,k_min,w_base,i_min,i_max,atoms);
t=0:N-1;
t=(t-translation)/scale;
gaborcanshu(n,:)=[scale translation freq phase]
g1=(1/sqrt(scale))*exp(-pi*t.*t).*cos(freq*t+phase);
g=g1/sqrt(sum(g1.*g1));
signal_reconstruct=signal_reconstruct+proj*g;
gbest(n,:)=g;
signal_r=signal_r-proj*g;
error=norm(signal_reconstruct-bat)/norm(bat) ;
else
error
n
end
end
figure
subplot(221);
plot(T,signal);
title('原始信号');
subplot(222);
plot(T,g);
title('最佳原子');
subplot(223);
plot(T,signal_r);
title('残余信号');
subplot(224);
plot(T,signal_reconstruct);
title('重建信号');
n
error
评论2