function [Hn_NLMS, err_NLMS] = my_NLMS(x, order, alpha, beta, val_init)
N = length(x);
Hn_NLMS = val_init * ones(order, N-order);
err_NLMS = zeros(1,N-order);
for i=1:N-order
k = i + order;
Xn = - x(k-1:-1:k-order);
err_NLMS(i) = x(k) - Xn * Hn_NLMS(:, i);
Hn_NLMS(:, i+1) = Hn_NLMS(:, i) + alpha / (beta + Xn*Xn') * Xn' * err_NLMS(i);
end
end