-
Notifications
You must be signed in to change notification settings - Fork 3
/
oneBCS.m
40 lines (36 loc) · 824 Bytes
/
oneBCS.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function x_est=oneBCS(t,A,max_iter,tor)
% Model : t=sign(A*x);
% Inputs:
% t --- measurements
% A---measurement matrix
% max_iter --- maximal iteration
% tor ---convergence conddition
% Outputs:
% x_est --- normalized estimate signal
% init
[M,N]=size(A);
par=1e-10;
a=par;
b=par;
at=a+.5;
Ealpha=ones(N,1)*par;
iter=0;
mux_old=zeros(N,1);
mux=ones(N,1);
epsilong=ones(M,1);
while( iter < max_iter && norm(mux_old-mux) > tor )
iter = iter +1 ;
mux_old=mux;
% Expectation step
% Update mux & sigmax
sigmax=inv(diag(Ealpha)+2*A'*diag(f_lambda(epsilong))*A);
mux=.5*sigmax*A'*(2*t-1);
% Update Ealpha
bt=b+.5*(diag(sigmax)+mux.*mux);
Ealpha=at./bt;
% Max Step
% Update epsilong
B=mux*mux'+sigmax;
epsilong=sqrt(diag(A*B*A'));
end
x_est=mux/norm(mux);