Generalized Normalized Gradient Descent (GNGD)

New in version 0.2.

Changed in version 1.2.0.

The generalized normalized gradient descent (GNGD) adaptive filter is an extension of the NLMS adaptive filter (Normalized Least-mean-square (NLMS)).

The GNGD filter can be created as follows

>>> import padasip as pa
>>> pa.filters.FilterGNGD(n)

where n is the size (number of taps) of the filter.

Content of this page:

See also

Adaptive Filters

Minimal Working Examples

If you have measured data you may filter it as follows

import numpy as np
import matplotlib.pylab as plt
import padasip as pa

# creation of data
N = 500
x = np.random.normal(0, 1, (N, 4)) # input matrix
v = np.random.normal(0, 0.1, N) # noise
d = 2*x[:,0] + 0.1*x[:,1] - 4*x[:,2] + 0.5*x[:,3] + v # target

# identification
f = pa.filters.FilterGNGD(n=4, mu=0.1, w="random")
y, e, w = f.run(d, x)

# show results
plt.figure(figsize=(15,9))
plt.subplot(211);plt.title("Adaptation");plt.xlabel("samples - k")
plt.plot(d,"b", label="d - target")
plt.plot(y,"g", label="y - output");plt.legend()
plt.subplot(212);plt.title("Filter error");plt.xlabel("samples - k")
plt.plot(10*np.log10(e**2),"r", label="e - error [dB]");plt.legend()
plt.tight_layout()
plt.show()

Code Explanation

class padasip.filters.gngd.FilterGNGD(n, mu=1.0, eps=1.0, ro=0.1, **kwargs)[source]

Bases: padasip.filters.base_filter.AdaptiveFilter

Adaptive GNGD filter.

learning_rule(e, x)[source]

Override the parent class.