Skip to content

Commit

Permalink
doc: frame operator of the pseudo-inverse
Browse files Browse the repository at this point in the history
  • Loading branch information
mdeff committed Mar 12, 2019
1 parent 2352939 commit 9869c9a
Showing 1 changed file with 25 additions and 13 deletions.
38 changes: 25 additions & 13 deletions pygsp/filters/filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@ def compute_frame(self, **kwargs):
*analysis operator*
.. math::
g(L) = \begin{pmatrix} g_0(L) \\ \vdots \\ g_F(L) \end{pmatrix}
g(L) = \begin{pmatrix} g_1(L) \\ \vdots \\ g_F(L) \end{pmatrix}
\in \mathbb{R}^{NF \times N}, \quad
g_i(L) = U g_i(\Lambda) U^\top,
Expand Down Expand Up @@ -663,14 +663,21 @@ def kernel(x, *args, **kwargs):
def inverse(self):
r"""Return the pseudo-inverse filter bank.
The pseudo-inverse of the filter bank :math:`g` is the filter bank
:math:`g^+` such that
The pseudo-inverse of the *analysis filter bank* :math:`g` is the
*synthesis filter bank* :math:`g^+` such that
.. math:: g(L)^+ g(L) = I,
where :math:`I` is the identity matrix, and :math:`g(L)^+ = (g(L)\top
g(L))^{-1} g(L)^\top` is the left pseudo-inverse of the analysis
operator :math:`g(L)`.
where :math:`I` is the identity matrix, and the *synthesis operator*
.. math:: g(L)^+ = (g(L)\top g(L))^{-1} g(L)^\top
= (g_1(L)^+, \dots, g_F(L)^+)
\in \mathbb{R}^{N \times NF}
is the left pseudo-inverse of the analysis operator :math:`g(L)`. Note
that :math:`g_i(L)^+` is the pseudo-inverse of :math:`g_i(L)`,
:math:`N` is the number of vertices, and :math:`F` is the number of
filters in the bank.
The above relation holds, and the reconstruction is exact, if and only
if :math:`g(L)` is a frame. To be a frame, the rows of :math:`g(L)`
Expand All @@ -680,17 +687,22 @@ def inverse(self):
will be the closest to :math:`x` in the least square sense.
While there exists infinitely many inverses of the analysis operator of
a frame, the pseudo-inverse is unique and corresponds to the canonical
dual of the filter kernel.
a frame, the pseudo-inverse is unique and corresponds to the *canonical
dual* of the filter kernel.
The *frame operator* of :math:`g^+` is :math:`g(L)^+ (g(L)^+)^\top =
(g(L)\top g(L))^{-1}`, the inverse of the frame operator of :math:`g`.
Similarly, its *frame bounds* are :math:`A^{-1}` and :math:`B^{-1}`,
where :math:`A` and :math:`B` are the frame bounds of :math:`g`.
If the frame is tight (i.e., :math:`A=B`), the canonical dual filters
are given by :math:`h_i = g_i / A`, where :math:`g_i` are the filters
composing the filter bank :math:`g`.
If :math:`g` is tight (i.e., :math:`A=B`), the canonical dual is given
by :math:`g^+ = g / A` (i.e., :math:`g^+_i = g_i / A \ \forall i`).
Returns
-------
inverse: Filter
The pseudo-inverse filter bank.
inverse : :class:`pygsp.filters.Filter`
The pseudo-inverse filter bank, which synthesizes (or reconstructs)
a signal from its coefficients using the canonical dual frame.
See also
--------
Expand Down

0 comments on commit 9869c9a

Please sign in to comment.