OMP的伪代码:
初始化:初始解为0,初始残差为观察信号,迭代次数k=0,初始支持集合为0。
迭代:(Fa的转置)×残差=y
找出y中最大的分量
更新支持集合
在支持集合上求最小二乘解作为近似解
由近似解得到残差
结束:达到终止设定,比如残差小于某一阈值。
StOMP的伪代码:
初始化:初始解x=0,初始残差为观察信号,迭代次数k=0,解中非零元的位置(相当于支持集合吧)。
迭代:(Fa的转置)×残差=y
找出y里面最大的几个分量,
用硬阈值来限定y,
更新支持集合
在支持集合上求Fa的伪逆,乘以观察信号后得到近似解,也就是(Fa在支持集合中的分量的伪逆)×观察信号=b
由近似解得到残差
结束:达到事先设定的迭代次数。
CoSaMP的伪代码:
初始化:初始支持集合为0,残差等于观察信号本身,迭代次数k=0;
迭代:(Fa的转置)×残差=y 组建信号代理,认为x中s个能量通过y表现了出来
找出y里面最大的几个分量
更新支持集合
(Fa在支持集合中的分量的伪逆)×观察信号=b
用阈值来限定b,小于阈值的设为0。
重新修建支持集合和近似解,小于阈值的b对应的那些被踢出去
由近似解求得残差
结束:达到终止设定。