paso3

5
PARTE TEORICO Para conseguir el objetivo de agregar y quitar el eco al audio se debe especificar primero las funciones principales para el desarrollo practico: Función wavread y = wavread (nombre de archivo) carga un archivo WAV especificado por la cadena de nombre de archivo, la devolución de los datos muestreados en y. Si el nombre de archivo no incluye una extensión, wavread añade .wav. [y, Fs] = wavread (nombre de archivo) devuelve la frecuencia de muestreo (Fs) en Hertz utiliza para codificar los datos en el archivo. [y, Fs, nbits] = wavread (nombre de archivo) devuelve el número de bits por muestra (nbits). [y, Fs, nbits, opta] = wavread (nombre de archivo) devuelve una estructura opta de información adicional contenida en el archivo WAV. El contenido de esta estructura se diferencia de un archivo a otro. Campos de estructura típicas incluyen opts.fmt (información de formato de audio) y opts.info (texto que describe el título, autor, etc.). Función wavwrite wavwrite (y, de nombre de archivo) escribe los datos almacenados en la variable y en un archivo WAVE llamado nombre de archivo. La entrada de nombre de archivo es una cadena encerrada entre comillas simples. Los datos tiene una velocidad de muestreo de 8000 Hz y se supone que es de 16 bits. Cada columna de los datos representa un canal separado. Por lo tanto, los datos estéreo deben especificarse como una matriz con dos columnas. wavwrite (y, Fs, nombre de archivo) escribe los datos almacenados en la variable y en un archivo WAVE llamado nombre de archivo. Los datos tiene una frecuencia de muestreo de Fs Hz y se supone que es de 16 bits. wavwrite (y, Fs, N, nombre de archivo) escribe los datos almacenados en la variable y en un archivo WAVE llamado

Upload: rauloko

Post on 26-Sep-2015

4 views

Category:

Documents


0 download

DESCRIPTION

Paso3 para el proceso de señales digitales

TRANSCRIPT

PARTE TEORICOPara conseguir el objetivo de agregar y quitar el eco al audio se debe especificar primero las funciones principales para el desarrollo practico: Funcin wavready = wavread (nombre de archivo) carga un archivo WAV especificado por la cadena de nombre de archivo, la devolucin de los datos muestreados en y. Si el nombre de archivo no incluye una extensin, wavread aade .wav.[y, Fs] = wavread (nombre de archivo) devuelve la frecuencia de muestreo (Fs) en Hertz utiliza para codificar los datos en el archivo.[y, Fs, nbits] = wavread (nombre de archivo) devuelve el nmero de bits por muestra (nbits).[y, Fs, nbits, opta] = wavread (nombre de archivo) devuelve una estructura opta de informacin adicional contenida en el archivo WAV. El contenido de esta estructura se diferencia de un archivo a otro. Campos de estructura tpicas incluyen opts.fmt (informacin de formato de audio) y opts.info (texto que describe el ttulo, autor, etc.). Funcin wavwritewavwrite (y, de nombre de archivo) escribe los datos almacenados en la variable y en un archivo WAVE llamado nombre de archivo. La entrada de nombre de archivo es una cadena encerrada entre comillas simples. Los datos tiene una velocidad de muestreo de 8000 Hz y se supone que es de 16 bits. Cada columna de los datos representa un canal separado. Por lo tanto, los datos estreo deben especificarse como una matriz con dos columnas.wavwrite (y, Fs, nombre de archivo) escribe los datos almacenados en la variable y en un archivo WAVE llamado nombre de archivo. Los datos tiene una frecuencia de muestreo de Fs Hz y se supone que es de 16 bits.wavwrite (y, Fs, N, nombre de archivo) escribe los datos almacenados en la variable y en un archivo WAVE llamado nombre de archivo. Los datos tiene una frecuencia de muestreo de Fs Hz y es de N bits, donde N es 8, 16, 24, o 32. Funcin xcorrr = xcorr (x, y) devuelve la correlacin cruzada de dos secuencias de tiempo discreto, x e y. Correlacin cruzada mide la similitud entre x y desplazados (rezagados) copias de y como una funcin del desfase. Si x e y tienen diferentes longitudes, la funcin anexa ceros al final del vector ms corto por lo que tiene la misma longitud, N, como la otra. Funcin findpeaksPKS = findpeaks (datos) devuelve un vector con los mximos locales (picos) del vector de seal de entrada, de datos. Un pico local es una muestra de datos que es o bien ms grande que sus dos muestras adyacentes o es igual a Inf. Se excluyen los puntos finales de seal no Inf. Si un pico es plana, la funcin devuelve slo el punto con el ndice ms bajo.

