• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2022-11-30
  • 语言: Matlab
  • 标签: bregman  cs  

资源简介

bregman 恢复算法,可以恢复一维,二维的图像等信号,不过具体公式请自己算,根据bregman的推导就可以算,很简单!

资源截图

代码片段和文件信息

function [xx_wtimesnrsnr_loop]=SplitBregmanCosparse(yAOmegaparams)% use in image
%The function solves problem:
%                             sol=argmin_x||W.*Omega*x||_1  s.t.
%                             ||y-Ax||_2<=epsilon
%Using Split Bregman to solve this problem by convert into unconstrainted
%form:
%                sol=argmin_x||W.*Omega*x||_1+mu/2*||y-Ax||_2^2
%reference to BregmanCookbook chapter5
%input: y is the mixing signalM*T
%       A is the mixing matrixM*Nhere it is a eye matrix
%       Omega is the analysis operator 
%       params.mu is the fidelity term‘s weight param in the objective
%       params.it is the max number ot iteration of SB algorithm
%       params.tol is about the stopping criterion below:
%       norm(sol(:)-sol_pre(:)1)/norm(sol_pre(:)1)>tol
%       params.lambda is the penalty function weight param in iteration
%
%output: sol is the solution of the problem use Split Bregman algorithm
%        sol_w is the solution of the problem use weighted Split Bregman algorithm
  
%initiation
mu=params.mu;
lambda_1=params.lambda_1;
lambda_2=params.lambda_2;
it_SB=params.it_SB;
tol_SB=params.tol_SB;
if isfield(params‘W_method‘)  %如果符合,返回逻辑1.
   W_method=params.W_method;
else                          %否则,其他.
   W_method=‘W1‘;
end
%初始化
epsilon=10;
[MN]=size(A);
sb=size(y2);% # of sampling bins
u=zeros(size(A2)sb);
d=zeros(size(Omega*u));
b=zeros(size(Omega*u));
temp1=inv(mu*A‘*A+lambda_1*Omega‘*Omega);
temp2=mu*A‘*y;
%迭代   更新顺序:u-d-b.
K=0; T=0;
weights=1;
x_pre=u;
it_T=100;
while T    T=T+1;
    tic;
    while K        K=K+1;
        u_pre=u;
        if isfield(params‘x_t‘) && T==2
            x_t=params.x_t;
            snr_loop(K)=20*log10(norm(x_t)/(norm(u_pre-x_t)));
        end
        u=temp1*(temp2+lambda

评论

共有 条评论