我需要实现 RLS 算法,但它是用于矩阵而不是向量,我已经制作了下面的代码,但仍然有问题无法正常工作,
编辑:
代码应该如下完成,
但是如果是向量,并且是标量,我们如何处理g(:,n)=P*colo*((lamda + colo'*P*colo).^-1);
这个符号是有效的,但是现在我们有是矩阵并且是向量。H
y(n)
H
y(n)
clear all; clc;
N = 1000; %% Number of samples
H = randn(64,31); %% The input matrix
c1 = randn(31,1); %% The outpu desired vector;
p = length(H);
g1 = zeros(p,1); %% initial RLS weight;
lamda=1;
sigma=1;
P=(sigma^-1)*eye(p);
for n = 1 : N
y(:,n) = H'*g1;
alpha(:,n) = c1(:,n) - y(:,n); % Instantaneous error of RLS
g(:,n)=P*colo*((lamda + H'*P*H).^-1); % Gain vector
P=(lamda^-1)*P - g(:,n)*H'*(lamda^-1)*P; % RLS intermediate term
g1 = g1 + alpha(n)*g(:,n); % Weight update rule of RLS
end
H
如您所知,当我上面的代码中的输入数据是向量时,正常的 RLS 算法正在工作。所以它将更新循环如下:
for n = 1 : N
y(n) = H'*g1;
alpha(n) = c1(n) - y(n); % Instantaneous error of RLS
g(:,n)=P*colo*((lamda + H'*P*H).^-1); % Gain vector
P=(lamda^-1)*P - g(:,n)*H'*(lamda^-1)*P; % RLS intermediate term
g1 = g1 + alpha(n)*g(:,n); % Weight update rule of RLS
end
这将正常工作y(n)
,并且alpha
在这种情况下将是标量。但就我而言,这将是向量。我想,也许我们可以将矩阵 H 转换为向量,然后在完成循环后将其转换回矩阵?但我不确定,我不知道该怎么做,这只是一个意见。
非常感谢您的帮助。我真的需要理解这一点。
谢谢