Я изучаю алгоритм наименьшего квадратного квадрата и видел этот код. Основываясь на шагах алгоритма, вычисление ошибок и обновлений веса выглядит в порядке. Однако он не дает правильного вывода. Может ли кто-нибудь помочь в решении проблемы? Код был взят из:Matlab: Как исправить код алгоритма наименьшего среднего значения
http://www.mathworks.com/matlabcentral/fileexchange/35670-lms-algorithm-implementation/content/lms.m
clc
close all
clear all
N=input('length of sequence N = ');
t=[0:N-1];
w0=0.001; phi=0.1;
d=sin(2*pi*[1:N]*w0+phi);
x=d+randn(1,N)*0.5;
w=zeros(1,N);
mu=input('mu = ');
for i=1:N
e(i) = d(i) - w(i)' * x(i);
w(i+1) = w(i) + mu * e(i) * x(i);
end
for i=1:N
yd(i) = sum(w(i)' * x(i));
end
subplot(221),plot(t,d),ylabel('Desired Signal'),
subplot(222),plot(t,x),ylabel('Input Signal+Noise'),
subplot(223),plot(t,e),ylabel('Error'),
subplot(224),plot(t,yd),ylabel('Adaptive Desired output')
EDIT
код от ответа:
N = 200;
M = 5;
w=zeros(M,N);
mu=0.2;%input('mu = ');
y(1) = 0.0;
y(2) = 0.0;
for j = 3:N
y(j) = 0.95*y(j-1) - 0.195*y(j-2);
end
x = y+randn(1,N)*0.5;
%x= y;
d = y;
for i=(M+1):N
e(i) = d(i) - x((i-(M)+1):i)*w(:,i);
w(:,i+1) = w(:,i) + mu * e(i) * x((i-(M)+1):i)';
end
for i=(M+1):N
yd(i) = x((i-(M)+1):i)*w(:,i);
end
весовой матрицы W, которая сохраняет коэффициенты равны нулю, что означает что уравнения LMS работают некорректно.
Где вы принимаете ошибку? для N = 10 и mu = 0,1 код работает. – NKN
Синтаксическая ошибка отсутствует. Но график желаемого выхода даже не удаленно близок к фактическому сигналу. Во-вторых, когда я применяю этот код для оценки параметров авторегрессионной модели AR (2), я не получаю правильных весов/параметров. Моя цель - оценить параметры модели AR (2), где d (I) = 0,95 * d (i-1) - 0,195 * d (I-2); x = d + randn (1, N) * 0,5; Результат алгоритма должен дать мне w_estimates близко к w_actual = [0.95 -0.195] – SKM