当前位置:首页 > 芯闻号 > 充电吧
[导读]浅谈压缩感知(十九):MP、OMP与施密特正交化关于MP、OMP的相关算法与收敛证明,这里仅简单陈述算法流程及二者的不同之处。主要内容:MP的算法流程及其MATLAB实现OMP的算法流程以及MATLA

浅谈压缩感知(十九):MP、OMP与施密特正交化

关于MP、OMP的相关算法与收敛证明,这里仅简单陈述算法流程及二者的不同之处。

主要内容:

MP的算法流程及其MATLAB实现OMP的算法流程以及MATLAB实现MP与OMP的区别施密特正交化与OMP的关系一、MP(匹配追踪)的算法流程:

二、MP的MATLAB实现:

% MP:匹配追踪算法
% dictionary: 超完备字典
% x: 待表示信号
% M = 4; N = 10;
% Phi = randn(M,N); % 字典
% for nn = 1:N
%     Phi(:,nn) = Phi(:,nn)/norm(Phi(:,nn));
% end
% b = randn(M,1); % 信号
function x = MP(dictionary,x,iter)
[M,N] = size(dictionary);
residual = zeros(M,iter); %残差矩阵,保存每次迭代后的残差
residual(:,1) = x; %初始化残差为x
L = size(residual,2); %得到残差矩阵的列
pos_num = zeros(1,L); %用来保存每次选择的列序号
resi_norm = zeros(1,L); %用来保存每次迭代后的残差的2范数
resi_norm(1) = norm(x); %因为前面已初始化残差为x
iter_out = 1e-3;
iter_count = 0;

for mm = 1:iter
    %迭代退出条件
    if resi_norm(mm) < iter_out
        break;
    end
    %求出dictionary每列与上次残差的内积
    scalarproducts = dictionary'*residual(:,mm);
     %找到内积中最大的列及其内积值
    [val,pos] = max(abs(scalarproducts));
    %更新残差
    residual(:,mm+1) = residual(:,mm) - scalarproducts(pos)*dictionary(:,pos);
    %计算残差的2范数(平方和再开根号)
    resi_norm(mm+1) = norm(residual(:,mm+1));
     %保存选择的列序号
    pos_num(mm) = pos;
    iter_count = iter_count + 1;
