Programación Específica > Matlab

 Algoritmo Lms

(1/2) > >>

Niad:
Hola a todos!, es la primera vez que escribo aquí, y bueno mi duda es la siguiente:
Estoy haciendo un programa sobre reducción de eco, utilizando el algoritmo LMS para realizar la reducción, el código que llevo hasta ahorita es el que dejo a continuación, mi duda es en la parte donde se realiza la convolución de los pesos del filtro con la señal con eco, por lo que he leido de teoría, no necesamiente deben de ser de la misma longitud, mi duda es entonces porque no realiza esa operación? De antemano agradezco a los que contesten y se tomen unos momentos para leerlo.

Gracias  :hola:


%%Codigo%%%
 
fo=3e2;
wo=2*pi*fo;
ws=(2*pi*fo)/(8*fo);

n=0:0.1:9;
S=sin(ws*n);

alfa=[0.9 0.7];
ret=[10 20];
m=length(ret);
he=zeros(1,ret(m));
he(1)=1;
for i=1:m
    he(ret(i)+1)=alfa(i);
end

eco=conv(S,he);


N=7;
Wi=[zeros(1,(N*2))]';
Wi(1)=1;
for i=1:length(eco);
    for j=1:length(eco);
        Fi(i,j)=eco(i)*eco(j);
    end;
end;


for n=1:200;
    D=sin(ws*n);
    A=eig(Fi);mu=1/(50*max(A));
    Yjp(n)=Wi(n)'*eco(n); Ej=D-Yjp;
    Wj=Wi(n)+(2*mu*Ej*eco(n));
    Wi=Wj;
end

allisap:
mira, no me dio mucho tiempo de analizar tu codigo, B)

 pero las lineas que te  marco tienen algo raro, <_<

 parecciera que Wj tambien deberia depender de n, pero  como lo tienes solo generas un solo valor,  :blink:
y en la siguiente linea lo asignas a Wi, por lo que Wi lo cambias de un vector de 1*n en uno de 1*1 es decir  un solo valor  :unsure:


for n=1:200;
D=sin(ws*n);
A=eig(Fi);mu=1/(50*max(A));
Yjp(n)=Wi(n)'*eco(n); Ej=D-Yjp;
Wj=Wi(n)+(2*mu*Ej*eco(n));     <---------
Wi=Wj;                                      <----------
end


revisalo para ver si esto es lo que esta mal :hola:

cleo:
Hola, yo tabién estoy utilizando el algoritmo lms para cancelacion de ecos en mi proyecto fin de carrera. Yo he utilizado otra función más corta, pero la realizo en el dominio del tiempo y la tuya me ha parecido que es en la frecuencia, si estás interesado indicamelo en este foro y te paso el código.

¿Sabes de otro algoritmo que sirva para la cancelación de ecos que no sea el lms y se pueda implementar en matlab? Me sería de gran ayuda porque llevo semanas buscando y no encuentro nada concreto. Gracias

Niad:
Hola, muchas gracias por responder.

allisap voy a checar lo que me indicas, la razón por la que Wj lo asigno a Wi es para que vayan cambiando los coeficientes del filtro adaptativo, pero si tienes razón Wj en todo caso también debe de depender de n.

cleo, si me interesa lo que estas realizando, te agradecería mucho si puedes pasarme el código. El código con el que estoy trabajando es en el dominio del tiempo. En cuanto a los algoritmos para cancelación de eco los que conozco son: LMS, NLMS (LMS Normalizado), APA (Affine Projection Algorithm) y RLS (Recursive Least Square) la verdad no he intentado de implementar los demás, sólo he trabajado con el LMS.

Nuevamente muchas gracias!  :hola:

cleo:
Te paso un archivo que encontré en internet en el que viene todo muy bien explicado y el código para matlab.

Los algoritmos que me has nombrado también los había encontrado, pero me tengo que centrar en los FIR (el APA me ha dicho mi tutor que me olvide). El RLS no me sirve porque es igual que el LMS, pero recursivo. Tengo otras variantes del LMS (FIR-SD-LMS, FIR-SE-LMS y el que tú me has nombrado NMLS), pero no encuentro nada en internet que me aclare de qué tratan y cómo se implementan. Si te enteras de algo... Tendré que enchufarme algún libro en inglés, me temo.

Espero que te sirva lo que te envio, yo lo he probado y va a las mil maravillas. :rolleyes:

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa