MP算法

article/2025/10/23 0:40:13

MP算法

MP算法是一种贪心算法(greedy),每次迭代选取与当前样本残差最接近的原子,直至残差满足一定条件。


求解方法


首先解决两个问题,怎么定义“最接近原子”,怎么计算残差?

选择最接近残差的原子:MP里定义用向量内积原子与残差的距离,我们用R表示残差,di表示原子,则:

Max[Dist(R,di)]=max[<R,di>];

残差更新:R=R-<R,di>I;继续选择下一个,直至收敛;


需要注意的是,MP算法中要求字典原子||di||=1,上面的公式才成立。

我们用二维空间上的向量来表示,用如下的图来表述上面的过程:


上图中d1,d2,d3表示归一化的原子,红色向量r表示当前残差;

进过内积计算,<r,d3>最大,于是r分解为d3方向以及垂直于d3方向的两个向量(<r,d3>d3及r-<r,d3>d3),把d3方向的分量(<r,d3>d3)加入到已经求得的重构项中,那么绿色向量(r-<r,d3>d3)变为新的残差。

再一轮迭代得到如下:


R往d1方向投影分解,绿色向量成为新的残差。

 

具体算法:

 


收敛性

从上面的向量图我们可以清楚地看出,k+1的残差Rk+1是k步残差Rk的分量。根据直角三角形斜边大于直角边,|Rk+1|<=|Rk|,则算法收敛。


注意事项:

1.上面也讲过,字典的原子是归一化的,也就是||di||=1,因为我们选取max<R,di>时,如果di长度不统一,不能得出最好的投影。

2.如果我们的字典只有两个向量d1,d2,那么MP算法会在这两个向量间交叉迭代投影,也就是f=a1d1+a2d2+a3d1+a4d2+…..;也就是之前投影过的原子方向,之后还有可能投影。换句话说,MP的方向选择不是最优的,是次优的。

如下图:


这也是其改进版本OMP要改进的地方。


下面采用MP算法进行信号重构,也可以进一步用于图像重构

%基于MP算法
clc;
clear;%观测向量y的长度M=80,即采样率M/N=0.3N=256;
K=15;                        %信号稀疏度为15
M=80;                        %观测向量y的长度
x = zeros(N,1);
q = randperm(N);
x(q(1:K)) =randn(K,1);        %原始信号%构造高斯测量矩阵,用以随机采样Phi = randn(M,N)*sqrt(1/M); 
for i = 1:N
Phi(:,i) = Phi(:,i)/norm(Phi(:,i));
end
y=Phi*x ;                                  %获得线性测量%用MP算法开始迭代重构
m=2*K;                                      %总的迭代次数
r_n=y;                                      % 残差值初始值
x_find=zeros(N,1);                          %x_find为MP算法恢复的信号for times=1:m
for col=1:N 
neiji(col)=Phi(:,col)'*r_n;                  %计算当前残差和感知矩阵每一列的内积
end
[val,pos]=max(abs(neiji));                   %找出内积中绝对值最大的元素和它的对应的感知矩阵的列pos
x_find(pos)=x_find(pos)+neiji(pos);          %计算新的近似x_find
r_n=r_n-neiji(pos)*Phi(:,pos);               %更新残差 
endsubplot(3,1,1);plot(x);title('target');
subplot(3,1,2);plot(x_find);title('reconstruct');
subplot(3,1,3);plot(r_n);title('残差');



http://chatgpt.dhexx.cn/article/APcqT6t2.shtml

相关文章

MP算法和OMP算法及其思想

主要介绍MP(Matching Pursuits)算法和OMP(Orthogonal Matching Pursuit)算法[1]&#xff0c;这两个算法虽然在90年代初就提出来了&#xff0c;但作为经典的算法&#xff0c;国内文献(可能有我没有搜索到)都仅描述了算法步骤和简单的应用&#xff0c;并未对其进行详尽的分析&…

学习笔记2 光伏MPPT算法

