为什么 FISTA 算法不适用于有符号信号?

信息处理 优化 压缩传感 凸优化
2022-02-10 04:46:18

使用来自Tiep H. Vu - FISTA的 FISTA 压缩感知算法,我创建了下面的 matlab 示例。

我创建了 2 个稀疏信号 x_signed 和 x_pos,后者仅包含正值。

我假设作为FISTAopts.pos = false的输入,该算法也适用于带符号的输入信号。

可见,FISTA 算法能够完美地重建 x_pos,但不能重建 x_signed。

s = rng(5);
close all;
nrbins = 5;
N = 120;
m = 24;
%create input signals
x_pos = [round(10*rand(nrbins,1));zeros(N-nrbins,1)];
x_signed = [10*randn(nrbins,1);zeros(N-nrbins,1)];

%random shuffle
x_signed = x_signed(randperm(size(x_signed,1)));
x_pos = x_pos(randperm(size(x_pos,1)));

%Compressive Measurements on positive signal
A = 0.5*(sign(randn(m,N))+ones(m,N));
y = A*x_pos;

opts.pos = true;
opts.lambda = 0.01;
opts.tol = 1e-14;
opts.max_iter = 1000;
xrec_pos = fista_lasso(y,A,[],opts);

%Compressive Measurements on signed signal

A = 0.5*(sign(randn(m,N))+ones(m,N));
ysigned = A*x_signed;

opts.pos = false;
opts.lambda = 0.01;
opts.tol = 1e-14;
opts.max_iter = 1000;
xrec_signed = fista_lasso(ysigned,A,[],opts);



%plot positive
figure;
scatter(1:size(x_pos,1),x_pos);
hold on;
plot(xrec_pos);

legend('x','xrec\_pos');

%plot signed
figure;
scatter(1:size(x_signed,1),x_signed);
hold on;
plot(xrec_signed);

legend('x','xrec\_signed');



在此处输入图像描述

在此处输入图像描述

如何使用 FISTA 算法重建有符号信号?

存在选项“pos”的原因是什么?它对性能有影响吗?

1个回答

我将尝试解释为什么有人会使用这样的选项来将解决方案定义为积极的。近端梯度法是 FISTA 算法的伤害,基本上是
投影(子)梯度下降法的推广。 因此,如果知道解决方案位于凸集合中,并且知道在该集合上的投影,则可以通过投影步骤在方法内部使用它。

因此,如果您知道您的解决方案确实在正象限的凸集中,您应该通过将解决方案投影到该集合来使用该信息。
投影相当简单:

PR+n(y)=argminxR+nxy22=max(y,0)

这实际上是在您在Proj文件中链接到的包中实现的。
瞬间,在最新版本中proj_l1.m你可以看到代码:

if opts.pos 
    X = max(0, U - lambda);
else 
    X = max(0, U - lambda) + min(0, U + lambda);
end

它实现了在标准球和正象素上的投影,如上所述。L1