matlab施密特正交化,浅谈压缩感知(十九):MP、OMP与施密特正交化
浅谈压缩感知(十九):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)
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)
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)
matlab施密特正交化,浅谈压缩感知(十九):MP、OMP与施密特正交化相关推荐
- 浅谈压缩感知(九):正交匹配追踪算法OMP
浅谈压缩感知(九):正交匹配追踪算法OMP 主要内容: OMP算法介绍 OMP的MATLAB实现 OMP中的数学知识 一.OMP算法介绍 来源:http://blog.csdn.net/scucj/a ...
- 压缩感知高斯测量矩阵matlab,浅谈压缩感知(十七):测量矩阵之有限等距常数RIC的计算...
有限等距常数(RestrictedIsometry Constant, RIC)是与有限等距性质(Restricted IsometryProperty, RIP)紧密结合在一起的一个参数. 一.RI ...
- 浅谈压缩感知(二十一):压缩感知重构算法之正交匹配追踪(OMP)
主要内容: OMP的算法流程 OMP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.OMP的算法流程 二.OMP的MATL ...
- 浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP)
浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP) 主要内容: gOMP的算法流程 gOMP的MATLAB实现 一维信号的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.g ...
- 浅谈压缩感知(十三):压缩感知与传统压缩
浅谈压缩感知(十三):压缩感知与传统压缩 导言: 压缩感知,顾名思义,就是感知压缩,这里包含两层意思,1.感知,即采集或采样,在传统的信号采集中,为了不失真,必须满足Nyquist采样定理,在上一篇博 ...
- 浅谈压缩感知(十六):感知矩阵之RIP
在压缩感知中,总是看到"矩阵满足RIP"之类的字眼,没错,这是一个压缩感知绕不开的术语,有限等距性质(Restricted Isometry Property, RIP). 注意: ...
- 浅谈压缩感知(三十二):压缩感知的常见测量矩阵
一.参考文献中常见的测量矩阵 [1]喻玲娟,谢晓春.压缩感知介绍[J].电视技术,2008,32(12):16-18. [2]李树涛,魏丹.压缩传感综述[J]. 自动化学报,2009,35(11):1 ...
- 浅谈压缩感知(三十一):压缩感知重构算法之定点连续法FPC
主要内容: FPC的算法流程 FPC的MATLAB实现 一维信号的实验与结果 基于凸优化的重构算法 基于凸优化的压缩感知重构算法. 约束的凸优化问题: 去约束的凸优化问题: 在压缩感知中,J函数和H函 ...
- 浅谈压缩感知(二):理论基础
主要内容: 信号的稀疏表示 编码测量(采样过程) 恢复算法(非线性) 一.信号与图像的稀疏表示 在DSP(数字信号处理)中,有个很重要的概念:变换域(某个线性空间:一组基函数支撑起来的空间) 一般而言 ...
最新文章
- TensorFlow全球下载量破1亿,Jeff Dean激动不已,但网友却不给面子
- 关于安装torch、torchvision包的问题
- Jmeter5.3(windows下)安装过程问题总结
- protect 继承_(转)public、protect、private继承方式 C++
- 多路开关模式的switch语句
- Spring : @EnableTransactionManagement注解
- 云计算学习笔记002---云计算的理解及介绍,google云计算平台实现原理
- 保存div与页面滚动条的位置
- Java DOM方式解析XML(模板)
- AIX6.1 TL04下安装Oracle补丁时报java程序正在被使用问题处理总结
- [00011]-[2015-08-26]-[00]-[Windows 程序设计 ---MFC 截屏---BMP格式 ---JPG格式]
- 百度地图KEY发布版SHA1和开发板SHA1如何获得
- 使用docker部署redis中间件
- JEECG框架的dictSelect下拉
- linux下文件怎么改名字,Linux文件名字批量修改步骤 Linux修改文件名的方法
- AndroidStudio导入Android源码
- 关键字和关键字优化(转)
- stm32l01系列单片机通过串口编程(ISP)
- 2003-2019年各省财政涉农支出金额
- 计算机应用人口普查,通用人口普查系统-Read.doc
热门文章
- 交换机三层转发原理详解_ATM交换机技术原理是什么 ATM交换机技术原理简介【详解】...
- soapUI模拟推送报文时提示:前言中不允许有内容
- Lambda表达式的使用前提
- 2021-2027全球与中国电动气控型呼吸机市场现状及未来发展趋势
- 代码随想录打卡第二天
- 字体大宝库:16款漂亮的免费英文手写字体推荐
- 字体大宝库:25款很好看的液晶数字字体下载
- 函数指针的使用精髓 -- 回调函数+qsort的内部实现
- 函数指针和回调函数的简单应用
- 怎么判断前轮左右的位置_如何判断左右车轮位置?老司机教你一招,学会后再也不会压线!...