Red de conocimiento del abogados - Ley de patentes - Generación y eliminación de señales de eco en MATLAB

Generación y eliminación de señales de eco en MATLAB

%Cuando usamos el chat de voz QQ, si no usamos auriculares, usamos parlantes. Entonces el micrófono recibirá dos señales: primero la voz humana y segundo, el sonido proveniente del altavoz (eco). Este programa utiliza palabras para eliminar el eco.

% Primero haz que el filtro FIR de largo plazo haga eco. (Produce respuesta de impulso de la habitación)

M = 4001;

fs = 8000;

[B,A] = cheby2(4,20,[0.1 0.7 ]);

Hd = dfilt.df2t([zeros(1,6) B],A);

hFVT = fvtool(Hd); % Analizar el filtro

set(hFVT, 'Color', [1 1 1])

H = filter(Hd,log(0.99*rand(1,M)+0.01).*sign(randn ( 1,M)).*exp(-0.002*(1:M)));

H = H/norm(H)*4; % de respuesta al impulso de la habitación

gráfico (0:1/fs:0.5,H);

xlabel('Tiempo [seg]');

ylabel('Amplitud');

title('Room Impulse Response');

set(gcf, 'Color', [1 1 1])

% Luego lee las voces que vienen con matlab y toca ( no te pongas nervioso, esto no es escuchar inglés)

cargar discurso cercano

n = 1:length(v);

t = n/fs;

plot(t,v);

axis([0 33.5 -1 1]);

xlabel('Tiempo [seg]');

p>

ylabel('Amplitud');

title('Señal de voz casi final');

set(gcf, 'Color', [1 1 1] )

p8 = audioplayer(v,fs);

playblocking(p8);

La señal de voz del extremo lejano

% Ahora reproduzca el eco: el sonido que proviene del altavoz, rebota por la habitación y finalmente es captado por el micrófono.

Este sonido se genera a través del filtro FIR que diseñamos anteriormente

cargar voz lejana

x = x(1:length(x));

dhat = filter( H,1,x);

plot(t,dhat);

axis([0 33.5 -1 1]);

xlabel ('Tiempo [seg]');

ylabel('Amplitud');

title('Señal de voz con eco del extremo lejano');

set (gcf, 'Color', [1 1 1])

p8 = audioplayer(dhat,fs);

playblocking(p8);

%人Agregar el sonido y eco juntos, el sonido real recibido por el micrófono es:

d = dhat + v+0.001*randn(length(v),1);

plot(t ,d );

axis([0 33.5 -1 1]);

xlabel('Tiempo [seg]');

ylabel('Amplitud ') ;

title('Señal de micrófono');

set(gcf, 'Color', [1 1 1])

p8 = reproductor de audio( d, fs);

playblocking(p8);

% Utilice un filtro adaptativo de dominio de frecuencia para eliminar el eco

mu = 0,025;

W0 = ceros(1,2048);

del = 0.01;

lam = 0.98;

x = x(1:longitud(W0) *piso( largo(x)/largo(W0)));

d = d(1:largo(W0)*piso(largo(d)/largo(W0)));

% Construir el filtro adaptativo en el dominio de frecuencia

hFDAF = adaptfilt.fdaf(2048,mu,1,del,lam);

[y,e] = filter (hFDAF, x,d);

n = 1:longitud(e);

t = n/fs;

pos = get(gcf, 'Posición' );

set(gcf,'Posición',[pos(1), pos(2)-100,pos(3),(pos(4)+85)])

subplot(3,1,1);

plot(t,v(n),'g');

axis([0 33.5 -1 1 ]);

ylabel('Amplitud');

title('Señal de voz cercana');

subplot(3,1,2);

plot(t,d(n),'b');

axis([0 33.5 -1 1]);

ylabel(' Amplitud') ;

title('Señal de micrófono');

subplot(3,1,3);

plot(t,e(n) ,'r ');

axis([0 33.5 -1 1]);

xlabel('Tiempo [seg]');

y

label('Amplitud');

title('Salida del cancelador de eco acústico');

set(gcf, 'Color', [1 1 1])

p8 = audioplayer(e/max(abs(e)),fs);

playblocking(p8);

%taburete, taburete, taburete, ¡listo!

% Hay muchas formas de generar ecos, y también existe un método de espejo, que simula cada rebote de sonido en las paredes de una habitación hexaédrica. Hay un programa en la página personal de un amigo de una universidad en Australia. Si estás interesado, puedes buscarlo.