DESARROLLO PRACTICOA continuacin se implementa las rutinas para el desarrollo de la prctica de la fase final del curso de procesamientos de seales digitales, para ello se expone las rutinas necesarios para agregar y quitar el eco, para ello primeros se lee un archivo de tipo .wav:[u,fs,NBits]=wavread('voz_raul.wav');

A esta seal se le agrega eco mediante la suma se la seal original y dos seales retardadas de menor amplitud. En el ejemplo se utiliz un retardo para los ecos de 6500 muestras, y dos ecos de amplitudes 0,3 y 0,09:u1 = [u;zeros(13000,1)];u2 = 0.3*[zeros(6500,1);u;zeros(6500,1)];u3 = 0.09*[zeros(13000,1);u];u_eco = u1+u2+u3;

A continuacin se expone la grfica de la seal original del audio con el primer y segundo eco:

Luego se sumar estos ecos, se compara la seal original con la seal a la que se le adicionan los ecos, y se guarda la seal wav con eco:wavwrite(u_eco,fs,16,'voz_ejemplo_con_eco.wav')

Ahora, se utiliza la autocorrelacin de la seal de voz con eco para saber en cuales muestras se repite la seal. Lo que se hace es obtener la autocorrelacin y tomar los picos mximos de la grfica, en los cuales se repite la seal original (es decir, donde aparecen los ecos).[c,lag] = xcorr(u_eco); d = c((length(lag)+1)/2:length(lag),:);l = lag(:,(length(lag)+1)/2:length(lag)); [pks,locs]=findpeaks(d,'minpeakdistance',3000);

Estos comandos guardan los datos de la autocorrelacin de la seal con eco. El comando findpeaks ayuda a buscar los picos mximos de la seal, y as se obtiene el valor del retardo de estos ecos, y la amplitud en estos puntos.Ahora, sabiendo estos puntos, en el primer pico mximo se puede obtener el retardo de dicho eco (que sera el mismo para los dems ecos):N=locs(1);

Da como resultado N=6500. Ahora, se necesita saber de cuanto fue el aporte en ganancia de cada eco. Para esto, primero se obtiene el valor mximo de la autocorrelacin:M = max(d);

Este valor mximo tuvo como resultado M=408,174. Luego, se hace una proporcin entre el valor del pico donde aparecen los ecos y el valor mximo. De esta manera, se obtiene la magnitud de los ecos agregados:G1=(pks(1)/max(d));G2=(pks(2)/max(d));

Por lo tanto, las ganancias obtenidas fueron G1=0,299 y G2=0,116, que son aproximadas a las magnitudes de los ecos agregados (G1=0,3 y G2=0,09). Ahora, se filtran los ecos de la seal y se obtiene la seal original:u_eco1=u_eco;for i=2*N+1:length(u_eco) u_eco1(i)=u_eco(i) - G1*u_eco1(i-N) - G2*u_eco1(i-2*N);endu_new=u_eco1;

Se grafica la seal recuperada y se compara con la seal original, y por ltimo se graba el archivo wav de la seal recuperada.wavwrite(u_new,fs,16,'voz_raul_sin_eco.wav')