目录 前言1. 光伏电池的分类1.1 按照电池结构分类1.2 按照电池材料分类: 2. 光伏电池模型及光伏特性曲线2.1 光伏电池模型2.2 光伏特性曲线 3. 影响光伏电池输出特性曲线的两个主要因素3.1 光照的影响3.1.1 光照对I-V曲线的影响3.1.2 光照对P-V曲线的影响3.1.3 光照对P-I曲线的…

光伏发电最大功率点跟踪MPPT(粒子群算法)

光伏电池作为太阳能发电的核心部件&#xff0c;实现了太阳能到电能的转换&#xff0c;但是由于光伏电池器件本身的复杂性以及现如今光电材料的限制&#xff0c;光伏电池的转换效率总体来说还是比较低&#xff0c;而且其输出还是非线性的&#xff0c;并且光照强度和外界温度对其…

光伏逆变器MPPT基本算法介绍-李星硕

前言 在上一个话题中&#xff0c;我们阐述了光伏MPPT基本原理&#xff1a;从本质上来说&#xff0c;MPPT算法均是通过DC-DC的占空比d来进行控制的。至于如何计算占空比d的值&#xff0c;则取决于具体的MPPT算法。那么在本话题中&#xff0c;我们将介绍两种基本的MPPT算法&#…

MPPT算法(恒定电压、扰动观察、电导增量)介绍与实现过程

目录 1、太阳能板的特性曲线 2、固定电压法 3、MPPT-P&O算法 4、电导增量算法 5、系统实现方案 1、太阳能板的特性曲线 太阳能板也叫光伏电池。是通过光电效应&#xff0c;把光能转换为电能的设备。 先介绍太阳能板的特性。太阳能的额定参数是在地面光伏组件标准测试…

嵌入式怎么入门,嵌入式应该先学习什么

嵌入式到底是什么&#xff0c;很多对这个概念都很迷糊&#xff0c;许多人都认为这是工程师的代名词。 嵌入式工程师可以说是目前涵盖面最广、最火的职业之一&#xff0c;那么到底什么是嵌入式呢&#xff1f; 狭义上嵌入式系统由硬件和软件组成&#xff0e;是能够独立进行运作的…

嵌入式通用学习路线整理

大家好&#xff0c;我是小麦。 从事嵌入式相关行业&#xff0c;差不多快有10年时间了&#xff0c;走过很多弯路&#xff0c;踩过很多坑。 很多人会问&#xff0c;嵌入式真的没有前途吗&#xff1f;这个我其实也无法回答。用发展的眼光来看&#xff0c;万物都有周期。 这个和嵌入…

嵌入式学习(一)嵌入式c语言

第一章.c数据类型及语句 1.01 第一个c程序的编写 下载好VScode并配置好环境&#xff0c;可以开始进行第一个c程序的编写。 #include <stdio.h>int main(int argc,char *argv[]) {printf("Hello World!\n");return 0 ; } 需要注意的几点&#xff1a; 1.#inclu…

嵌入式学习难吗?

首先来说&#xff0c;学习任何一门技术都有它难的地方。如果说嵌入式学习难&#xff0c;那它就难在于嵌入式知识比较综合&#xff0c;比如C语言、数据结构、通信原理、单片机、数字电路、 arm体系、驱动开发、系统移植、Lora&#xff0c;NB-IOT等&#xff0c;大学里开过很多课都…

嵌入式学习(一)—— 初步认识

嵌入式学习&#xff08;一&#xff09;—— 初步认识 一、认识嵌入式二、嵌入式学习内容1.C语言学习2. 模拟电路&#xff0c;数字电路基础- 模拟电路- 数字电路 3. 硬件知识掌握4. 裸机开发5. 认识使用外设模块6. OS学习7.Linux开发板学习8.应用层学习9. PCB学习 三、推荐网站及…

嵌入式学习笔记