end
%绘出残差的2范数曲线
resi_norm = resi_norm(1:iter_count+1);
plot(resi_norm);grid;
%显示选择的字典原子
pos_num = pos_num(1:iter_count);
disp(pos_num);
%稀疏系数(稀疏表示)
dict = dictionary(:,pos_num);
y_vec = (dict'*dict)^(-1)*dict'*x;
disp(y_vec);
figure;plot(y_vec);

三、OMP(正交匹配追踪)的算法流程:

四、OMP的MATLAB实现:

% MP:匹配追踪算法
% dictionary: 超完备字典
% x: 待表示信号
% M = 4; N = 10;
% Phi = randn(M,N); % 字典
% for nn = 1:N
%     Phi(:,nn) = Phi(:,nn)/norm(Phi(:,nn));
% end
% b = randn(M,1); % 信号
function x = OMP(dictionary,x,iter)
[M,N] = size(dictionary);
residual = zeros(M,iter); %残差矩阵,保存每次迭代后的残差
residual(:,1) = x; %初始化残差为x
L = size(residual,2); %得到残差矩阵的列
pos_num = zeros(1,L); %用来保存每次选择的列序号
resi_norm = zeros(1,L); %用来保存每次迭代后的残差的2范数
resi_norm(1) = norm(x); %因为前面已初始化残差为x
iter_out = 1e-3;
iter_count = 0;
aug_mat = [];

for mm = 1:iter
    %迭代退出条件
    if resi_norm(mm) < iter_out
        break;
    end
    %求出dictionary每列与上次残差的内积
    scalarproducts = dictionary'*residual(:,mm);
    %找到内积中最大的列及其内积值
    [val,pos] = max(abs(scalarproducts));
    %最小二乘的增广矩阵
    aug_mat = [aug_mat dictionary(:,pos)];
    %最小二乘投影
    proj_y = aug_mat*(aug_mat'*aug_mat)^(-1)*aug_mat'*x;
    %更新残差
    residual(:,mm+1) = x - proj_y;
    %计算残差的2范数(平方和再开根号)
    resi_norm(mm+1) = norm(residual(:,mm+1));
     %保存选择的列序号
    pos_num(mm) = pos;
    iter_count = iter_count + 1;
end
%绘出残差的2范数曲线
resi_norm = resi_norm(1:iter_count+1);
plot(resi_norm);grid;
%显示选择的字典原子
pos_num = pos_num(1:iter_count);
disp(pos_num);
%稀疏系数
dict = dictionary(:,pos_num);
y_vec = (dict'*dict)^(-1)*dict'*x;
disp(y_vec);
figure;plot(y_vec);

五、MP与OMP的区别:

OMP与MP的不同根本在于残差更新过程:OMP减去的Pem是em在所有被选择过的原子组成的矩阵Φt所张成空间上的正交投影,而MP减去的Pem是em在本次被选择的原子φm所张成空间上的正交投影。基于此,OMP可以保证已经选择过的原子不会再被选择。

六、施密特(Schimidt)正交化与OMP 1、施密特(Schimidt)正交化的过程:

上面的的[x,y]表示向量内积,[x,y]=xTy=yTx=[x,y]。施密特正交化公式中的br实际上可写为:

分子之所以可以这么变化是由于[x,y]实际上为一个数,因此[x,y]x=x[x,y]= xxTy。

2、OMP与施密特(Schimidt)正交化的关系:

结论:OMP分解过程,实际上是将所选原子依次进行Schimidt正交化,然后将待分解信号减去在正交化后的原子上各自的分量即可得残差。其实(式3)求残差的过程也是在进行施密特正交化。

3、验证OMP残差求解过程与Schmidt正交化的关系

% 验证OMP残差求解过程与Schmidt正交化的关系
%
clc;clear;close all;
M = 4; N = 10;
Phi = randn(M,N); % 字典
for nn = 1:N
    Phi(:,nn) = Phi(:,nn)/norm(Phi(:,nn));
end
b = randn(M,1); % 信号
res0 = b; % 初始化残差为待稀疏信号b
% OMP
% 选择字典第一个原子
c1 = Phi'* res0; % 求矩阵Phi各列与b的内积
[val1,pos1] = max(abs(c1)); % 找到内积中最大的列及其内积值
phit = [Phi(:,pos1)]; % 由所有选出的列组合的矩阵
Pphi = phit*(phit'*phit)^(-1)*phit'; % 正交投影变换矩阵
omp_res1 = res0 - Pphi*res0; % OMP用上一次残差减去残差在phit列空间的正交投影
omp_resb = b - Pphi*b; % OMP用待稀疏信号b减去b在phit列空间的正交投影
% Schimidt
x = Phi(:,pos1); % Schimidt正交化第一个向量
Px = x*(x'*x)^(-1)*x';
smt_res1 = res0 - Px*b; % 实际上是b - Px*b
% test 
norm(omp_res1-omp_resb)
norm(omp_resb-smt_res1)

% OMP
% 选择字典第二列
c2 = Phi' * omp_res1;
[val2,pos2] = max(abs(c2));
phit = [Phi(:,pos1) Phi(:,pos2)]; 
Pphi = phit*(phit'*phit)^(-1)*phit';
omp_res2 = omp_res1 - Pphi*omp_res1;
omp_resb = b - Pphi*b;
% Schimidt
y = Phi(:,pos2) - Px*Phi(:,pos2); % Schimidt正交化第二个向量
Py = y*(y'*y)^(-1)*y';
smt_res2 = smt_res1 - Py*b; % 实际上是b - Px*b - Py*b,上一次残差减去b在第2列正交化所得z上的投影
% test
norm(omp_res2-omp_resb)
norm(omp_resb-smt_res2)

% OMP
% 选择字典第三列
c3 = Phi' * omp_res2;
[val3,pos3] = max(abs(c3));
phit = [Phi(:,pos1) Phi(:,pos2) Phi(:,pos3)];
Pphi = phit*(phit'*phit)^(-1)*phit';
omp_res3 = omp_res2 - Pphi*omp_res2; 
omp_resb = b - Pphi*b;
% Schimidt
z = Phi(:,pos3) - Px*Phi(:,pos3) - Py*Phi(:,pos3);  % Schimidt正交化第三个向量
Pz = z*(z'*z)^(-1)*z';
smt_res3 = smt_res2 - Pz*b; % 实际上是b - Px*b - Py*b - Pz*b,上一次残差减去b在第3列正交化所得z上的投影
% test
norm(omp_res3-omp_resb)
norm(omp_resb-smt_res3)

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