Red de conocimiento del abogados - Bufete de abogados - 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 utilizamos el chat de voz QQ, si no usamos auriculares, utilizamos altavoces. 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 haga eco del filtro FIR de larga duración. (Genera 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 = filtro(Hd, log(0.99*rand(1, M) 0.01).*sign(randn(1 , M)).*exp(-0.002*(1:M)));

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

plot(0: 1/fs: 0,5, H);

xlabel('Tiempo [seg]');

ylabel('Amplitud');

título( ' Room Impulse Response');

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

Luego lee la voz humana que viene con matlab y reprodúcela (no es necesario Nervous , esto no es escuchar inglés)

cargar nearspeech

n = 1: length(v);

t = n/fs;

plot(t, v);

axis([0 33.5 -1 1]);

xlabel('Tiempo [seg]');

ylabel('Amplitud');

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

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

p8 = audioplayer(v,fs);

playblocking(p8);

La señal de voz del extremo lejano

Ahora reproduce el eco: Ese es el sonido que se emite desde el 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'); 'Color', [1 1 1])

p8 = audioplayer(dhat, fs);

playblocking(p8);

Voz Agregada junto con el eco, 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 = audioplayer(d, fs ); /p>

playblocking(p8);

Usar filtro adaptativo de dominio de frecuencia para eliminar el eco

mu = 0.025

W0 = zeros(1, 2048);

del = 0,01;

lam = 0,98;

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

d = d(1:length(W0)*floor(length(d)/length(W0)));

Construya la frecuencia- Filtro adaptativo de dominio

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)])

subtrama (3, 1 , 1);

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

eje([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');

p>

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

subpl

ot(3, 1, 3);

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

eje([0 33.5 -1 1]); p> p>

xlabel('Tiempo [seg]');

ylabel('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, ya está.

Hay muchas formas de generar ecos y también existe un método de duplicación, que simula cada rebote. del 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.