ARM &#xff1a;Advanced RISC Machine RISC&#xff1a;精简指令集 EMCU&#xff1a;Embedded Micro Controller Unit 嵌入式微控制器 EMPU &#xff1a;Embedded Micro Processor Unit 嵌入式微处理器 EDSP &#xff1a;Embedded Digital SIgnal Process 嵌入式数字信号处理…

嵌入式之学习路线

入门必看&#xff1a;https://www.xianjichina.com/news/details_69907.html IC设计&#xff0c;FPGA&#xff0c;射频&#xff0c;EMC&#xff0c;电气工程 ******嵌入式开发的相关硬件基础&#xff1a;对于软件工程专业的学生&#xff0c;从事嵌入式软件开发&#xff0c;像…

嵌入式学习路线,强烈推荐!!!

最近有小伙伴在微信私信我&#xff0c;如何学习嵌入式。一直想写一篇学习路线的文章&#xff0c;由于各种原因拖到了现在。 下面就如何学习嵌入式说下我个人的看法。 01 什么是嵌入式&#xff1f; 嵌入式即嵌入式系统&#xff0c;IEEE&#xff08;美国电气和电子工程师协会&am…

嵌入式学习笔记——概述

嵌入式系统概述 前言“嵌入式系统”概念1.是个啥&#xff1f;2.可以干啥&#xff1f;3.有哪些入坑方向&#xff1f;4.入坑后可以有多少薪资&#xff1f; 单片机1.什么是单片机&#xff1f;2.架构简介3.基于ARM架构的单片机结构简介 总结M4系列目录 前言 断更很长时间了&#x…

【超全面】Linux嵌入式干货学习系列教程

文章目录 一、前言二、Linux基础篇三、数据结构与算法基础三、Linux应用篇四、Linux网络篇五、ARM篇六、Linux系统移植篇七、Linux驱动篇八、Linux特别篇九、Linux项目篇 一、前言 博主学习Linux也有几个月了&#xff0c;在这里为广大朋友整理出嵌入式linux的学习知识&#xff…

嵌入式软件学习路线(入门)

大家不要只收藏不关注啊&#xff0c;哪怕点个赞都行哇。&#x1f62d; 嵌入式学习路线 嵌入式体系框架C语言的入门学习C语言的进阶学习单片机的入门学习linux的入门学习VxWorks的入门学习上位机的入门学习 刚工作两年&#xff0c;推荐的学习路线只做一家之言&#xff0c;如果…

嵌入式学习基础路线

博主来填坑了 博主终于硕士毕业拿到双证去公司报道了&#xff0c;趁空闲的时间来更新下嵌入式软件开发的学习路线。 嵌入式的学习 嵌入式总的来说就分两条路线&#xff1a;1&#xff09;走MCU的软件开发的路线&#xff1b;2&#xff09;走Linux的软件开发路线。 当然除了软…

嵌入式操作系统(嵌入式学习)

嵌入式操作系统 嵌入式操作系统是什么&#xff1f;嵌入式操作系统有哪些&#xff1f;常用的嵌入式操作系统及其特点对初学者的建议 嵌入式操作系统是什么&#xff1f; 嵌入式操作系统是一种专门设计和优化用于嵌入式系统的操作系统。它是在资源受限的嵌入式设备上运行的操作系…

嵌入式入门学习的必要步骤

很多新手在入门嵌入式的时候&#xff0c;经常会有很多问题&#xff0c;这也都是想要多多去了解嵌入式&#xff0c;也害怕自己浪费了时间还没有学会嵌入式&#xff0c;掌握到好方法学习嵌入式&#xff0c;那么就会事半功倍&#xff0c;下面一起来看看嵌入式入门学习的必要步骤是…

嵌入式系统学习

Lecture11-12 主要学习 ➢ 总线基础 ➢ UART协议 ➢ I2C协议 ➢ SPI协议 1.总线的基础 protocol 协议 总线只是一组导线的集合&#xff0c;在嵌入式板上的所有其他主要组件&#xff08;包括I/O子系统、内存子系统和主处理器&#xff09;之间传输各种数据信号、地址和控制…