SoloCodigo
Programación Específica => Matlab => Mensaje iniciado por: Niad en Domingo 18 de Junio de 2006, 04:24
-
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
-
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:
-
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
-
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:
-
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:
-
Hola Cleo, muchas gracias por el archivo esta muy bien y sobre todo manejan un algoritmo muy sencillo.
Sobre los otros algoritmos no he encontrado algo, pero por lo que he leído el LMS es el más sencillo de todos además de que es un método bastante bueno. También he leído que se puede realizar la cancelación en el dominio de la frecuencia utilizando Fourier, esa sería otra opción, aunque la verdad no tengo información de como implementarlo.
Saludos! :)
:hola:
-
Hola yo tambien estoy haciendo un eliminador de ecos
ahora estoy traando de eliminar ecos de una señal, y posteriormente ver la posibilidad de hacerlo en tiempo real, para ello voy a grabar una señal en la que hayan ecos y moverme mientras grabe, luego tendre que usar filtros adaptivos
el pdf que mando cleo no lo entiendo bien, si alguien lo ha aplicado podria enviar el .m con las señales originales y grabadas porfavor,
gracias
niad podrias darme tu mail, el mio es martinolio@hotmail.com
-
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
que tal amigo yo estoy interesado en un algoritmo corto para cancelar el eco xfa necesito de urgencia
te agradeceria mucho que me pasaras el codigo ya sea x mail o x este foro...
nota: lo necesito hasta el domingo 7 de Dic xfa xfa estoy desesperado.....