FocusedBlindDecon.P_fbd
— Type.This package defines a P_fbd
type to represent the FBD model, and provides a set of methods to access its properties. In order to generate an instance of P_fbd
, use the following command, where the description of the arguments and keywords is given below.
pa=P_fbd(ntg, nt, nr, nts; dobs, gobs, sobs)
Arguments
Let (ntg,nr)=size(g)
, (nt,nr)=size(d)
and (nts,)=size(s)
, where
ntg
is input dimension of the channel impulse responses g
.
nt
is input dimension of the channel outputs d
.
nr
is the number of receivers or channels.
nts
is input dimension of the source.
Keywords
dobs
are the channel responses that will be factorized. Alternatively, the user may input the next two keywords i.e., gobs
and sobs
for synthetic experiments, where dobs
are internally generated.
gobs
(optional) are the true channel impulse responses, stored in pa
.
sobs
(optional) similarly, it is the true source.
Base.getindex
— Method.Let pa
be in instance of the FBD model. Its properties can be easily accessed as using the following getindex
calls.
pa[:s]
returns the source, either estimated after fbd!
or lsbd!
, from the model.
pa[:sa]
returns the auto-correlated source, estimated after fibd!
.
pa[:g]
returns the channel impulse responses, estimated after fbd!
or lsbd!
.
pa[:xg]
returns the interferometric channel impulse responses estimated after fibd!
.
pa[:d]
returns the convolution of pa[:s]
and pa[:g]
.
pa[:xd]
returns the convolution of pa[:sa]
and pa[:xg]
.
pa[:sobs]
returns the true source, when stored.
pa[:gobs]
returns the true impulse responses, when stored.
pa[:xgobs]
returns the true interferometric channel impulse responses, if stored.
pa[:dobs]
returns the measured channel outputs that fbd!
or lsbd!
aims to factorize.
pa[:xdobs]
returns the measured interferometric channel outputs that fibd!
aims to factorize.
FocusedBlindDecon.lsbd!
— Method.One can use the lsbd!
method to perform LSBD over a given instance of P_fbd
i.e., pa
. LBSD is a least-squares fitting of d
to jointly optimize the g
and s
, which can be accessed via pa[:g]
and pa[:s]
, respectively. The joint optimization is carried out using alternating minimization: in one cycle, we fix one array and optimize the other, and then fix the other and optimize the first. Several cycles are expected to be performed to reach convergence.
lsbd!(pa)
heatmap(pa[:g], title="estimated impulse responses from LSBD")
FocusedBlindDecon.fibd!
— Method.One can use the fibd!
method to perform FIBD over a given instance of P_fbd
i.e., pa
. FIBD is a least-squares fitting of xd
to jointly optimize the xg
and sa
, which can be accessed via pa[:xg]
and pa[:sa]
, respectively. The joint optimization is carried out using alternating minimization.
fibd!(pa)
heatmap(pa[:xg], title="estimated interferometric impulse responses from FIBD")
FocusedBlindDecon.fpr!
— Method.After performing FIBD on a P_fbd
instance pa
, we can perform FPR to complete FBD. These two code blocks should be equivalent.
fibd!(pa)
fpr!(pa)
fbd!(pa)
The result of FPR i.e, g
can be extracted using pa[:g]
. The corresponding source signature is stored in pa[:s]
.
FocusedBlindDecon.fbd!
— Method.Perform FIBD and FPR to complete FBD of an instance of P_fbd
i.e., pa
.
fbd!(pa)
plot(pa[:g], title="estimated impulse responses using FBD")
plot(pa[:s], title="estimated source using FBD")