Source code for pygsp.filters.expwin

# -*- coding: utf-8 -*-

import numpy as np

from . import Filter  # prevent circular import in Python < 3.5


[docs]class Expwin(Filter): r"""Design an exponential window filter. Parameters ---------- G : graph bmax : float Maximum relative band (default = 0.2) a : int Slope parameter (default = 1) Examples -------- Filter bank's representation in Fourier and time (ring graph) domains. >>> import matplotlib.pyplot as plt >>> G = graphs.Ring(N=20) >>> G.estimate_lmax() >>> G.set_coordinates('line1D') >>> g = filters.Expwin(G) >>> s = g.localize(G.N // 2) >>> fig, axes = plt.subplots(1, 2) >>> g.plot(ax=axes[0]) >>> G.plot_signal(s, ax=axes[1]) """ def __init__(self, G, bmax=0.2, a=1., **kwargs): def fx(x, a): y = np.exp(-float(a)/x) if isinstance(x, np.ndarray): y = np.where(x <= 0, 0., y) else: if x <= 0: y = 0. return y def gx(x, a): y = fx(x, a) return y/(y + fx(1 - x, a)) def ffin(x, a): return gx(1 - x, a) g = [lambda x: ffin(np.float64(x)/bmax/G.lmax, a)] super(Expwin, self).__init__(G, g, **kwargs)