wiener_filter_curvature.py 1.14 KB
Newer Older
1
from ...operators import EndomorphicOperator
2

Martin Reinecke's avatar
PEP8    
Martin Reinecke committed
3

4
class WienerFilterCurvature(EndomorphicOperator):
Jakob Knollmueller's avatar
Jakob Knollmueller committed
5
6
7
8
    """The curvature of the WienerFilterEnergy.

    This operator implements the second derivative of the
    WienerFilterEnergy used in some minimization algorithms or
9
10
    for error estimates of the posterior maps. It is the
    inverse of the propagator operator.
Jakob Knollmueller's avatar
Jakob Knollmueller committed
11
12
13
14

    Parameters
    ----------
    R: LinearOperator,
Martin Reinecke's avatar
Martin Reinecke committed
15
16
17
       The response operator of the Wiener filter measurement.
    N: EndomorphicOperator
       The noise covariance.
Jakob Knollmueller's avatar
Jakob Knollmueller committed
18
    S: DiagonalOperator,
Martin Reinecke's avatar
Martin Reinecke committed
19
       The prior signal covariance
Jakob Knollmueller's avatar
Jakob Knollmueller committed
20
21
    """

22
    def __init__(self, R, N, S):
23
24
25
        self.R = R
        self.N = N
        self.S = S
26
27
28
29
30
        super(WienerFilterCurvature, self).__init__()

    @property
    def preconditioner(self):
        return self.S.times
31

32
33
    @property
    def domain(self):
Martin Reinecke's avatar
Martin Reinecke committed
34
        return self.S.domain
35
36
37
38
39
40
41
42
43

    @property
    def self_adjoint(self):
        return True

    @property
    def unitary(self):
        return False

44
    def _times(self, x):
Martin Reinecke's avatar
Martin Reinecke committed
45
46
47
        res = self.R.adjoint_times(self.N.inverse_times(self.R(x)))
        res += self.S.inverse_times(x)
        return res