13 Laboratorio 7 PDS con la tarjeta de sonidos y Matlab El objetivo de esta sesión de laboratorio es mostrar que con algunos recursos de cómputo muy comunes se pueden implantar y probar algunos algoritmos de procesamiento digital de señales. 13.1. Introducción Una estación de trabajo, o laboratorio, para el procesamiento digital de señales incluirá al menos: Una tarjeta de adquisición de datos con puertos de entrada/salida analógicos, con opciones para selección de tasa de muestreo a gusto de el usuario, ganancia programable, y alta capacidad de almacenamiento (memoria). Unidad de procesamiento para la implantación de algoritmos de PDS, y Programática (software) de desarrollo. Se puede decir que es necesario: una computadora, una tarjeta DSP y programas de cómputo. En casi cualquier computadora personal se tiene disponible una tarjeta de sonido. También se pueden encontrar programas de cómputo para grabar y reproducir señales de audio. Usualmente, este programa viene incluído en Windows c, Linux, y demás sistemas operativos. Algunos sistemas multimedia incluyen un programa para desplegar y editar estas señales de audio 227
228 13.2. TARJETA DE ADQUISICIÓN DE DATOS usando diferentes formatos estándar como: wav, VOC, mp3, entre otros. Estos programas de cómputo pueden incluir diferentes opciones de despliegue en el dominio temporal, o en el dominio de la frecuencia, esto último en dos y tres dimensiones. La tarjeta de sonido proveerá la circuitería (hardware) necesaria para la adquisición de datos, usualmente con una resolución de 16 bits, con entrada/salida mono/estereo. Algunos programas para edición de archivos de audio, gratuitos (freeware) o de bajo costo (shareware), se pueden encontrar en internet. Algunos son muy sofisticados. Una opción es Cool95, llamado anteriormente CoolEdit. Una versión más actual es el programa de cómputo Audacity. Para completar la estación de laboratorio esta sofisticada circuitería debe ser complementada con Matlab que proveerá el ambiente de desarrollo para los algoritmos de PDS. Si se desea también se puede trabajar con alguna otra versión de acceso libre como Scilab, Octave, entre otras. 13.2. Tarjeta de adquisición de datos Se puede usar la tarjeta de sonido para registrar (grabar) señales analógicas en el intervalo de frecuencias de 0-11 khz, o superiores. Esto significa que las señales no necesariamente son señales de audio. Éstas pueden ser señales provenientes de una gran variedad de sensores o transductores y para una gran variedad de experimentos. Si se desea, se pueden usar señales de audio disponibles en el sistema, como los archivos WAV que aparecen bajo el subdirectorio Windows. 13.3. Filtrado Bajo el ambiente de Matlab se probará el efecto de diferentes diseños de filtros digitales. Filtro Pasa-bajas. Diseñe un filtro elíptico con las siguientes especificaciones: frecuencia de corte de 1 khz con -0.5 db de rizo, atenuación en la banda de rechazo de 40 db a 2 khz y frecuencia de muestreo de 11.025 khz. Antes de comenzar, se lee el archivo de la señal de audio a ser filtrada, al hacer eso se puede recuperar la frecuencia de muestreo, tal como fue grabada. Esta frecuencia de muestreo será empleada en el diseño del filtro digital. Una vez que haya encontrado el orden n del filtro, escriba (note que n debe haber sido definida previamente): Ejercicio 13.1 [sig,fs] = wavread( c:\cursopds\clau2.wav ); esct = [1:length(sig)]/Fs; plot(esct,sig) [num,den] = ellip(n,.5,40,1000/(fs/2)); [h,fr] = freqz(num,den,200,fs);
13.3. FILTRADO 229 semilogx(fr,20*log10(abs(h))) (El archivo.wav para este ejercicio puede ser cualquier archivo disponible en el sistema, pero es recomendable que no sea muy grande. Éste debe tener una duración entre uno y cinco segundos, con una frecuencia de muestreo de 11,025 Hz. Aquí se supone que el archivo de sonido ha sido colocado en el directorio c:\cursopds.) Nótese la muy estrecha banda de transición del filtro. Analice y explique cuál es el sentido o la acción de cada línea. Ejercicio 13.2 Ahora, genere una versión filtrada de la señal de audio escribiendo: sigfil = filter(num,den,sig); Ejercicio 13.3 Ahora se puede reproducir la señal original y la señal filtrada usando: sound(sig,fs) después de eso, sound(sigfil,fs) El efecto del filtrado es claramente audible; se puede también hacer una inspección visual del procesamiento efectuado sobre la señal de entrada. Si traza la gráfica de los vectores sig y sigfil obtendrá una representación en el dominio temporal de ambas señales. Eso equivale, en cierto modo, a tener un osciloscopio. Trace las gráficas de sig y sigfil. Ejercicio 13.4 Una mejor elección es usar una representación en el dominio de la frecuencia, en cuyo caso se espera ver más claramente el efecto del filtrado sobre el contenido de frecuencia de la señal. N = 512; escf = (0:(N/2)-1)/(N/2)*Fs/2; fft1 = 20*log10(abs(fft(sig,N))); plot(escf,fft1(1:n/2)) figure fft2 = 20*log10(abs(fft(sigfil,N))); plot(escf,fft2(1:n/2)) Recuérdese que la señal puede ser cualquier señal del mundo real proveniente de un micrófono o de algún proyecto de instrumentación personal. Ejercicio 13.5 Filtro pasa-altas (FPA) Diseñe y pruebe un filtro elíptico pasa-altas con las siguientes especificaciones: frecuencia de corte de 1.5 khz con 0.5 db de rizo, atenuación en la banda de rechazo de 40 db a 500 Hz. Si lo desea puede emplear la n anterior.
230 13.4. ALGUNOS EFECTOS DE SONIDO [num2,den2] = ellip(n,.5,40,1500/(fs/2), high ); [h,fr] = freqz(num2,den2,200,fs); semilogx(fr,20*log10(abs(h))) sighi = filter(num2,den2,sig); sound(sig,fs) sound(sighi,fs) Obsérvese el efecto del filtro en el dominio de la frecuencia, como se hizo ántes. Ejercicio 13.6 Filtro pasa-banda (FPB) Pruebe un filtro pasa-banda con f 1 = 500 Hz, f low = 1000, f up = 2000, y f 2 = 3000 Hz. Rizo en la banda de paso de 0.5 db y atenuación en la banda de rechazo de 40 db. Escuche el efecto del filtro sobre el archivo de voz. Ejercicio 13.7 Filtro Rechazo de banda (FRB) Finalmente, pruebe un filtro rechazo de banda con f 1 = 500 Hz, f low = 1000, f up = 2000, y f 2 = 3000 Hz; con un rizo en la banda de paso de 0.5 db y atenuación en la banda de rechazo de 40 db. 13.4. Algunos efectos de sonido Ejercicio 13.8 Para escuchar algunos efectos divertidos sobre el archivo de voz, introduzca lo siguiente: siginv = sig(length(sig):-1:1); sound(siginv,fs) Suena a algo así como: Ich weise nicht Deutsch sprechen!, cierto? 13.5. Un poco de reverberación Reverberación es el resultado de muchas reflexiones de sonido que ocurren en un cuarto. Esto puede ser modelado usando algoritmos digitales que intentan imitar las reverberaciones del cuarto usando principalmente dos tipos de filtros RII. Uno de estos filtros es el filtro en peine (comb filter), y el otro es el filtro pasa-todo (all-pass filter). 13.5.1. Filtro digital pasa-todo Ejercicio 13.9 Introduzca las siguientes instrucciones: num = [0.5;zeros(400,1);1]; den = [1;zeros(400,1);.5]; echo = filter(num,den,sig);
13.6. GENERACIÓN DE SEÑALES 231 sound(echo,fs) num = [0.5;zeros(2000,1);1]; den = [1;zeros(2000,1);.5]; echo = filter(num,den,sig); sound(echo,fs) Investigue por qué se le llama filtro pasa-todo y qué sentido tiene aplicar un filtro así. 13.6. Generación de señales Es posible generar casi cualquier señal y enviarla a través de la tarjeta de sonido en la misma manera que se reproducen los archivos WAV. La señal generada puede ser el resultado de un algoritmo de procesamiento digital de señales, como la transformada rápida de Fourier (FFT), o cualquier otra operación, ya que la señal es justamente una secuencia de números en un vector. Ejercicio 13.10 El siguiente es un simple ejemplo: Fs = 8000; delta_t = 1/Fs; dur = 1; tt = 0:delta_t:dur; frec1 = 300; x1 = cos(2*pi*frec1*tt); sound(x1,fs) frec2 = 1000; x2 = cos(2*pi*frec2*tt); sound(x1,fs) xs = x1+x2; sound(xs,fs) Finalmente, seleccione una salida de 7000 Hz, frec3 = 7000; x3 = cos(2*pi*frec3*tt); sound(x3,fs) Compare este sonido con x2 sound(x2,fs) Explique qué sucede con el sonido de 7000 Hz.
232 BIBLIOGRAFÍA Bibliografía [1] The Student Edition of Matlab, Version 5 User s Guide. The Math- Works, Inc., Prentice Hall, Upper Sadle River, NJ 07458, (1997).