def rls_NEW(x, d, N=55, lmbd=0.999, delta=10):
L = min(len(x), len(d))
lmbd_inv = 1 / lmbd
h = np.zeros((N, 1))
P = np.eye(N)*delta
e = np.zeros(L)
for n in range(L):
if n < N:
x1 = np.array(x[:n+1])
# print([1]*(N-n-1))
x_n = np.concatenate((x1[::-1],[0]*(N-n-1))).reshape(N, 1)
else:
x_n = np.array(x[n-N+1:n+1][::-1]).reshape(N, 1)
d_n = d[n]
y_n = np.dot(x_n.T, h)
e_n = d_n - y_n
g = np.dot(P, x_n)
g = g/(lmbd + np.dot(x_n.T, g))
h = h + e_n * g
P = lmbd_inv * (P - np.dot(g, np.dot(x_n.T, P)))
e[n] = e_n
return e
python实现RLS滤波
最新推荐文章于 2024-07-12 19:06:42 发布