2014-10-27 3 views
0

Я изучаю алгоритм наименьшего квадратного квадрата и видел этот код. Основываясь на шагах алгоритма, вычисление ошибок и обновлений веса выглядит в порядке. Однако он не дает правильного вывода. Может ли кто-нибудь помочь в решении проблемы? Код был взят из: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 работают некорректно.

+0

Где вы принимаете ошибку? для N = 10 и mu = 0,1 код работает. – NKN

+0

Синтаксическая ошибка отсутствует. Но график желаемого выхода даже не удаленно близок к фактическому сигналу. Во-вторых, когда я применяю этот код для оценки параметров авторегрессионной модели 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

ответ

1

Я также не нашёл никакой ошибки в коде. Но я сомневаюсь, что этот алгоритм подходит для такого шума. Вы получите лучшие результаты при использовании фильтра более высокого порядка (M в данном случае):

M = 5; 
w=zeros(M,N); 
mu=0.2;%input('mu = '); 
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 
+0

извините. моя вина. Я сравниваю формулы с теми, которые я нашел в википедии. Я использовал его, и поэтому я его заменил. Я исправил это. – Steffen

+0

Итак, y = d желаемый сигнал и x = шум добавил шумный сигнал? – SKM

+0

Да. Или наземная правда или какой-то опорный сигнал. – Steffen

-1
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 
    yd(i)=w*x'; 
    e(i) = d(i) - w * x'; 
for m=1:N 
w(m) = w(m) + mu * e(i) * x(m); 
    end 
end 
    subplot(221),plot(t,d),ylabel('Desired Signal'), 
    sub plot(222),plot(t,x),ylabel('Input Signal+Noise'), 
    subplot(223),plot(t,e),ylabel('Error'), 
    subplot(224),plot(t,yd),ylabel('Adaptive Desired output') 

То, что вы пропали без вести был умножением члена ошибки в одной итерации с каждой выборкой входных данных и отдельными обновление весов

+1

Вы должны попытаться немного объяснить свой ответ и не дать только код ответа. – perror

+0

в соответствии с механизмом векторного обновления весов lms, текущее значение e (i) должно умножаться на каждый образец ввода, например (e (i) * x (n)) будет обновлять w1 (первая запись вектора веса) и e (i) * x (n-1) обновит w2 (вторая запись) .... так что если u имеет 1000 весов, как в приведенном выше примере, тогда вам нужно обновить 1000 весов, используя значение ошибки каждой итерации .... и одно изменение это хранение выходного сигнала приемного фильтра (yd) для каждой итерации ..... при начале итераций это будет не очень хорошим приближением, но после некоторых обновлений весов ,,, (yd) станет лучшим приближением желаемого результата. .... –

Смежные вопросы