Variable step-size least-mean-square (VSLMS) with Benveniste’s adaptation

New in version 1.2.2.

The variable step-size least-mean-square (VSLMS) adaptive filter with Benveniste’s adaptation is implemeted according to DOI:10.1109/EMBC.2013.6610622.

The VSLMS filter with Benveniste adaptation can be created as follows

>>> import padasip as pa
>>> pa.filters.FilterVSLMS_Benveniste(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.FilterVSLMS_Benveniste(n=4, mu=0.1, ro=0.0002, 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.vslms_benveniste.FilterVSLMS_Benveniste(n, mu=1.0, ro=0.1, **kwargs)[source]

Bases: padasip.filters.base_filter.AdaptiveFilter

This class represents an adaptive VSLMS filter with Benveniste’s adaptation.

learning_rule(e, x)[source]

Override the parent class.