📄 gamp.m
字号:
clc
clear
load signal_library;
%此程序用来分解样本信号
iterative_number = 10;
swatch_parameter = zeros(10,5*iterative_number);
for Num_swatch = 0:9
eval( ['bat = signal_swatch' int2str(Num_swatch) ';' ]);
%生成的原子个数
[a,N] = size(bat');
% 进行稀疏分解
signal = bat';
signal_reconstruct= ones(1,N);
% 稀疏分解基本参数设定
a_base = 2;
j_min = 0;
j_max = ceil(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;
%参数列表:a_base j_min j_max u_base p_min v_base k_min w_base i_min i_max
%重构信号与残差信号初始化
signal_reconstruct= (1/N)*sum(signal)*signal_reconstruct;
signal_r = signal - signal_reconstruct;
%确定在不同s的取值下,原子能量分布的范围,这是遗传算法中的一个重要参数
s_r=zeros(1,j_max+1);
for n=j_min:j_max
t = 0:N-1;
scale = a_base^n;
t = t/scale;
g = (1/sqrt(scale))*exp(-pi*t.*t);
g = g/sqrt(sum(g.*g));
number = 0;
for m=1:N
if abs(g(m))>0.03
number=number+1;
end
end
s_r(n+1)=number;
end
for n=1:iterative_number
% 遗传算法的子程序
[proj,scale,translation,freq,phase] = genetic_algorithm(signal_r,N,a_base,j_min,j_max,u_base,p_min,v_base,k_min,w_base,i_min,i_max,s_r);
swatch_parameter(Num_swatch+1,(n-1)*5+1:n*5) = [proj,scale,translation,freq,phase];
%利用选择的最优原子重构信号
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;
end
%将重构信号存入数据库中
s = ['re_signal_swatch' int2str(Num_swatch) '= signal_reconstruct;'];
eval(s);
end
%此程序用来分解测试信号
test_parameter = zeros(100,5*iterative_number);
for Num_test = 0:99
eval( ['bat = signal_test' int2str(Num_test) ';' ]);
%生成的原子个数
[a,N] = size(bat');
% 进行稀疏分解
signal = bat';
signal_reconstruct= ones(1,N);
% 稀疏分解基本参数设定
a_base = 2;
j_min = 0;
j_max = ceil(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;
%参数列表:a_base j_min j_max u_base p_min v_base k_min w_base i_min i_max
%重构信号与残差信号初始化
signal_reconstruct= (1/N)*sum(signal)*signal_reconstruct;
signal_r = signal - signal_reconstruct;
%确定在不同s的取值下,原子能量分布的范围,这是遗传算法中的一个重要参数
s_r=zeros(1,j_max+1);
for n=j_min:j_max
t = 0:N-1;
scale = a_base^n;
t = t/scale;
g = (1/sqrt(scale))*exp(-pi*t.*t);
g = g/sqrt(sum(g.*g));
number = 0;
for m=1:N
if abs(g(m))>0.03
number=number+1;
end
end
s_r(n+1)=number;
end
for n=1:iterative_number
% 遗传算法的子程序
[proj,scale,translation,freq,phase] = genetic_algorithm(signal_r,N,a_base,j_min,j_max,u_base,p_min,v_base,k_min,w_base,i_min,i_max,s_r);
test_parameter(Num_test+1,(n-1)*5+1:n*5) = [proj,scale,translation,freq,phase];
%利用选择的最优原子重构信号
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;
end
%将重构信号存入数据库中
s = ['re_signal_test' int2str(Num_test) '= signal_reconstruct;'];
eval(s);
end
%存储重构数据
save reconstruct_library
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -