Filtre passe-bas avec fermeture

introduction

Je pensais que si je mettais une variable pour garder l'historique globalement, la portée s'élargirait et je ne l'aimerais pas, mais si j'utilise une fermeture, je peux la cacher. Ceci est mon propre mémo.

code

import numpy as np

def get_lpf(alpha):
    prev = np.nan * np.ones(1)
    calc = lambda pre, new : alpha * prev + (1.-alpha) * new

    def lpf(val):
        prev[0] = calc(prev[0], val) if not np.isnan(prev[0]) else val
        return prev[0]

    return lpf

lpf = get_lpf(0.8)

for i in range(100):
    new = numpy.random.normal()
    filtered = lpf(new)
    
    print("new=%f, filt=%f" % (new, filtered) )

Commentaire

prev = np.nan * np.ones(1)
calc = lambda pre, new : alpha * prev + (1.-alpha) * new

--Créer un historique contenant la variable prev dans la fonction de génération lpf get_lpf --calc est une fonction qui effectue le calcul LPF $ y_n = \ alpha y_ {n-1} + (1- \ alpha) x_n $

prev[0] = calc(prev[0], val) if not np.isnan(prev[0]) else val

--Si vous définissez prev =, il sera reconnu comme nouvellement défini au lieu de faire référence à la variable externe, et une erreur se produira.

Recommended Posts

Filtre passe-bas avec fermeture
Filtre médian utilisant xarray (filtre médian)
fermeture
Ecrire FizzBuzz en utilisant map (), reduction (), filter (), récursif