40 return this->process(
x,
d);
44 DSPLIB_ASSERT(x.size() == d.size(),
"vector size error: len(x) != len(d)");
53 _u = tu.slice(nx, nx + _len - 1);
55 for (
int k = 0; k < nx; k++) {
57 for (
int i = 0; i < _len; i++) {
58 y[k] += _w[i] * tu[i + k];
67 if (_method == LmsType::LMS) {
70 for (
int i = 0; i < _len; i++) {
71 _w[i] = (_w[i] * _lk) + (_mu * e[k] * conj(tu[i + k]));
73 }
else if (_method == LmsType::NLMS) {
77 for (
int i = 0; i < _len; i++) {
82 const real_t norm = pu + eps();
83 for (
int i = 0; i < _len; i++) {
84 _w[i] = (_w[i] * _lk) + (_mu * e[k] * conj(tu[i + k]) / norm);
92 void set_lock_coeffs(
bool locked) {
96 [[nodiscard]]
bool coeffs_locked()
const {
101 base_array<T> coeffs()
const {