técnicas digitales iii proyecto integrador

97
Universidad Tecnológica Nacional Facultad Regional San Nicolás Técnicas Digitales III Proyecto Integrador Analizador de espectros Integrantes: Benitez Pablo A. Carranza Rodrigo Curaratti Nazareno J. Docentes: Ing. Poblete, Felipe. Sr. González, Mariano. Julio de 2006

Upload: others

Post on 26-Nov-2021

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Técnicas Digitales III Proyecto Integrador

Universidad Tecnológica Nacional Facultad Regional San Nicolás

Técnicas Digitales III

Proyecto Integrador

Analizador de espectros

Integrantes: Benitez Pablo A. Carranza Rodrigo Curaratti Nazareno J. Docentes: Ing. Poblete, Felipe. Sr. González, Mariano. Julio de 2006

Page 2: Técnicas Digitales III Proyecto Integrador

Índice General Capítulo 1 Introducción general

>Introducción........................................................................................................... >Obtención de datos y análisis................................................................................ >Etapas para el análisis............................................................................................ > Etapa de entrada..................................................................................... > Adaptador de nivel................................................................................. > Adquisición............................................................................................. > Medición................................................................................................. >Memoria.................................................................................................. >Presentación............................................................................................ >Diagrama en bloques............................................................................................. >Procesamiento de señales......................................................................................

>Aplicaciones comerciales...................................................................................... >Consultas................................................................................................................

>Materias Integradas .............................................................................................

I – 1. I – 1. I – 1. I – 1. I – 1. I – 1. I – 1. I – 1. I – 1. I – 2. I – 2. I – 3. I – 3. I – 3.

Capítulo 2 Sonido

>Introducción........................................................................................................... >Características físicas............................................................................................ >Frecuencia................................................................................................ >Amplitud y volumen................................................................................ >Decibelio dB............................................................................................ >Medición del nivel sonoro....................................................................... >El dBA o la ponderación -A-................................................................... >Suma de niveles de sonido. .................... .................... .................... ..... >Presión Acústica y el Nivel de Presión Acústica. .................... .............. >Intensidad fisiológica de un sonido. .................... .................... ............. >Intensidad Acústica y el Nivel de Intensidad Acústica. .................... .... >Potencia Acústica y Nivel de Potencia Acústica. .................... .............. >Tiempo de Reverberación. .................... .................... .................... ....... >Coeficiente de Absorción de un material. .................... .................... .... >Timbre. .................... .................... .................... .................... ............... >Velocidad del sonido. .................... .................... .................... .............. >Refracción, reflexión e interferencia. .................... .................... ........... >Eco, Reverberación y Resonancia. .................... .................... ............... >Altura (tono) de un sonido. .................... .................... .................... ...... >Sensación de tono. .................... .................... .................... ................... >El efecto Doppler. .................... .................... .................... .................... >Tres tipos de sonido importantes. .................... .................... ................. >Octava, media octava y tercio de octava. .................... .................... ..... >Filtro de ancho de banda constante. .................... .................... ............. >Filtro de ancho de banda proporcional. .................... .................... ........ >Disminución espacial del nivel sonoro. .................... .................... ........

>Micrófono. .................... .................... .................... .................... .................... ... >Bibliografía. ..........................................................................................................

II – 1. II – 2. II – 2. II – 2. II – 3. II – 3. II – 4. II – 4. II – 4. II – 4. II – 5. II – 5. II – 5. II – 5. II – 6. II – 6. II – 6. II – 7. II – 7. II – 8. II – 8. II – 8. II – 9. II – 9. II – 10. II – 11. II – 11. II – 12.

Capítulo 3 Ruido

>Introducción. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ...... >Ruido rosa. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........

III – 1. III – 1.

Page 3: Técnicas Digitales III Proyecto Integrador

>Ruido blanco. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ..... >Contaminación acústica. ........ ........ ........ ........ ........ ........ ........ ........ ........ ...... >Clasificación. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ..... >Bibliografía. .........................................................................................................

III – 1. III – 1. III – 2. III – 2.

Capítulo 4 Muestreo de señales >Introducción. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ...... >Representación de una señal de tiempo continuo mediante sus muestras. ........ .. >Muestreo con tren de impulsos. ........ ........ ........ ........ ........ ........ ........ ........ .... >Muestreo con retenedor de orden cero. ........ ........ ........ ........ ........ ........ ........ .

>Bibliografía. ......................................................................................................... >Materia Integrada..................................................................................................

IV – 1. IV – 1. IV – 2. IV – 4. IV – 4. IV – 4.

Capítulo 5 Conversión de señales analógicas a digitales.

>Introducción. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Digitalización del sonido: Velocidad de Muestreo y Cuantización. .... .... .... ....

>Ventajas del audio digital. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Pasaje de una señal eléctrica a una señal digital. .... .... .... .... .... .... .... .... .... .... >Cantidad de sub intervalos en que se divide el rango útil de la señal. .... .... .... .. >Resolución de un sistema de audio digital.... .... .... .... .... .... .... .... .... .... .... .... . >Frecuencia de muestreo. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Reconstrucción de la señal digitalizada. .... .... .... .... .... .... .... .... .... .... .... .... ... >Relación entre el ruido de digitalización y la resolución. .... .... .... .... .... .... .... .. >Dither. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ..... >Dither digital. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Reproducción....... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Procesamiento digital. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .....

>Bibliografía. ......................................................................................................... >Materia Integrada..................................................................................................

V – 1. V – 1. V – 2. V – 2. V – 2. V – 2. V – 3. V – 3. V – 3. V – 4. V – 4. V – 4. V – 4. V – 5. V – 5.

Capítulo6 Síntesis del sonido

>Introducción. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Sintetizadores. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >Osciladores. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Filtros. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... . >Amplificadores. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... . >Procesamiento del sonido digitalizado. .... .... .... .... .... .... .... .... .... .... .... .... .... >Aumento o disminución de volumen. .... .... .... .... .... .... .... .... .... .... ... >Filtrado. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >Mezcla. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Cortado y pegado. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >Procesamiento digital de señales. .... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >Filtro pasa altos. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... . >Filtro pasa bajos. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Eco. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Software de Edición y reproducción.... .... .... .... .... .... .... .... .... .... .... .... .... .... >Bibliografía. .........................................................................................................

VI – 1. VI – 1. VI – 1. VI – 1. VI – 1. VI – 1. VI – 1. VI – 1. VI – 1. VI – 2 . VI – 2. VI – 2. VI – 2. VI – 2. VI – 2. VI – 2.

Capítulo7 Tarjeta de sonido

>Introducción. .................. .................. .................. .................. .................. .......... >Componentes fundamentales de una placa de sonido.................. .................. .....

VII– 1. VII– 1.

Page 4: Técnicas Digitales III Proyecto Integrador

>El muestreo.................. .................. .................. .................. .................. >El tamaño de la muestra.................. .................. .................. ................. >MIDI.................. .................. .................. .................. .................. ......... >Procesadores multi-propósito de señales digitales.................. ............... >Efectos de sonido 3D.................. .................. .................. .................. ... >Entrada y salida digital.................. .................. .................. ................... >Número de Bits.................. .................. .................. .................. ............ >Número de voces.................. .................. .................. .................. ......... >Calidad del sonido – KHz.................. .................. .................. ............... >Tipo de síntesis MIDI.................. .................. .................. .................. .. >Los parlantes.................. .................. .................. .................. ................ >Otras Utilidades.................. .................. .................. .................. ........... >Entradas salidas. Tipos de conectores.................. .................. .................. .......... >Características técnicas e Información de la placa de sonido utilizada...............

>Bibliografía, Materia integrada..............................................................................

VII– 1. VII– 1. VII– 1. VII– 1. VII– 2. VII– 2. VII– 2. VII– 2. VII– 2. VII– 2. VII– 2. VII– 3. VII– 4. VII– 5. VII– 5.

Capítulo8 DSP (Digital Signal Procesor)

>Introducción. ….…….…….…….…….…….…….…….…….…….…….…….. >Procesador de sonido digital (DSP). ….…….…….…….…….…….…….…….. >El Chip sintetizador de FM. ….…….…….…….…….…….…….…….…….…. >Programación del puerto MIDI para I/O. ….…….…….…….…….…….……... >El modo SB-MIDI. ….…….…….…….…….…….…….…….…….… >El modo MPU-401. ….…….…….…….…….…….…….…….…….... >Bibliografía, Materia Integrada.............................................................................

VIII– 1. VIII– 1. VIII– 2. VIII– 4. VIII– 4. VIII– 4. VIII– 5.

Capítulo9 Formatos digitales

>Introducción. ……………………………………………………………………. >Almacenamiento. ……………………………………………………………….. >Sonido Audio Digital. …………………………………………………. >Formato de archivo: WAVE.................................................................................

>Introducción. …………………………………………………………. >Especificación RIFF. ……………………………………..................... >Ficheros de sonido WAVE. …………………………………………... >Tipo de compresión utilizado por WAVE. …………………………… >Formato de los ficheros de Sonido WAV. ……………………………. >Lectura y grabación de archivos WAVE bajo Windows. …………….. >Análisis de frecuencia. ……………………………………...................

IX– 1. IX– 1. IX– 1. IX– 3. IX– 3. IX– 3. IX– 3. IX– 3. IX– 4. IX– 4. IX– 4.

Capítulo 10 MCI de Windows

>Introducción. ……………………………………………………………………. >Comandos MCI “Strings” y “Messages”. ………………………………………. >Comandos “Strings”. ………………………………………………….. >Comandos “Messages”. ……………………………………………….. >Posibilidades de audio de las cadenas de comandos. …………………. >Clasificación de los comandos MCI. …………………………………………… >Comandos del sistema . ……………………………………………….. >Los Comandos requeridos. ……………………………………………. >Los Comandos básicos. ……………………………………………….. >Los Comandos extendidos. ……………………………………………. >Funciones MCI, Macros, y Mensajes. ………………………………………….. >Descripción de la macro ……………………………………………… >Espera, Notificación, y Banderas Prueba ………………………………………

X – 1. X – 1. X – 1. X – 2. X – 2. X – 3. X – 3. X – 3. X – 3. X – 4. X – 4. X – 4. X – 5.

Page 5: Técnicas Digitales III Proyecto Integrador

>Bandera de la Espera ………………………………………………….. >Bandera de información. ……………………………………………... >Bandera de Prueba …………………………………………………….. >Comandos de atajo y Variaciones …………………………………………….. >Dispositivos MCI ……………………………………………………………… >Control del dispositivo ……………………………………………….. >Reproducción y Posicionamiento …………………………………….. >Tipos de dispositivos …………………………………………………. >Nombres de los dispositivos ………………………………………….. >Driver de soporte para los Comandos de MCI ……………………….. >Trabajando con dispositivos MCI……………………………………………….. >Abriendo un dispositivo. ……………………………………………… >Usando un seudónimo. ………………………………………. >Especificando un tipo de dispositivo......................................... >Los dispositivos simples y compuestos. ……………………... >Abriendo un dispositivo usando la extensión. ……………….. >Archivo nuevo de dato. ……………………………………… >Información recuperada de un Dispositivo ……………………………. >Obtención de la información del sistema de MCI ……………………. >Ejecutando un Dispositivo ……………………………………………. >Grabación ……………………………………………………………... >Guardando un Archivo Grabado ……………………………. >Detener, y hacer una pausa. …………………………………………… >Cerrando un Dispositivo ……………………………………………… >La interfaz de mensajes de comandos desde el lenguaje C……………………... >Resumen del manejo de un dispositivo MCI. ………………………………….. >Limitaciones de los comandos MCI……………………………………………..

X – 5. X – 5. X – 5. X – 5. X – 6. X – 6. X – 6. X – 7. X – 7. X – 8. X – 8. X – 8. X – 8. X – 8. X – 8. X – 9. X – 9. X – 9. X – 9. X – 9. X – 10. X – 10. X – 10. X – 10. X – 11. X – 11. X – 12.

Capítulo 11 Programa de adquisición >Introducción. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ...

>Programas bajo Windows.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Independencia de la máquina.... .... .... .... .... .... .... .... .... .... .... .... .... .... >Recursos.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Ventanas.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Eventos.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Proyectos.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ................ >Controles.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .

>Descripción del Programa. .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Ficheros de cabecera.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >Declaración del prototipo de las funciones. .... .... .... .... .... .... .... .... .... .. >Declaración de variables globales.... .... .... .... .... .... .... .... .... .... .... .... ... >Función Win main.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ..

>Declaración.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ... >Inicialización.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... . >Bucle de mensajes.... .... .... .... .... .... .... .... .... .... .... .... .... .... ...

>El procedimiento de ventana.... .... .... .... .... .... .... .... .... .... .... .... .... .... . >Manipulador de mensajes.... .... .... .... .... .... .... .... .... .... .... .... .

>Menús.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... . >Funciones de grabación y reproducción.... .... .... .... .... .... .... .... .... .... ....

>Función Grabar.... .... .... .... .... .... .... .... .... .... .... .... ... >Función Reproducir.... .... .... .... .... .... .... .... .... .... .... .

>Funciones de diálogo.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .. >Función diálogo “Nombre de archivo” .... .... .... .... ...... >Función diálogo “Tiempo de adquisición” .... .... .... ....

>Fichero cabecera “ids.h” .... .... .... .... .... .... .... .... .... .... .... .... .... .... ......

XI – 1. XI – 1. XI – 1. XI – 1. XI – 1. XI – 1. XI – 2. XI – 2. XI – 2. XI – 2. XI – 3. XI – 3. XI – 4. XI – 4. XI – 4. XI – 5. XI – 5. XI – 5. XI – 6. XI – 7. XI – 7. XI – 10. XI – 11. XI – 11. XI – 12. XI – 13.

Page 6: Técnicas Digitales III Proyecto Integrador

>Ficheros de recursos.... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Menú.... .... .... .... .... .... .... .... .... .... .... .... .... .... ......... >Diálogos. .... .... .... .... .... .... .... .... .... .... .... .... .... .......

>Estructura del proyecto......... .... .... .... .... .... .... .... .... .... .... .... .... .... .... >Cabecera ids.h.... .... .... .... .... .... .... .... .... .... .... .... ....

>winMenu.c.... .... .... .... .... .... .... .... .... .... .... .... .... .... >Recurso win003.rc.... .... .... .... .... .... .... .... .... .... .... ...

>Manejo de la aplicación.. .... .... .... .... .... .... .... .... .... .... .... .... .... .... ....

XI – 13. XI – 14. XI – 14. XI – 14. XI – 15. XI – 15. XI – 15. XI – 17.

Capítulo 12 Transformadas de Fourier y la DFT.

>Introducción......................................................................................................... >Clases CT y DT de métodos de Fourier............................................................... >Transformada clásica de Fourier para señales de tiempo continuo...................... >Definición (CTFT)................................................................... >El espectro de Fourier del modelo de muestreo de tiempo continúo. .................. >La transformada de Fourier de tiempo discreto.................................................... >Relación entre el espectro de tiempo continuo y discreto........ >La transformada discreta de Fourier (DFT)..........................................................

XII – 1. XII – 1. XII – 2. XII – 2. XII – 2. XII – 2. XII – 3. XII – 3.

Capítulo 13 Análisis de espectro con MATLAB.

>Introducción......................................................................................................... ... >Procesamiento.m............................................................... ..................................... >En tiempo continuo...................... .......................................................................... >En tiempo Discreto. .................. ............................................................................. >Espectro continuo.................................................... ............................................... >Espectro discreto..................................................................................................... >Bibliografía.......................................................... ...................................................

XIII – 1. XIII – 2. XIII – 3. XIII – 3. XIII – 4. XIII – 5. XIII – 5.

Apéndice A Código fuente del programa.

>winmenu.c......................................................................................................... ... >Recurso win003.rc........................................................... ....................................

A – 1. A – 15.

Page 7: Técnicas Digitales III Proyecto Integrador

I - 1

Capítulo 1 Introducción general

Introducción.

En este apartado se presentaran los componentes fundamentales del proyecto los cuales serán tratados con profundidad en los siguientes capítulos. El analizador de espectros aquí tratado consiste en tomar una señal cualquiera y obtener su contenido frecuencial. Dicho de otro modo se representaran gráficamente las amplitudes de cada una de las armónicas que componen la señal, utilizando para ello una PC.

Obtención de datos y análisis.

Existen varias formas de realizar el análisis de espectro, una de las mas sencillas es adquiriendo los datos de forma digital y luego procesarlos. Para ello utilizaremos la placa de sonido como adquisidor, una vez que obtenemos los datos los almacenamos en disco con un formato de tipo de onda o sea lo almacenamos como un archivo cuya extensión es “.wav”. para el análisis de espectro se toma este archivo se elimina la cabecera y se lo procesa en el programa MATLAB.

Etapas para el análisis

Para poder realizar el análisis frecuencial se tienen las siguientes etapas: • Etapa de entrada. • Adaptador de nivel. • Adquisición. • Medición. • Memoria. • Presentación.

Etapa de entrada: Es la encargada de impedir el paso de señales indeseables y proteger al dispositivo en caso de sobre tensión o algún otra anomalía.

Adaptador de nivel: Consiste en variar la ganancia de un amplificador con el objetivo de obtener una señal con un nivel constante de amplitud para que los datos obtenidos en la adquisición no se modifiquen constantemente con cualquier variación de la amplitud de la señal de entrada.

Adquisición: Consiste en tomar los datos que luego serán procesados.

Medición: Para realizar la medición o sea interpretar los datos obtenidos es importante conocer el rango de frecuencias en el cual se está realizando la adquisición de estos datos, es decir la frecuencia mínima y máxima de muestreo, que en este caso se encuentra en 50Hz y 50kHz, rango que comprende el espectro de audición humana.

Memoria: Es la encargada de almacenar los datos obtenidos de la adquisición, para ello se usa la memoria RAM de la PC.

Presentación: Por medio de un programa poder visualizar los datos obtenidos y procesados.

Page 8: Técnicas Digitales III Proyecto Integrador

I - 2

Diagrama en bloques.

La etapa de adquisición y filtrado es realizada por medio de una placa de sonido la cual posee un DSP y un filtro pasa bajos. La adquisición se realiza después de que la señal fue filtrada por el filtro pasa bajos, el cual evita el paso de señales de alta frecuencia que no están en el rango de medición. La señal debe ser muestreada a una razón de muestreo determinada. Estas acciones la ejecuta la placa de sonido ya que posee el filtro pasa bajos y realiza el muestreo de la señal a una frecuencia de muestreo de hasta 44,1 Khz a 16 bits. Los datos obtenidos del muestreo se almacenan en la memoria RAM de la PC, luego, estos datos, son usados por el software para realizar el procesamiento de dichos datos. El procesamiento consiste en obtener las componentes frecuenciales de la señal muestreada.

Procesamiento de señales

El procesamiento de la señal se puede realizar de dos formas: ⇒ Análisis mediante Transformada Rápida de Fourier. Es un análisis de banda angosta que se aplica sobre cada señal muestreada. Para ello se debe segmentar los datos muestreados en varias ventanas, luego ponderar cada ventana definida, una ves realizado este proceso se aplica el algoritmo de la Transformada Rápida de Fourier a cada ventana previamente ponderada y se obtienen los espectros de todas las ventanas y finalmente la promediación del los espectros hallado con uno anteriormente calculado. ⇒ Análisis mediante Filtros Digitales. Para hacer el análisis de banda ancha por octavas ó tercio de octavas la cual es mayormente usado en Audio y Acústica. Consiste en pasar el segmento de datos muestreados a través de un banco de filtros pasabanda con frecuencia centrales y ancho de banda estandarizados ( 37.5 Hz, 63 Hz, 125 Hz, 250 Hz, ... frecuencias centrales de los filtros por octava ). A la salida de cada filtro se obtendrá una señal filtrada, a la cual se le halla su potencia eléctrica, agrupando todas las potencias de las señales obtenidas a la salida de cada filtro, se consigue un espectro de potencia que refleja la distribución espectral de la señal muestreada. Para hacer el análisis de una señal en la banda de audio se requiere 10 filtros pasabanda analógicos por octavas ó 30 filtros pasa banda analógicos por 1/3 de octava, pero usando técnicas de procesamiento se consigue realizar el análisis por octava con sólo un filtro digital pasabanda ó sólo 3 filtros por 1/3 de octava.

Page 9: Técnicas Digitales III Proyecto Integrador

I - 3

Aplicaciones comerciales:

El analizador de espectros puede ser usado para variadas aplicaciones tanto en ambientes industriales como también aplicaciones didácticas, algunas de estas aplicaciones son las siguientes:

Encontrar las respuestas de los filtros. Medición de equipos de Audio. Medición de parámetros acústicos. Ecualización de salas acústicas. Análisis modal de estructuras. Análisis de ruidos.

Consultas

Al comienzo de nuestro proyecto fue de mucha importancia obtener información de los distintos métodos para el análisis de espectros, para ello se realizaron consultas al Ing. Franzini Hugo profesor de la cátedra Comunicaciones I, ya que dicha materia trata el tema de transformada de Fourier; y al Ing. Culasso Víctor profesor de la cátedra Medidas electrónica II, en dicha materia se trata el tema “análisis de espectros”. La consulta a los profesores antes mencionados nos llevo a realizar el proyecto tomando como fundamento un análisis de espectro digital. En los capítulos posteriores se nombran las consultas realizadas y la bibliografía utilizada para cada tema.

Materias Integradas.

Informática II, Análisis de señales y sistemas, Comunicaciones I, Técnicas digitales III, Medidas electrónicas II.

Page 10: Técnicas Digitales III Proyecto Integrador

II - 1

Capítulo 2 Sonido

Introducción

El Sonido es un fenómeno físico que percibimos al producirse una perturbación en el medio en el cual estamos, son ondas que en este caso, se propagan por aire, sólidos o líquidos. El cuerpo humano percibe el sonido como un cambio en la presión del aire en el tímpano. De este modo, por ejemplo: si alguien aplaude, ese aplauso desplaza aire que hace vibrar a las sensibles membranas de nuestros oídos, esa vibración es decodificada por el cerebro como sonido. Es una forma de energía mecánica que se representa por una onda sinusoidal que muestra vibraciones a lo largo del tiempo. En los seres humanos, esto ocurre siempre que una vibración con frecuencia comprendida entre unos 15 y 20.000 hercios llega al oído interno. El hercio (Hz) es una unidad de frecuencia que corresponde a un ciclo por segundo. Estas vibraciones llegan al oído interno transmitidas a través del aire, y a veces se restringe el término “sonido” a la transmisión en este medio. Sin embargo, en la física moderna se suele extender el término a vibraciones similares en medios líquidos o sólidos. Los sonidos con frecuencias superiores a unos 20.000 Hz se denominan ultrasonidos.

En general, las ondas pueden propagarse de forma transversal o longitudinal. En ambos casos, sólo la energía y la cantidad de movimiento del movimiento ondulatorio se propagan en el medio; ninguna parte del propio medio se mueve físicamente a una gran distancia. Por ejemplo, imaginemos que atamos firmemente una cuerda a un poste por un extremo, la estiramos sin tensarla del todo y sacudimos el otro extremo. Una onda se desplazará por la cuerda hacia el poste, donde se reflejará y volverá hacia la mano. En realidad, ninguna parte de la cuerda se mueve longitudinalmente hacia el poste, pero todas las partes de la cuerda se mueven transversalmente. Este tipo de movimiento ondulatorio se denomina onda transversal. Del mismo modo, si tiramos una piedra a un estanque, una serie de ondas transversales se propaga desde el punto de impacto. Un corcho que flote cerca de dicho punto se moverá hacia arriba y hacia abajo, es decir, de forma transversal a la dirección del movimiento ondulatorio, pero apenas mostrará movimiento longitudinal. En cambio, una onda de sonido es una onda longitudinal. A medida que la energía del movimiento ondulatorio se propaga alejándose del centro de la perturbación, las moléculas de aire individuales que transmiten el sonido se mueven hacia delante y hacia atrás, de forma paralela a la dirección del movimiento ondulatorio. Por tanto, una onda de sonido es una serie de compresiones y enrarecimientos sucesivos del aire. Cada molécula individual transmite la energía a las moléculas vecinas, pero una vez que pasa la onda de sonido, las moléculas permanecen más o menos en la misma posición.

Características físicas

Cualquier sonido sencillo, como una nota musical, puede describirse en su totalidad especificando tres características de su percepción: el tono, la intensidad y el timbre. Estas características corresponden exactamente a tres características físicas: la frecuencia, la amplitud y la composición armónica o forma de onda. El ruido es un sonido complejo, una mezcla de diferentes frecuencias o notas sin relación armónica.

Page 11: Técnicas Digitales III Proyecto Integrador

II - 2

Frecuencia Percibimos la frecuencia de los sonidos como tonos más graves o más agudos. La frecuencia es el número de ciclos (oscilaciones) que una onda sonora efectúa en un tiempo dado; se mide en hercios (ciclos por segundo). Existen distintos métodos para producir sonido de una frecuencia deseada. Por ejemplo, un sonido de 440 Hz puede crearse alimentando un altavoz con un oscilador sintonizado a esa frecuencia. También puede interrumpirse un chorro de aire mediante una rueda dentada con 44 dientes que gire a 10 revoluciones por segundo; este método se emplea en las sirenas. Los sonidos de un altavoz y una sirena de la misma frecuencia tendrán un timbre muy diferente, pero su tono será el mismo, equivalente al la situado sobre el do central en un piano. El siguiente la del piano, la nota situada una octava por encima, tiene una frecuencia de 880 Hz. Las notas situadas una y dos octavas por debajo tienen frecuencias de 220 y 110 Hz respectivamente. Por definición, una octava es el intervalo entre dos notas cuyas frecuencias tienen una relación de uno a dos. Una ley fundamental de la armonía afirma que dos notas separadas por una octava producen una combinación eufónica cuando suenan simultáneamente. Cuando el intervalo es de una quinta o de una tercera mayor, la combinación es progresivamente menos eufónica. En física, un intervalo de una quinta implica que la relación de las frecuencias de ambas notas es de tres a dos; en una tercera mayor, la relación es de cinco a cuatro. La ley de la armonía afirma que dos o más notas producen un sonido eufónico al sonar de forma simultánea si la relación entre sus frecuencias corresponde a números enteros pequeños; si las frecuencias no presentan dichas relaciones, se produce una disonancia.

Amplitud y Volumen. La amplitud de una onda de sonido es el grado de movimiento de las moléculas de aire en la onda, que corresponde a la intensidad del enrarecimiento y compresión que la acompañan. Cuanto mayor es la amplitud de la onda, más intensamente golpean las moléculas el tímpano y más fuerte es el sonido percibido. La amplitud de una onda de sonido puede expresarse en unidades absolutas midiendo la distancia de desplazamiento de las moléculas del aire, o la diferencia de presiones entre la compresión y el enrarecimiento, o la energía transportada. Por ejemplo, la voz normal presenta una potencia de sonido de aproximadamente una cienmilésima de vatio. Sin embargo, todas esas medidas son muy difíciles de realizar, y la intensidad de los sonidos suele expresarse comparándolos con un sonido patrón; en ese caso, la intensidad se expresa en decibelios.

Page 12: Técnicas Digitales III Proyecto Integrador

II - 3

Decibelio dB El decibelio es una unidad logarítmica de medida utilizada en diferentes disciplinas de la ciencia. En todos los casos se usa para comparar una cantidad con otra llamada de referencia. Normalmente el valor tomado como referencia es siempre el menor valor de la cantidad. En algunos casos puede ser un valor promediado aproximado. En Acústica la mayoría de las veces el decibelio se utiliza para comparar la presión sonora, en el aire, con una presión de referencia. Este nivel de referencia tomado en Acústica, es una aproximación al nivel de presión mínimo que hace que nuestro oído sea capaz de percibirlo. El nivel de referencia varia lógicamente según el tipo de medida que estemos realizando. No es el mismo nivel de referencia para la presión acústica, que para la intensidad acústica o para la potencia acústica. A continuación se dan los valores de referencia. Nivel de Referencia para la Presión Sonora (en el aire) = 0.00002 = 2E-5 Pa (rms) Nivel de Referencia para la Intensidad Sonora ( en el aire) = 0.000000000001 = 1E-12 w/m^2 Nivel de Referencia para la Potencia Sonora (en el aire) = 0.00000000001 = 1E-12 w Como su nombre indica el decibelio es la décima parte del Bel. El Bel es el logaritmo en base 10 de la relación de dos potencias o intensidades. No obstante esta unidad resulta demasiado grande por lo que se ha normalizado el uso de la décima parte del Bel, siendo el decibel o decibelio. La formula para su aplicación es la siguiente, partiendo que la intensidad acústica en el campo lejano es proporcional al cuadrado de la presión acústica, se define el nivel de presión sonora como:

RR

PP

P

P

PL log20log10

2

==

Siendo Lp = Nivel de Presión sonora; p la presión medida; pr la presión de referencia (2E-5 Pa). Como es fácil ver el nivel de referencia siempre se corresponde con el nivel de 0 dB:

dBLP 01log2000002,000002,0

log20 ===

Por la tanto en 0 dB tenemos el umbral de audición del oído humano, se supone que no es posible oír por debajo de este nivel, o sea variaciones de nivel en la presión del aire inferiores a 0,00002 pascal. La razón por la que se utiliza el decibelio es que si no, tendríamos que estar manejando números o muy pequeños o excesivamente grandes, con lo que la posibilidad de error seria muy grande al hacer cálculos. Además también hay que tener en cuenta que el comportamiento del oído humano esta más cerca de una función logarítmica que de una lineal, ya que no percibe la misma variación de nivel en las diferentes escalas de nivel, ni en las diferentes bandas de frecuencias.

Medición del Nivel Sonoro Para medir el nivel sonoro disponemos de los Sonómetros. Estos aparatos nos permiten conocer el Nivel de Presión sonora o SPL (Sound Presure Level). Normalmente suelen ser sistemas digitales y presentan en una pantalla de cristal liquido los valores medidos. Estos siempre se dan como decibelios dB y en referencia al valor antes señalado de (2E-5 Pa). Con el sonómetro es posible además del hallar el valor rms de la presión, también ver los picos máximos y niveles mínimos de la medida. Los sonómetros normalmente no dan la medida en dB lineales si no que dan ya con la ponderación y son dBA/dBC etc.. Una función muy utilizada a la hora de medir niveles de presión acústica y que ofrecen los sonómetros es la medición en modo Leq. Normalmente se utiliza el Leq 1' (leq a un minuto). El sonómetro mide las diferentes

Page 13: Técnicas Digitales III Proyecto Integrador

II - 4

presiones que se generan durante un tiempo determinado (Leq X) siendo X = 1 minuto en nuestro caso, el valor que nos da al finalizar el minuto de medida es un valor en dB que equivaldría al de una señal de valor continuo durante todo el minuto y que utilizaría la misma energía que se ha medido durante el minuto. Hay que observar que en una medida de un minuto los valores varían y si se quiere determinar un valor medio de ruido hay que hacerlo con la función Leq, de otra forma se obtendrán valores erróneos puesto que podemos tener valores de pico durante un instante y no ser representativos del nivel de ruido normal que se esta intentando determinar.

El dBA o la ponderación -A- En el punto anterior hemos visto que el dB es un valor lineal, quiere decir que los valores medidos son los valores tomados como validos sin que sufran ninguna alteración. Si los valores de presión acústica los medimos de esta forma, linealmente, aun siendo cierta dicha medida, tendrá poco valor en cuanto a la percepción del odio humano. El oído no se comporta igual para el mismo nivel de presión en diferentes frecuencias. Por ejemplo tomemos un sonido lineal en toda la banda de 20 Hz a 20 kHz tenemos en todas las bandas un nivel de 30 dB, si nuestro oído fuese lineal oiríamos los mismo o mejor con la misma intensidad auditiva las frecuencias mas bajas, que las medias y que las agudas. Sin embargo esto no es cierto el oído humano tiene una menor sensibilidad en las frecuencias mas graves, y en las mas agudas frente a las medias. Lo que mas oímos por tanto son las frecuencias medias, y las que menos las mas graves seguidas de las más agudas. Como vemos es necesario encontrar una forma de ajustar los niveles de dB que hemos medido con la percepción que el oído tiene de los mismos según cada frecuencia. Esta corrección se realiza ponderando los dB medidos mediante una tabla de ponderación ya especificada y que se llama tabla "A". Los decibelios ya ponderados en "A" se representan como dBA y los no ponderados, llamados lineales, como dB. Por ejemplo si en una frecuencia de 100 Hz hemos medido 80 dB, al ponderarlo pasaran a ser 60,9 dBA, esto quiere decir que un nivel de presión sonora de 80 dB en una frecuencia de 100 Hz es oída por nuestro sistema de audición como si realmente tuviese 60,9 dBA y no 80 dB.

Suma de niveles de sonido Hemos visto que el decibelio es una función logarítmica y por tanto cuando hablamos de dB de presión sonora no es posible sumarlos sin mas. Por ejemplo 30 dB + 30 dB no es igual a 60 dB si no a 33 dB como vamos a ver a continuación. Para poder sumar dos decibelios podemos emplear la siguiente ecuación:

)1010log(10 101021

21 dBdB

dBdB +=+

La suma de dos dB nunca puede ser más de 3 dB más que el mayor de los dos. Si la diferencia que hay entre los dos valores a sumar es mayor de 10 dB la suma no tiene valor practico y se toma el valor del mayor de los dos. Por ejemplo si sumamos 20 dB + 10 dB el resultado será igual a 20 dB (aproximado). Solamente son significativos para la suma los valores que tienen una diferencia menor a 10 dB.

Presión Acústica y el Nivel de Presión Acústica La presión sonora como hemos visto antes, es la presión que se genera en un punto determinado por una fuente sonora. El nivel de presión sonora SPL se mide en dB(A) SPL y determina el nivel de presión que realiza la onda sonora en relación a un nivel de referencia que es 2E-5 Pascal en el aire. Es el parámetro más fácil de medir, se puede medir con un sonómetro. Su valor depende del punto donde midamos, del local etc. Realmente no da mucha información sobre las características acústicas de la fuente, a no ser que se haga un análisis frecuencia de los nivel de presión, dado que el SPL siempre esta influenciado por la distancia a la fuente, el local etc.

Intensidad fisiológica de un sonido. La intensidad fisiológica o sensación sonora de un sonido se mide en decibelios (dB). Por ejemplo, el umbral de la audición está en 0 dB, la intensidad fisiológica de un susurro corresponde a unos 10 dB y

Page 14: Técnicas Digitales III Proyecto Integrador

II - 5

el ruido de las olas en la costa a unos 40 dB. La escala de sensación sonora es logarítmica, lo que significa que un aumento de 10 dB corresponde a una intensidad 10 veces mayor: por ejemplo, el ruido de las olas en la costa es 1.000 veces más intenso que un susurro, lo que equivale a un aumento de 30 dB. La distancia a la que se puede oír un sonido depende de su intensidad, que es el flujo medio de energía por unidad de área perpendicular a la dirección de propagación. En el caso de ondas esféricas que se propagan desde una fuente puntual, la intensidad es inversamente proporcional al cuadrado de la distancia, suponiendo que no se produzca ninguna pérdida de energía debido a la viscosidad, la conducción térmica u otros efectos de absorción. Por ejemplo, en un medio perfectamente homogéneo, un sonido será nueve veces más intenso a una distancia de 100 metros que a una distancia de 300 metros. En la propagación real del sonido en la atmósfera, los cambios de propiedades físicas del aire como la temperatura, presión o humedad producen la amortiguación y dispersión de las ondas sonoras, por lo que generalmente la ley del inverso del cuadrado no se puede aplicar a las medidas directas de la intensidad del sonido.

Intensidad Acústica y el Nivel de Intensidad Acústica Se puede definir como la cantidad de energía sonora transmitida en una dirección determinada por unidad de área. Con buen oído se puede citar dentro de un rango de entre 1x10-12 w por metro cuadrado, hasta 1 w. Para realizar la medida de intensidades se utiliza actualmente analizadores de doble canal con posibilidad de espectro cruzado y una sonda que consiste en dos micrófonos separados a corta distancia. Permite determinar la cantidad de energía sonora que radia una fuente dentro de un ambiente ruidoso. No es posible medirlo con un sonómetro. El nivel de intensidad sonora se mide en w/m2.

Potencia Acústica y Nivel de Potencia Acústica La potencia acústica es la cantidad de energía radiada por una fuente determinada. El nivel de potencia Acústica es la cantidad de energía total radiada en un segundo y se mide en w. La referencia es 1pw = 1E-12 w. Para determinar la potencia acústica que radia una fuente se utiliza un sistema de medición alrededor de la fuente sonora a fin de poder determinar la energía total irradiada. La potencia acústica es un valor intrínseco de la fuente y no depende del local donde se halle. La potencia acústica el valor no varia por estar en un local reverberante o en uno seco. Al contrario de la Presión Acústica que si que varia según varié las características del local donde se halle la fuente, la distancia etc.

Tiempo de Reverberación El Tiempo de Reverberación RT, es el tiempo que tarda una señal, desde que esta deja de sonar, en atenuarse un nivel de 60 dB. Para realizar la medida se genera un ruido y se mide a partir de que este deja de sonar, entonces se determina el tiempo que tarda en atenuarse 60 dB. El Tiempo de Reverberación se mide de forma frecuencial, esto es, un local no tiene el mismo RT en 200 Hz que en 4 kHz. Ello es debido a que el RT viene determinado por el Volumen de la sala, y por los coeficientes de absorción de sus superficies, o si se prefiere por las superficies con un coeficiente de absorción determinado. Como los coeficientes de absorción de los diferentes materiales que componen cualquier local no son iguales para todas las frecuencias, las reflexiones generadas en el interior del local serán diferentes para cada frecuencia y por lo tanto el RT del local es diferente según las frecuencias. Para calcular la RT de un local sin realizar mediciones se puede utilizar la formula de Sabine:

=A

VRT 163,060

V = Volumen de la sala en m3 y A = Superficie de Absorción en m2 Como norma cuanto mayor es el local mayor es el RT. Si los materiales que lo componen internamente son poco absorbentes el RT también aumentara.

Page 15: Técnicas Digitales III Proyecto Integrador

II - 6

El valor de RT es muy importante si se quiere conseguir buenos niveles de inteligibilidad dentro de los locales.

Coeficiente de Absorción de un material El coeficiente de absorción de un material es la relación entre la energía absorbida por el material y la energía reflejada por el mismo. Dada esta formulación su valor siempre esta comprendido entre 0 y 1. El máximo coeficiente de absorción esta determinado por un valor de 1 donde toda la energía que incide en el material es absorbida por el mismo, y el mínimo es 0 donde toda la energía es reflejada. El coeficiente de absorción varia con la frecuencia y por tanto los fabricantes de materiales acústicos dan los coeficientes de absorción por lo menos en resolución de una octava. Sabiendo los materiales de una sala y sabiendo sus coeficientes de absorción podemos saber como sonora esa sala en cada frecuencia y podremos también saber, mediante la formula de Sabine, Eyring etc, el tiempo de reverberación también por frecuencias.

Timbre. El timbre es la característica del sonido que nos permite distinguir los tonos producidos por instrumentos distintos aunque las ondas sonoras tengan la misma amplitud y frecuencia. Los armónicos son componentes adicionales de la onda que vibran con múltiplos enteros de la frecuencia principal y dan lugar a diferencias de timbre. El oído distingue por su timbre la misma nota producida por un diapasón, un violín o un piano. Si se toca el “la” situado sobre el “do” central en un violín, un piano y un diapasón, con la misma intensidad en los tres casos, los sonidos son idénticos en frecuencia y amplitud, pero muy diferentes en timbre. De las tres fuentes, el diapasón es el que produce el tono más sencillo, que en este caso está formado casi exclusivamente por vibraciones con frecuencias de 440 Hz. Debido a las propiedades acústicas del oído y las propiedades de resonancia de su membrana vibrante, es dudoso que un tono puro llegue al mecanismo interno del oído sin sufrir cambios. La componente principal de la nota producida por el piano o el violín también tiene una frecuencia de 440 Hz. Sin embargo, esas notas también contienen componentes con frecuencias que son múltiplos exactos de 440 Hz, los llamados tonos secundarios, como 880, 1.320 o 1.760 Hz. Las intensidades concretas de esas otras componentes, los llamados armónicos, determinan el timbre de la nota.

Velocidad del sonido. La frecuencia de una onda de sonido es una medida del número de vibraciones por segundo de un punto determinado. La distancia entre dos compresiones o dos enrarecimientos sucesivos de la onda se denomina longitud de onda. El producto de la longitud de onda y la frecuencia es igual a la velocidad de propagación de la onda, que es la misma para sonidos de cualquier frecuencia (cuando el sonido se propaga por el mismo medio a la misma temperatura). Por ejemplo, la longitud de onda del la situado sobre el do central es de unos 78,2 cm, y la del la situado por debajo del do central es de unos 156,4 centímetros. La velocidad de propagación del sonido en aire seco a una temperatura de 0 °C es de 331,6 m/s. Al aumentar la temperatura aumenta la velocidad del sonido; por ejemplo, a 20 °C, la velocidad es de 344 m/s. Los cambios de presión a densidad constante no tienen prácticamente ningún efecto sobre la velocidad del sonido. En muchos otros gases, la velocidad sólo depende de su densidad. Si las moléculas son pesadas, se mueven con más dificultad, y el sonido avanza más despacio por el medio. Por ejemplo, el sonido avanza ligeramente más deprisa en aire húmedo que en aire seco, porque el primero contiene un número mayor de moléculas más ligeras. En la mayoría de los gases, la velocidad del sonido también depende de otro factor, el calor específico, que afecta a la propagación de las ondas de sonido. Generalmente, el sonido se mueve a mayor velocidad en líquidos y sólidos que en gases. Tanto en los líquidos como en los sólidos, la densidad tiene el mismo efecto que en los gases; la velocidad del sonido varía de forma inversamente proporcional a la raíz cuadrada de la densidad. La velocidad también varía de forma proporcional a la raíz cuadrada de la elasticidad. Por ejemplo, la velocidad del sonido en agua es de unos 1.500 m/s a temperaturas ordinarias, pero aumenta mucho cuando sube la temperatura. La velocidad del sonido en el cobre es de unos 3.500 m/s a temperaturas normales y

Page 16: Técnicas Digitales III Proyecto Integrador

II - 7

decrece a medida que aumenta la temperatura (debido a la disminución de la elasticidad). En el acero, más elástico, el sonido se desplaza a unos 5.000 m/s; su propagación es muy eficiente.

Refracción, reflexión e interferencias. Un eco es una onda sonora reflejada. El intervalo entre la emisión y la repetición del sonido corresponde al tiempo que tardan las ondas en llegar al obstáculo y volver. Con frecuencia, el eco es más débil que el sonido original porque no todas las ondas se reflejan. Generalmente, los ecos escuchados en las montañas se producen cuando las ondas sonoras rebotan en grandes superficies alejadas más de 30 m de la fuente. Dando golpecitos en un tubo metálico pegado al oído también pueden escucharse ecos. El sonido avanza en línea recta cuando se desplaza en un medio de densidad uniforme. Sin embargo, igual que la luz, el sonido está sometido a la refracción, es decir, la desviación de las ondas de sonido de su trayectoria original. En las regiones polares, por ejemplo, donde el aire situado cerca del suelo es más frío que el de las capas más altas, una onda de sonido ascendente que entra en la región más caliente, donde el sonido avanza a más velocidad, se desvía hacia abajo por la refracción. La excelente recepción del sonido a favor del viento y la mala recepción en contra del viento también se deben a la refracción. La velocidad del aire suele ser mayor en las alturas que cerca del suelo; una onda de sonido ascendente que avanza a favor del viento se desvía hacia el suelo, mientras que una onda similar que se mueve en contra del viento se desvía hacia arriba, por encima de la persona que escucha. El sonido también se ve afectado por la reflexión, y cumple la ley fundamental de que el ángulo de incidencia es igual al ángulo de reflexión. Un eco es el resultado de la reflexión del sonido. El sonar se basa en la reflexión de los sonidos propagados en agua. Una bocina es un tubo cónico que forma un haz de ondas de sonido reflejando algunos de los rayos divergentes en los lados del tubo. Un tubo similar puede recoger ondas de sonido si se dirige el extremo ancho hacia la fuente de sonido. El sonido también experimenta difracción e interferencia. Si el sonido de una única fuente llega a un oyente por dos trayectorias diferentes —por ejemplo, una directa y otra reflejada—, los dos sonidos pueden reforzarse; sin embargo, si no están en fase pueden interferir de forma que el sonido resultante sea menos intenso que el sonido directo sin reflexión. Las trayectorias de interferencia son distintas para sonidos de diferentes frecuencias, con lo que la interferencia produce distorsión en sonidos complejos. Dos sonidos de distintas frecuencias pueden combinarse para producir un tercer sonido cuya frecuencia es igual a la suma o diferencia de las dos frecuencias originales.

Eco, Reverberación y Resonancia Cuando se genera un sonido en el interior de un local las superficies que componen el mismo ocasionan una serie de diferentes efectos dependiendo del las características de dichas superficies. Esto ocurre porque las ondas sonoras inciden en las diferentes superficies y estas las reflejan de diferente forma según su coeficiente de reflexión acústica. Como es lógico, primero siempre se percibe el sonido directo, esto es, el sonido que nos llega a nuestro oído sin que se aún se halla reflejado en ninguna superficie. Una vez recibido el sonido directo, llegará a nuestros oídos, con un retraso de tiempo con respecto al sonido directo, el sonido reflejado por las superficies del local. Tanto el retraso como el nivel sonoro del sonido reflejado dependen de las características físicas del local y sus superficies. Si el retraso entre el sonido directo y el reflejado es mayor de 1/10 de segundo, nuestro sistema de audición será capaz de separar las dos señales y percibirlas como tales, primero una y después la otra, esto es lo que se entiende por eco. Por ejemplo: supongamos que estamos dentro de un local de grandes dimensiones y una persona que esta separada de nosotros a cierta distancia nos dice "HOLA"; primero llegara a nuestros oídos el "HOLA" del sonido directo, y en el caso de un Eco este nos llegara como mínimo 1/10 segundo después, por lo tanto oiremos "HOLA....(1/10 segundo mínimo)...HOLA", y lo interpretaremos efectivamente como dos mensajes diferentes separados por un intervalo de tiempo determinado. Sin embargo nuestro interlocutor únicamente ha articulado un "HOLA". Cuando en la misma situación que en el caso anterior, el sonido reflejado nos llega con un tiempo inferior a 1/10 de segundo, nuestro sistema de audición no es capaz de separar ambas señales y las toma como una misma pero con una duración superior de esta. Normalmente esto se entiende como reverberación. La reverberación de un local se mide según su tiempo de reverberación (rt) en segundos y varia según la frecuencia de análisis que se utilice. Esto es debido a que los diferentes materiales que componen las

Page 17: Técnicas Digitales III Proyecto Integrador

II - 8

superficies del local no se comportan por igual en todo el espectro sonoro, y por tanto los coeficientes de absorción de cada superficie de un mismo material varia según la frecuencia. Conociendo el tiempo de reverberación de un local podemos saber como se comportara el mismo en diferentes aplicaciones. Cuando el tiempo de reverberación alcanza valores muy altos con respecto al sonido directo, puede ocurrir un enmascaramiento de este y se puede perder la capacidad de entender la información contenida en el mensaje que se percibe. La resonancia se ocasiona cuando un cuerpo entra en vibración por simpatía con una onda sonora que incide sobre el y coincide su frecuencia con la frecuencia de oscilación del cuerpo o esta es múltiplo entero de la frecuencia de la onda que le incide.

Altura (tono) de un sonido Como ya sabemos la frecuencia es una entidad física y por tanto puede ser medida de forma objetiva por diferentes medios. Por contra la altura o tono de un sonido es un fenómeno totalmente subjetivo y por tanto no es posible medirlo de forma objetiva. Normalmente cuando se aumenta la frecuencia de un sonido, su altura también sube, sin embargo esto no se da de forma lineal, o sea no se corresponde la subida del valor de la frecuencia con la percepción de la subida de tono. La valoración subjetiva del tono se ve condicionada no solo por el aumento de la frecuencia si no también por la intensidad, y por el valor de dicha frecuencia. Para frecuencias inferiores a 1.000 Hz (incluida esta), si se aumenta la intensidad el tono disminuye, entre 1.000 Hz y 5.000 Hz el tono es prácticamente independiente de la intensidad que tenga, por encima de 5.000 Hz el tono aumenta si aumenta la intensidad. La unidad de altura es el "Mel". (en ocasiones se utiliza el "Bark" equivalente a 100"Mels").

Sensación de tono Si se practica una audiometría a una persona joven normal, se comprueba que su oído es sensible a todos los sonidos entre 15-20 hercios y 15.000-20.000 hercios. El oído de las personas mayores es menos agudo, sobre todo en las frecuencias más elevadas. El oído es especialmente sensible en la gama que va desde el “la” situado por encima del “do” central hasta el “la” que está cuatro octavas por encima; en esa zona, una persona puede percibir un sonido cientos de veces más débil que una octava por encima o dos octavas por debajo. El grado en que un oído sensible puede distinguir entre dos notas puras que difieran ligeramente en intensidad o frecuencia varía en los diferentes rangos de intensidad y frecuencia de los tonos. En sonidos de intensidad moderada situados en el rango de frecuencia para el que el oído es más sensible (entre 1.000 y 2.000 Hz aproximadamente), es posible distinguir una diferencia de intensidad de un 20% (1 decibelio, o dB) y una diferencia en frecuencia de un 0,33% (alrededor de una vigésima de nota). En este mismo rango, la diferencia entre el sonido más tenue que puede oírse y el sonido más fuerte que puede distinguirse como tal sonido (los sonidos más fuertes se “sienten”, o perciben, como estímulos dolorosos) es de unos 120 decibelios: una diferencia de intensidad de aproximadamente un billón de veces. Todas estas pruebas de sensibilidad se refieren a tonos puros, como los producidos por un oscilador electrónico. Incluso para esos tonos puros, el oído es imperfecto. Dos notas con frecuencia idéntica pero una gran diferencia de intensidad pueden aparentar una ligera diferencia de tono. Más importante resulta la diferencia en las intensidades relativas aparentes en las distintas frecuencias. A intensidades altas, el oído es aproximadamente igual de sensible a la mayoría de las frecuencias, pero a bajas intensidades el oído es mucho más sensible a las frecuencias medias que a las extremas. Por tanto, un equipo de reproducción de sonido que funciona perfectamente parecerá no reproducir las notas más graves y agudas si se reduce mucho la intensidad.

El efecto Doppler El efecto Doppler se origina cuando hay un movimiento relativo entre la fuente sonora y el oyente cuando cualquiera de los dos se mueven con respecto al medio en el que las ondas se propagan. El resultado es la aparente variación de la altura del sonido. Existe una variación en la frecuencia que percibimos con la frecuencia que la fuente origina.

Page 18: Técnicas Digitales III Proyecto Integrador

II - 9

Para entenderlo mejor supongamos que estamos parados en el anden de una estación, a lo lejos un tren viene a gran velocidad con la sirena accionada, mientras el tren este lejos de nosotros oiremos el silbido de la sirena como una frecuencia determinada, cuando el tren pase delante nuestro y siga su camino, el sonido de la sirena cambia con respecto al estábamos oyendo y con respecto al que vamos a oír una vez que el tren nos rebasa y sigue su camino. La frecuencia que aparente se puede determinar según las siguientes fórmulas: Fuente móvil

• fx = (c/(c-u))fs Receptor en movimiento:

• fx = ((c-v)/c)fs Ambos en movimiento:

• fx = ((c-v)/(c-u))fs • fx = Frecuencia aparente • c = Velocidad del sonido • v = Velocidad del observador • u = Velocidad de la fuente • fs = Frecuencia de la fuente

Tres tipos de sonido importantes En la voz, la música y el ruido, es raro escuchar un tono puro. Una nota musical contiene, además de la frecuencia fundamental, tonos más agudos que son armónicos de la misma. La voz contiene una mezcla compleja de sonidos, de los que algunos (pero no todos) guardan una relación armónica entre sí. El ruido está formado por una mezcla de muchas frecuencias diferentes dentro de un determinado rango; por tanto, puede compararse con la luz blanca, que se compone de una mezcla de luces de los distintos colores. Los distintos ruidos se distinguen por sus diferentes distribuciones de energía en los distintos rangos de frecuencias. Cuando se transmite al oído un tono musical que contiene determinados armónicos del tono fundamental, pero carece de otros armónicos o del propio tono fundamental, el oído forma diferentes “batidos” o pulsaciones cuya frecuencia es la suma o la diferencia de los sonidos originales, con lo que producen los armónicos que faltan o el tono fundamental que no figura en el sonido original. Estas notas también son armónicos de la nota fundamental original. Esta respuesta incorrecta del oído puede resultar útil. Por ejemplo, un equipo reproductor de sonido sin un altavoz grande no puede producir sonidos de tono más grave que el “do” situado dos octavas por debajo del “do” central; sin embargo, el oído de una persona que escuche ese equipo puede proporcionar la nota fundamental a partir de las frecuencias de batido de sus armónicos. Otra imperfección del oído ante los sonidos ordinarios es la incapacidad de oír notas de alta frecuencia cuando existen sonidos de baja frecuencia de intensidad considerable. Este fenómeno se denomina enmascaramiento. En general, para que se entienda el habla y se comprenda satisfactoriamente un tema musical basta reproducir las frecuencias entre 250 y 3.000 Hz (el rango de frecuencias de un teléfono normal), aunque algunos sonidos —como la zeta— requieren frecuencias de hasta 6.000 Hz. Sin embargo, para que el efecto sea natural hay que reproducir el rango que va aproximadamente de 100 a 10.000 Hz. Los sonidos generados por unos pocos instrumentos musicales sólo pueden reproducirse con naturalidad con frecuencias algo más bajas, y algunos ruidos necesitan frecuencias más altas.

Octava, media octava y tercio de octava El termino de octava se toma de una escala musical, se considera el intervalo entre dos sonidos que tienen una relación de frecuencias igual a 2 y que corresponde a ocho notas de dicha escala musical. Por ejemplo: si comenzamos con una nota como DO, la octava completa será: DO-RE-MI-FA-SOL-LA-SI-DO. Si el primer DO estaba afinado en 440 Hz el segundo estará en 880 Hz, ya que hemos indicado que en la octava hay una relación de frecuencias igual a 2. En el caso de un ecualizador gráfico de una octava, las frecuencias centrales de los filtros podían ser las siguientes: 16 Hz - 31,5 Hz - 63 Hz - 125 Hz - 250 Hz - 500 Hz - 1kHz - 2 kHz - 4 kHz - 8 kHz - 16 kHz. En algunos casos la relación de 2:1 de la octava no se cumple exactamente.

Page 19: Técnicas Digitales III Proyecto Integrador

II - 10

Cuando se necesitan filtros de mayor precisión, de un ancho de banda mas estrecho, se puede dividir la octava en valores mas pequeños, por ejemplo: la media octava divide cada octava en dos, y por tanto tendremos el doble de puntos que en una octava, siguiendo con el ejemplo empleado en una octava tendríamos: 16 Hz - 22,4 Hz - 31,5 Hz - 45 Hz - 63 Hz - 90 Hz - 125 Hz - 180 Hz - 250 Hz - 355 Hz - 500 Hz - 710 Hz - 1kHz - 1,4 kHz - 2 kHz - 2,8 kHz - 4 kHz - 5,6 kHz - 8 kHz - 11,2 kHz - 16 kHz. En el caso de un tercio de octava, cada intervalo de la octava se divide en tres partes con lo que tendremos tres veces mas de filtros para poder ajustar, quedando los cortes como siguen : 16 Hz - 20 Hz - 25 Hz - 31,5 Hz - 40 Hz - 50 Hz - 63 Hz - 80 Hz - 100 Hz - 125 Hz - 160 Hz - 200 Hz - 250 Hz - 315 Hz - 400 Hz - 500 Hz - 630 Hz - 800 Hz - 1 kHz - 1,25 kHz - 1,6 kHz - 2 kHz - 2,5 kHz - 3,15 kHz - 4 kHz - 5 kHz - 6,3 kHz - 8 kHz - 10 kHz - 12,5 kHz - 16 kHz

Filtro de ancho de banda constante Un filtro de ancho de banda constante consiste básicamente en un filtro de banda estrecha sintonizable y constante. Esto nos permite seleccionar la frecuencia central que deseamos y también el ancho de banda del filtro. El ancho de banda del filtro viene dado por el siguiente valor: w = f2 - f1 Siendo w = ancho de banda del filtro, f2 = frecuencia superior y f1 = frecuencia inferior. Y la frecuencia central del filtro se obtiene normalmente de: fc = Raíz Cuadrada(f1*f2) La frecuencia central se puede ajustar a cualquier punto del espectro y mantienen siempre el mismo ancho de banda. Por ejemplo: supongamos que tenemos un filtro de ancho de banda constante con un ancho de banda de 20 Hz, si lo colocamos de forma que la frecuencia inferior sea 100 Hz (f1) la superior será igual a 120 Hz y su frecuencia central será 109,54 Hz aproximadamente. Si ahora nos desplazamos a un margen de frecuencias superior, f1 = 4.000 Hz, f2 será igual a 4020 Hz y la frecuencia central será 4010 Hz. Como se ve el ancho de banda siempre es constante y no varia al variar el punto de trabajo del filtro.

Filtro de ancho de banda proporcional Los filtros de ancho de banda proporcional son filtros que cumplen la remisa de f2/f1 =constante, o sea que si dividimos la frecuencia superior por la inferior siempre nos tiene que dar un valor que sea constante, por lo que el ancho de banda es proporcional a la frecuencia central. En el caso de un filtro de octava y de tercio de octava la relación de proporción es: Octava f2/f1 = 2 Tercio de Octava f2/f1 = 2^(1/3) Como es fácil deducir el ancho de banda de este tipo de filtros varia al variar la frecuencia, cuanto mas subimos mayor es el ancho de banda, siempre manteniendo la proporción expresada según el filtro sea de octava, tercio etc. Cada vez que subimos una octava doblamos el ancho de banda del filtro. Por ejemplo supongamos que estamos trabajando con un filtro de 1/3 de octava y nos situamos en la frecuencia de 100 Hz tenemos que la frecuencia inmediatamente inferior es 80 Hz y la superior 125, podemos obtener la relación de proporcionalidad del filtro según: f2/f1 = constante 125/80 = 1,56 Podemos ver que tenemos un valor de 1,56 y que corresponde a un ancho de banda de f2-f1 = 125-80 = 45 Hz.

Page 20: Técnicas Digitales III Proyecto Integrador

II - 11

Si ahora con el mismo valor de la proporción (1,56) colocamos el filtro en la frecuencia central de 200 Hz en lugar de los 100 Hz de antes, veremos que la proporción se mantiene pero el ancho de banda aumenta justo al doble: f2/f1 = 250/160 = 1,56 f2-f1 = 250 - 160 = 90 Hz Cada vez que subamos la frecuencia central aumentara el ancho de banda del filtro en la proporción expresada (1 octava =2 y 1/3 octava = 2^(1/3)). Cada vez que doblamos la frecuencia se dobla el ancho de banda del filtro. Por lo tanto este tipo de filtros resultan mas precisos en las frecuencias bajas que en las altas, ya que en frecuencias como 8 kHz el ancho de banda aumenta hasta 3.700 Hz mientras que como hemos visto para el mismo filtro en la frecuencia de 100 Hz tiene un ancho de banda de 45 Hz. Los filtros proporcionales con resoluciones de octava, tercio etc son los mas utilizados tanto en analizadores como en ecualizadores para fines musicales y acústicos.

Disminución espacial del nivel sonoro Si tenemos una fuente sonora determinada, y estamos situados a una distancia de ella, al alejarnos o acercarnos el nivel de presión sonora varia según las características de la fuente, el lugar donde se encuentre y la distancia entre otros factores. Podemos calcular el nivel de presión acústica dentro de un local en cualquier punto con la siguiente formula: Lp = Lw + 10 log ((Q/4*Pi*r*2)+(4/R)) Lp = Nivel de presión sonora. Lw = Nivel de potencia de la fuente sonora en dB. Q = Directividad de la fuente sonora. r = distancia entre la fuente y el punto de medida en metros. R = constante acústica del local (m2). En espacios al aire libre se considera que cada vez que se dobla la distancia entre la fuente sonora y el oyente, se disminuye el nivel sonoro en 6 dB. Por ejemplo supongamos que estamos escuchando un altavoz a una distancia de 10 metros, si utilizamos un sonómetro y medimos el nivel de presión acústica obtenemos un valor supuesto de 80 dB, si ahora nos distanciamos 10 metros mas, o sea doblamos la distancia del punto inicial, obtendremos una lectura de 74 dB, 6 dB menos que en el primer punto, si por ultimo nos alejamos 20 metros de este ultimo punto, doblando así su distancia, estamos a 40 metros de la fuente, obtendremos también un descenso de 6 dB, tendremos por tanto, 68 dB.

Micrófono

El micrófono es dispositivo que se utiliza para transformar la energía del sonido en energía eléctrica, durante el proceso de grabación y reproducción de sonido. Los micrófonos constituyen un elemento esencial en muchos tipos de sistemas de comunicaciones y de instrumentos de medida de sonido y ruido. El inventor Alexander Graham Bell creó en 1876 el primer micrófono durante la construcción del teléfono. La variante más sencilla de los teléfonos modernos es el micrófono de carbón, utilizado en los teléfonos. Está compuesto por un disco metálico relleno de gránulos de carbón, recubierto por un diafragma metálico móvil. El disco y el diafragma disponen de unos cables que van conectados a un circuito eléctrico, de forma que a través de los gránulos de carbón pasa una corriente eléctrica. Las ondas sonoras hacen vibrar el diafragma, alterando la presión sobre los gránulos de carbón. La resistencia eléctrica de los gránulos varía con la presión, haciendo que la corriente se modifique en el circuito con las vibraciones del diafragma. La corriente puede activar un teléfono cercano o se puede amplificar y transmitir hasta un receptor remoto. La amplificación de las variaciones de la corriente se puede utilizar también para modular un transmisor de radio. Otra variante muy corriente, el micrófono de cristal, emplea cristales piezoeléctricos, en los que se origina un voltaje entre las dos caras del cristal cuando se le aplica una presión. En este tipo de

Page 21: Técnicas Digitales III Proyecto Integrador

II - 12

micrófono las ondas sonoras hacen vibrar un diafragma que a su vez modifica la presión sobre un cristal piezoeléctrico, lo cual genera un pequeño voltaje que más tarde se amplifica. Entre los micrófonos dinámicos se encuentran los micrófonos de cinta y los de bobina móvil. Los primeros llevan una fina cinta metálica adherida al diafragma, colocado en el seno de un campo magnético. Cuando la onda sonora incide sobre el diafragma y hace vibrar la cinta, en ésta se genera un pequeño voltaje por inducción electromagnética. El funcionamiento del micrófono de bobina móvil se basa prácticamente en el mismo principio, pero posee una bobina de hilo fino en lugar de una cinta. Algunos micrófonos modernos, diseñados para captar solamente sonidos unidireccionales, llevan una combinación de cinta y de bobina. Otro tipo es el micrófono de condensador. Posee dos finas láminas metálicas muy próximas, que actúan como un condensador. La lámina posterior va fija, mientras que la anterior hace de diafragma. Las ondas sonoras modifican la distancia entre las láminas, alterando la capacitancia eléctrica entre ambas. Si se integra un micrófono de este tipo en el correspondiente circuito, se pueden amplificar las variaciones y producir una señal eléctrica. Este tipo de micrófonos suelen ser muy pequeños. En los audífonos se utiliza otro tipo muy habitual, el micrófono de condensador de electretos. Las características más importantes de cualquier micrófono son su respuesta en frecuencia, direccionalidad, sensibilidad e inmunidad a las perturbaciones externas como golpes o vibraciones.

Bibliografía

Biblioteca Encarta. Apuntes de Sonido digital por Antonio Sacco. www.antoniosaco.com.ar www.gui.uva.es/login/14/sonido1.html

Page 22: Técnicas Digitales III Proyecto Integrador

III - 1

Capítulo 3 Ruido

Introducción

El ruido, en física, es una señal acústica, eléctrica o electrónica formada por una mezcla aleatoria de longitudes de onda. En teoría de la información, el término ruido designa una señal que no contiene información. En acústica, el llamado ruido blanco está formado por todas las frecuencias audibles, igual que la luz blanca está formada por todas las frecuencias visibles. El ruido también es una noción subjetiva aplicada a cualquier sonido no deseado. La contaminación acústica debida al ruido es un grave problema medioambiental, sobre todo si se considera que los niveles de sonido superiores a una determinada intensidad pueden causar daños físicos.

Ruido rosa

El ruido rosa es un ruido cuyo nivel sonoro esta caracterizado por un descenso de tres decibelios por octava. Cuando el ruido rosa se visualiza en un analizador con filtros de octava, el ruido se ve como si todas las bandas de octava tuviesen el mismo nivel sonoro, lo cual es cierto, pero el ruido rosa no tiene el mismo nivel en todas las frecuencias. Esto ocurre por que como hemos visto los filtros de octava, tercio etc, son filtros proporcionales y por tanto cada vez que subimos una octava, doblamos el ancho de banda y por ese motivo el ruido rosa decrece 3 dB por octava, justo la proporción en que aumenta el ancho de banda, el doble. De esta forma visualizamos el ruido rosa como un ruido de nivel constante en todas las bandas de octava. Se utiliza para analizar el comportamiento de salas, altavoces, equipos de sonido etc. Es una señal conocida, mismo nivel en todas las bandas (sonido "plano") , y si lo amplificamos con un altavoz dentro de una sala podemos conocer datos sobre el comportamiento acústico del altavoz, la sala etc. Normalmente se genera entre 20 Hz y 20 kHz. Su sonido es muy parecido al que podemos oír cuando se sintoniza entre dos emisoras de FM, en el espacio que se recibe únicamente el ruido, es como un soplido.

Ruido blanco

El ruido blanco es un ruido cuyo nivel es constante en todas las frecuencias. Si lo visualizamos con un analizador con filtros de octava, veremos que el espectro mostrado no es lineal como hemos dicho que es el ruido blanco, si no que aumenta 3 dB por octava. Esto se debe al mismo fenómeno que con el ruido rosa, al doblar la octava se dobla el ancho de banda y si se tenemos el mismo nivel sonoro en todas las frecuencias, el nivel sonoro por octava se doblara y aumentara 3 dB con respecto al anterior.

Contaminación acústica

Se refiere al ruido cuando éste se convierte en un sonido molesto que puede producir efectos fisiológicos y psicológicos nocivos para las personas, llegando también a afectar a poblaciones de animales. La causa principal de la contaminación acústica es la actividad humana: el transporte, la construcción de edificios y obras públicas y la industria, entre otras. Los efectos producidos por el ruido pueden ser fisiológicos, como la pérdida de audición o el insomnio, y psicológicos, como la irritabilidad exagerada. El ruido viene siendo un problema para la humanidad desde muy antiguo, existiendo referencias escritas sobre este problema ya desde la época de la Roma imperial. Las primeras normas conocidas relativas a la contaminación acústica datan del siglo XV, cuando en la ciudad de Berna se prohibió la circulación de carretas que, por su estado, pudieran producir ruidos excesivos que molestasen a los ciudadanos. En el siglo XVI, en Zurich se dictó una norma que prohibía hacer ruidos por la noche para no alterar el descanso de los ciudadanos. En la actualidad, cada país ha desarrollado la legislación específica correspondiente para regular el ruido y los problemas que éste conlleva. El ruido se mide en decibelios (dB); los equipos de medida más utilizados son los sonómetros. Un informe publicado en 1995 por la Universidad de Estocolmo para la Organización Mundial de la Salud (OMS), considera los 50 dB como el límite superior deseable, si bien las molestias generalizadas en la

Page 23: Técnicas Digitales III Proyecto Integrador

III - 2

población ocurren a partir de los 85 dB. Entre 0 y 20 dB se considera que el ambiente es silencioso; hasta 60 dB se considera que hay poco ruido; entre los 80 y los 100 dB se considera que el ambiente es muy ruidoso; y sobrepasando este umbral el ruido se hace intolerable. Como ejemplos, valga decir que el sonido ambiente en un bosque sin perturbaciones ajenas a ese medio rara vez alcanza los 20 dB (normalmente se encuentra alrededor de 15 dB), sonido que sólo se sobrepasa ligeramente en un dormitorio. En una biblioteca o en la sala de estar de una vivienda el ruido oscila entre 30 y 40 dB, mientras que en una oficina típica el ambiente soporta un ruido de unos 65 dB. El ruido del tráfico de una ciudad está en un nivel de unos 85 dB, el de un camión pesado circulando en 90 dB, el de un martillo neumático en una obra en 100 dB, y el de un avión despegando entre los 120 y los 130 dB.

Clasificación.

El ruido puede clasificarse por su duración, intensidad, regularidad, impacto (rapidez con que se eleva la intensidad) o fluctuación, entre otros factores. Existe contaminación acústica natural, como la producida por las erupciones volcánicas, las emanaciones violentas de los géiseres, la corriente de un río o el ruido de una colonia de gaviotas, entre otros ejemplos. Existen medidas destinadas a mitigar o disminuir el nivel de inmisión de ruido (el ruido que recibimos) en zonas donde éste es excesivamente alto, por ejemplo en las viviendas cercanas a un aeropuerto. Es el caso de la instalación de dobles ventanas o la colocación de estructuras de hormigón o de metacrilato, o de muros de tierra en zonas próximas a vías de comunicación.

Bibliografía

Biblioteca Encarta. Apuntes de Sonido digital por Antonio Sacco. www.antoniosaco.com.ar www.gui.uva.es/login/14/sonido1.html

Page 24: Técnicas Digitales III Proyecto Integrador

IV - 1

Capítulo 4 Muestreo de señales Introducción Bajo ciertas condiciones, una señal se puede representar, y reconstruir completamente, partiendo del conocimiento de sus valores instantáneos, o muestras, igualmente espaciados en el tiempo. Esta propiedad deriva de un resultado básico que se conoce como el “teorema del muestreo”. El teorema del muestreo hace de nexo entre señales de tiempo continuo con señales de tiempo discreto, ya que una señal de tiempo continuo mediante una secuencia de muestras instantáneas proporciona un mecanismo para representar una señal de tiempo continuo mediante una señal de tiempo discreto. En muchos contextos, el procesamiento de señales de tiempo discreto es más flexible y a menudo preferible al procesamiento de señales de tiempo continuo, en parte debido a la creciente disponibilidad de sistemas digitales y de tiempo discreto de bajo costo, ligeros, programables y fácilmente reproducibles. Esta tecnología también ofrece la posibilidad de explorar el concepto de muestreo para convertir una señal de tiempo continuo a una señal de tiempo discreto. Después de procesar la señal de tiempo discreto empleando un sistema de tiempo discreto, podemos convertirla de nuevo a tiempo continuo. Representación de una señal de tiempo continuo mediante sus muestras: el teorema del muestreo. Si a una señal x(t) de banda limitada se modula en amplitud con un tren de pulsos periódicos, lo que corresponde a extraer segmentos de tiempos igualmente espaciados se puede recuperar exactamente mediante un filtrado pasa bajos si la frecuencia fundamental del tren de pulsos modulador es mayor que el doble de la frecuencia mas alta presente en x(t). Además la habilidad para recuperar x(t) es independiente de la duración en tiempo de los pulsos individuales. Entonces, conforme esta duración se hace mas pequeña, la modulación de los pulsos está, en efecto, representando a la señal x(t) mediante muestras instantáneas igualmente espaciadas en el tiempo.

Page 25: Técnicas Digitales III Proyecto Integrador

IV - 2

Muestreo con tren de impulsos.

El tren de impulsos p(t) se conoce como la función de muestreo, el periodo T como el periodo de muestreo y

la frecuencia fundamental de p(t), T

wsπ2= , como la frecuencia de muestreo. En el dominio del tiempo

tenemos: ( ) ( )tptxxp =

donde

∑∞+

−∞=

−∂=n

nTttp )()(

)(txp es un tren de impulsos cuya amplitudes son iguales a las muestras de x(t) en intervalos espaciados por

T, esto es:

∑∞+

−∞=

−∂=n

p nTtnTxtX )()()(

de la propiedad de modulación:

[ ])(*)(21

)( ωωπ

PXtX p =

y sabiendo que:

( ) ∑∞+

−∞=

−∂=n

skT

P )(2

ωωπ

ω

de manera que:

( ) ∑∞+

−∞=

−=n

sp kXT

X )(1

ωωω

Esto es, )(ωpx es una función periódica en el dominio de la frecuencia que consiste de una suma de replicas

de X(w) desplazadas y escaladas por 1/T.

Page 26: Técnicas Digitales III Proyecto Integrador

IV - 3

Si la frecuencia de muestreo es menor a la frecuencia de la señal muestreada se produce un efecto llamado traslape en donde los espectros de la señal muestreada se superponen entre si .

Por lo tanto si Ws>2Wm x(t) se puede recuperar exactamente a partir de )(txp por medio de un filtro pasa

bajos con ganancia T y una frecuencia de corte mayor a Wm y menor que Ws – Wm. Este resultado básico, conocido como teorema del muestreo se puede expresar como sigue: Teorema del muestreo:

Sea x(t) una señal de banda limitada con X(w)=0 para mωω > . Entonces x(t) esta determinada

unívocamente por sus muestras x(nT), ,...3,2,1,0 ±±±=n si

mωω 2> donde:

Ts

πω

2=

Dadas estas muestras, podemos reconstruir x(t) generando un tren de impulsos periódicos en el que los impulsos sucesivos tienen amplitudes que corresponden a valores de muestras sucesivas. Este tren de impulsos es entonces procesado a través de un filtro pasa bajos ideal con ganancia T y cuya frecuencia de corte es mayor que Wm y menor que (Ws-Wm). La salida resultante será exactamente igual a x(t). La frecuencia de muestreo también se conoce como la frecuencia de Nyquist. La frecuencia 2Wm que, bajo el teorema del muestreo, debe ser excedida por la frecuencia de muestreo, se denomina por lo común como la velocidad de Nyquist.

Page 27: Técnicas Digitales III Proyecto Integrador

IV - 4

Muestreo con retenedor de orden cero. El teorema del muestreo establece el hecho de que una señal de banda limitada está representada de manera univoca por sus muestras y su motivación reside en el muestreo por un tren de impulsos. En la practica, los pulsos angostos de gran amplitud, que se aproximan a impulsos, son relativamente difíciles de lograr, y con frecuencia es mas conveniente generar la señal muestreada mediante el dispositivo conocido como retenedor de orden cero. Tal sistema muestrea la señal x(t) en determinados instantes de muestreo subsecuentes.

La reconstrucción de x(t) a partir de la salida de un retenedor de orden cero puede d nuevo llevarse a cabo mediante filtrado pasa bajos. Sin embargo, en este caso, el filtro requerido ya no tiene ganancia constante en la banda de paso.

Bibliografía

Señales y sistemas (Alan V. Oppenheim; Alan S. Willsky).

Materia Integrada

Análisis de señales y sistemas. Tema Muestreo de señales.

Page 28: Técnicas Digitales III Proyecto Integrador

V- 1

Capítulo 5 Conversión de señales analógicas a digitales. Introducción Una señal de audio es captada por un micrófono como una señal eléctrica analógica. Se dice que una señal es analógica, cuando la misma está formada por valores continuos, tanto en el tiempo como en amplitud.

Si bien esta señal puede ser procesada en forma analógica por medios electrónicos, para su procesamiento en una computadora es necesario digitalizarla. Este proceso de digitalización se realiza con un dispositivo conocido como conversor analógico digital o (ADC por sus siglas en inglés), y se lleva a cabo en dos pasos: muestreo y discretización. El primer paso se conoce con el nombre de muestreo, y consiste en tomar muestras de la señal en forma periódica.

El segundo paso se conoce como discretización, y consiste en aproximar el valor continuo a una escala discreta.

El resultado es una secuencia finita de valores enteros, que pueden ser procesados digitalmente:

La precisión con la cual de lleve a cabo la digitalización determinará la calidad de la onda, y está gobernada principalmente por dos parámetros: frecuencia de muestreo y precisión de discretización. Digitalización del sonido: Velocidad de Muestreo y Cuantización Digitalizar un sonido abarca dos procesos: Muestreo y Cuantización. El Muestreo consiste en tomar información a cerca de la variación de la frecuencia de un sonido, tomando una cierta cantidad de muestras por segundo, de modo que luego uniendo las muestras tomadas, sea posible reproducir o volver a "armar" el sonido original. Al proceso de toma de muestras antes mencionado se lo denomina también "SAMPLEO" y cuanto más muestras se tomen por segundo, mayor será la aproximación al sonido original. Ahora bien para samplear sonidos audibles, que se encuentran en el rango de frecuencias de 20Hz a 20Khz sin pérdida de información, está comprobado que hay que samplearlos al doble de la frecuencia más alta, es decir a 44Khz. Hacer un muestreo a 44 Khz significa tomar 44.000 muestras por segundo (a esta frecuencia se samplea el sonido que escuchamos en los CD de audio comerciales). El proceso de Cuantización apunta a determinar cuantos valores posibles pueden tener las muestras tomadas. Esto tiene una relación directa con la con la cantidad de bits asignados a cada muestra. Resulta claro que se logrará más fidelidad al sonido original tomando muestras de 16 bit que de 8.

Page 29: Técnicas Digitales III Proyecto Integrador

V- 2

Cuanto más grande es la velocidad de muestreo y la cantidad de bits por muestra mayor será el archivo de sonido que se genere. También será mayor un archivo Estéreo que uno Mono. Es por esto que en la actualidad se han creado formatos de archivo comprimidos como el PCM y el ADPCM.

Ventajas del audio digital

Las ventajas sobre el audio analógico que lo hacen insustituible son: En primer lugar permite ser almacenado en forma inalterable. Dado que lo que se almacenan son números, es decir símbolos, es mucho más difícil alterar la información guardada que en el caso en que se guarda un campo magnético proporcional a la señal, como en un cassette. Otra ventaja es que permite aprovechar la tecnología de procesamiento digital de señales para introducir efectos, modificaciones o mejoras imposibles o muy difíciles de lograr analógicamente. Por ejemplo, es posible conseguir retardos, efectos de reverberación, supresión de ruido, etc.

Pasaje de una señal eléctrica a una señal digital

Se utiliza un proceso de muestreo (discretización en el tiempo) y digitalización (discretización en amplitud). El muestreo consiste en tomar valores de la señal a intervalos regulares de tiempo. La digitalización consiste en subdividir el rango útil total de la señal en cierta cantidad de "casilleros" o subintervalos numerados, y asignar a cada muestra el número de subintervalo en el cual se encuentra. Por ejemplo, si el rango de una señal que varía entre 0 y 10 V se subdivide en 16 subintervalos, a una muestra de 7,3 V se le asignará un número igual a la parte entera de 7,3*16/10 = 11,68, es decir 11. Este proceso es llevado a cabo por un conversor analógico/digital.

Cantidad de subintervalos en que se divide el rango útil de la señal

Normalmente se elige como una potencia de 2, de manera que los valores asignados a las muestras están entre 0 y 2n - 1, donde n corresponde a la cantidad de bits, es decir de dígitos binarios.

Resolución de un sistema de audio digital

Es la cantidad de bits que se utiliza para representar las muestras de audio, es decir la cantidad de bits que conforman cada palabra. Cuanto mayor sea la resolución, más precisa será la representación. Por ejemplo, con una resolución de 8 bits, el rango de variación de la señal se divide en 256 subintervalos, mientras que con una resolución de 16 bits lo hace en 65536 subintervalos, cuya amplitud será, por consiguiente, mucho menor. El audio digital para el consumo masivo (por ejemplo el CD o las placas de sonido de las computadoras) tiene una resolución de 16 bits. En sistemas de audio profesional se utilizan 20 bits y aún 24 bits

Page 30: Técnicas Digitales III Proyecto Integrador

V- 3

Frecuencia de muestreo

También llamada tasa de muestreo, es la cantidad de muestras por unidad de tiempo. Cuanto mayor sea, mayor es la respuesta en frecuencia del sistema. El estándar para los discos compactos (CD) es de 44,1 kHz. La frecuencia de muestreo debe ser mayor que el doble de la máxima frecuencia fmáx presente en la señal. Esta condición se denomina condición de Nyquist. Obsérvese que no es suficiente que sea mayor que el doble de la máxima frecuencia útil, ya que si hay ruido por encima de ésta, podría producirse un tipo de distorsión denominado aliasing. Según el denominado teorema del muestreo, si se muestrea con una frecuencia que no cumple la condición de Nyquist al intentar reconstruir la señal se generan frecuencias espurias que no estaban presentes originalmente. Supongamos, por ejemplo, que queremos muestrear una señal audible que contiene además un ruido de 35 kHz. Si utilizamos la frecuencia normalizada de 44,1 kHz, a pesar de que ese ruido es originalmente inaudible (por ser mayor que el límite superior de 20 kHz del oído humano), al intentar recuperar la señal aparecerá un ruido de 9,1 kHz (= 44,1 kHz - 35 kHz), que es perfectamente audible. Este tipo de frecuencias que aparecen dentro del espectro útil se denominan frecuencias "alias". En ese caso hay que actuar sobre la señal. Se utiliza un filtro antialias, que suprime todas las frecuencias por encima de la frecuencia de Nyquist, es decir la mitad de la frecuencia de muestreo fM. En el caso del CD, que utiliza una frecuencia de muestreo de 44,1 kHz, el filtro antialias debe conservar todas las frecuencias por debajo de 20 kHz y eliminar todas las que están por encima de 22,05 kHz (= 44,1 kHz / 2 ).

Reconstrucción de la señal digitalizada

Se utiliza un conversor digital/analógico. Este dispositivo recibe las sucesivas muestras digitalizadas y las transforma en valores de tensión eléctrica mediante un factor de escala. Por ejemplo, si el factor de escala es de 10/16 V, una muestra igual a 11 se transformará en un valor de tensión de 11*10/16 = 6,875 V. El valor de tensión que corresponde a cada muestra se mantiene constante hasta que llega la próxima muestra. Resulta así una onda escalonada formada por tramos constantes. Estas señales no presentan un efecto importante al momento de escuchar el sonido, ya que genera frecuencias por encima del espectro audible. Sin embargo, es conveniente agregar un filtro de suavizado que limite el contenido de frecuencias a lo estrictamente necesario, para evitar la presencia de frecuencias que podrían interferir con otros procesos, produciendo batidos audibles, por ejemplo. A su vez la señal reconstruida no coincide exactamente con la original por que si comparamos la señal original con la señal reconstruida vemos, por ejemplo, que un valor de señal de 7,3 V se "reconstruyó" como 6,875 V, introduciéndose un error de -0,425 V. El error será tanto menor cuanto más pequeños sean los subintervalos en que se divide el rango útil de la señal, es decir, cuanto mayor sea la resolución en bits. La evolución en el tiempo de este error se denomina ruido de digitalización.

Relación entre el ruido de digitalización y la resolución

La mejor manera de evaluar el ruido de cualquier sistema (incluidos los de audio digital) es a través de la relación señal / ruido (S/R) en decibeles. Para el audio digital, la máxima S/R que puede obtenerse es, aproximadamente, igual a 6*n, donde n es la resolución en bits. Por ejemplo, un sistema de 16 bits, como el disco compacto (CD), admite una S/R de 6*16 = 96 dB. Nota: Debido a limitaciones en la parte analógica, la S/R suele ser menor que ese valor, por ejemplo 90 dB. Una resolución de 24 bits implica una relación señal / ruido de 144 dB. Ello significa que si la señal es de 4 V (un valor considerado muy alto para una señal de nivel de línea), entonces el ruido de digitalización estará 144 dB por debajo, que son 0,25 microvolts (esto significa que el salto que se produce entre el escalón correspondiente a un valor digital y el escalón que le sigue es de 0,25 microvolt). Ahora bien, casi todas las salidas de línea tienen una resistencia (impedancia) de salida del orden de 100 ohms. Toda resistencia tiene un ruido eléctrico (de origen térmico) que, calculado para este valor de resistencia, da 0,18 microvolt. Esto significa que con 24 bits estamos prácticamente al límite de lo que puede lograrse con la electrónica analógica. La mayor relación S/R que idealmente podría lograrse con una resolución mayor sería inaprovechable a causa del ruido térmico. Por otra parte, el ruido circuital no es sólo térmico. Los semiconductores en general producen bastante ruido, siendo muy raros (y costosos) los circuitos con relaciones señal / ruido mayores de 120 dB. La relación señal / ruido necesaria para una buena calidad de reproducción debería ser comparable con el rango dinámico del oído, que es la diferencia entre el umbral de dolor y el umbral de audición. En el caso más extremo, es decir el de personas jóvenes con excelente audición, estos umbrales están cerca de 120 dB y 0 dB

Page 31: Técnicas Digitales III Proyecto Integrador

V- 4

respectivamente, por lo cual una relación señal / ruido de 120 dB debería ser suficiente para las mayores exigencias. Sin embargo, en general las condiciones de escucha normales no permiten llevar a la práctica esta relación señal / ruido, ya que es muy difícil lograr ambientes con ruido de fondo inferior a 20 dB. Por lo tanto una relación señal / ruido de 100 dB debería resultar suficiente en la mayor parte de los casos. El trabajar con 20 bits y 24 bits, obteniendo relaciones S/R de 120 dB y 144 dB respectivamente, permite una mejor calidad en la conversión. Un conversor de 20 bits es mucho más lineal y tiene menor ruido que uno de sólo 16 y a su vez aportan formatos directamente compatibles con las nuevas tecnologías (por ejemplo el DVD).

Dither

Cuando se está digitalizando una señal de muy poca amplitud, los saltos discretos entre escalones sucesivos adquieren una dimensión comparable con la amplitud de la propia señal. Esto implica que la forma de onda sufre una distorsión que resulta ser perfectamente audible y molesta. Esto es porque además del espectro del sonido propiamente dicho se agregan sus armónicos, que contienen energía concentrada en el espectro en frecuencias discretas. En otras palabras, la energía del ruido de digitalización está concentrada. Se ha encontrado que si, antes del muestreo, se agrega una pequeña cantidad de ruido aleatorio (de espectro continuo y no discreto), al cabo del proceso de digitalización la señal resultante también tiene la energía correspondiente al ruido de digitalización distribuida, en lugar de concentrada. Desde el punto de vista de la relación señal / ruido, hubo un ligero empeoramiento, pero desde el punto de vista perceptivo, el ruido se ha vuelto mucho más tolerable e imperceptible. Hasta se puede trabajar con la forma de su espectro para hacerlo menos notorio. El ruido agregado se denomina dither. Dither digital Esto sucede en los procesos de recuantización para pasar, por ejemplo, de 24 bits a 16 bits. Si simplemente se truncaran los 8 bits menos significativos, estaríamos en presencia de algo equivalente a un muestreo y digitalización sin dither. En este caso, podría agregarse un dither generado analógicamente, pero también es posible agregar uno producido digitalmente en la forma de una sucesión de números pseudo aleatorios (es decir, obtenidos por un algoritmo de cómputo que si bien es determinístico aparenta ser aleatorio). Este dither se genera con la resolución original (más alta), y luego simplemente se redondea. Reproducción La reproducción de la señal se realiza en forma inversa, utilizando un conversor digital analógico (o DAC por sus siglas en inglés).

Procesamiento digital El procesamiento digital de señales de audio presenta numerosas ventajas frente al analógico:

• Es posible cuantificar la distorsión que sufrirá la señal por los procesos de conversión A/D y D/A • La señal digital no sufre distorsión • Puede hardware genérico y de bajo costo para el procesamiento de la señal, el cual puede ser

fácilmente modificado • Permite un aprovechamiento de canales de transmisión en forma más eficiente • Pueden utilizarse algoritmos de compresión de datos para optimizar canales de transmisión y

almacenamiento El proceso completo se muestra en el siguiente diagrama:

Bibliografía

Entrada/Salida de sonido en Windows Gabriel Agustín Praino, Facultad de Ingeniería, Universidad de Bs. As. SONIDO DIGITAL Universidad de Concepción, Departamento de Ingeniería Industrial

Page 32: Técnicas Digitales III Proyecto Integrador

V- 5

Apuntes de Sonido digital por Antonio Sacco. www.antoniosaco.com.ar Universidad de Concepción /Departamento de Ingeniería Industrial. Apuntes de Sistemas de Computación www.udec.com

Materia Integrada

Análisis de señales y sistemas. Tema: Muestreo de señales. Técnicas Digitales II, Tema: Conversores A/D, D/A. Medidas electrónicas II, Tema: Conversores A/D, D/A.

Page 33: Técnicas Digitales III Proyecto Integrador

VI - 1

Capítulo 6 Síntesis del sonido Introducción. Como ya sabemos la onda sonora es bastante compleja si consideramos que además de intensidad, tono y timbre se debe tener en cuenta la envolvente de ésta. Pero aún así, los hallazgos de Fourier demostraron que cualquier onda, por compleja que sea, puede reconstruirse a partir de la suma de ondas simples, a veces infinitas; y que bastan sólo unos pocos componentes para aproximarse al sonido real con un grado de precisión aceptable. La aplicación de este principio nos introduce directamente en la producción electrónica del sonido a partir de unos sonidos simples. Es lo que se llama síntesis digital del sonido. Sintetizadores Se les llama sintetizadores a los instrumentos musicales electrónicos capaces de generar sonido. Esto lo hacen manipulando en tiempo real diversos parámetros como: intensidad, tono, timbre y componentes de la envolvente. Los sintetizadores son polifónicos, es decir, producen varias notas (instrumentos, sonidos o voces) a la vez; y por otro lado pueden ser politímbricos (para cada voz), con lo que se parecen a los instrumentos tradicionales. La síntesis del sonido es producto de unión de tres componentes: oscilador, filtro y amplificador. Los osciladores: generan el tono fundamental del sonido. Son los módulos VCO (Voltage Controlled Oscillator) u osciladores por control de tensión, que producen una serie de fluctuaciones de tensión que son la representación eléctrica de la frecuencia de las vibraciones. Los filtros: modelan el sonido y generan aproximadamente el timbre. Son los módulos VCF (Voltage Controlled Filter) o filtros por control de tensión los que filtran ciertas frecuencias en beneficio de otras. Los VCF más importantes son los lowpass o filtros de paso bajo que filtran las frecuencias altas dejando pasar las bajas y los highpass o filtros de paso alto que filtran las frecuencias bajas dejando pasar las altas. Los filtros están caracterizados por el punto de corte (Cut Off) que cortará las frecuencias que sean inferiores o superiores a este valor. Los amplificadores: regulan el volumen y por tanto intervienen sobre la intensidad del sonido. Generalmente se le llaman módulos VCA (Voltage Controlled Amplifier) o amplificadores por control de tensión.

Existen módulos adicionales controladores que perfilan aún más la onda producida: el generador de envolvente (EG: Envelope Generator) y el oscilador de baja frecuencia (LFO: Low Frequency Oscillator). El generador de envolvente permite controlar los cuatro parámetros de la envolvente ataque (A), caída (C), parte sostenida (S) y extinción (R) o incluso combinaciones selectivas hablándose de AR, ADR, DADSR. La arquitectura clásica de los sintetizadores está basada en la síntesis sustractiva, cuyo nombre procede del hecho de que los timbres de las notas se conforman eliminado o filtrando armónicos. Existen otras tecnologías de síntesis como la síntesis aditiva, que recompone las formas sonoras desde cero controlando la amplitud de cada armónico de los 16 o 32 existentes por tono lo que demanda cálculo intensivo y la síntesis FM que modula las frecuencias de uno o varios osciladores con las de otros, etc.

Procesamiento del sonido digitalizado

Una vez que tenemos el sonido digitalizado, los valores numéricos pueden ser sometidos a diversas operaciones de transformación. Esto es lo que se conoce como Procesamiento de Sonido; aunque existen múltiples formas de procesar sonido, con múltiples propósitos (efectos especiales, eliminación de ruido, etc.), las operaciones más elementales son: Aumento o disminución de volumen: Consiste en incrementar o disminuir los valores de amplitud de una onda. Esta variación suele hacerse en una tasa fija para toda la onda (se suele expresar en %). Una variante es el Fade, que consiste en la atenuación gradual y progresiva del volumen en una parte determinada de la onda, o la inversa (el aumento gradual y progresivo de volumen). Filtrado: Consiste en seleccionar determinadas bandas de frecuencias en un sonido y someterlas a alguna operación (por ejemplo, silenciarlas o atenuarlas, o las operaciones inversas) Mezcla: Consiste en juntar o superponer dos sonidos diferentes, digitalizados de antemano. Juntos formarán una sola onda; generalmente, es posible especificar valores de volumen diferentes para cada sonido

Page 34: Técnicas Digitales III Proyecto Integrador

VI - 2

individual. Una variante es la producción de un sonido estéreo, de forma que cada una de las ondas originales ocupe un canal Cortado y pegado: Consiste en la posibilidad de eliminar o insertar partes de un sonido en determinados lugares de una onda. Con programas Windows, esto suele hacerse a través del Portapapeles. Procesamiento digital de señales:

Filtro pasa altos

s[n] = s[n] - s[n-1]

Filtro pasa bajos

s[n] = (s[n] + s[n-1] + s[n-2]) / 3

Eco

s[n] = s[n] + a * s[n-r] donde:

• s[n] es la n-esima muestra de la señal • a es un factor de atenuación (entre 0 y 1) • r es un retardo (mayor a 0)

Software de Edición y reproducción Los programas que permiten editar música y sonido se diferencian según el tipo de archivos que manejan, ya sea basados en partitura (MIDI, MOD...) o en muestreo (WAV, MP3...). Actualmente, casi todas las tarjetas de sonido incluyen software propietario tanto para la edición como para la reproducción de sonidos. Algunos permiten agregar instrumentos basados en nuevos muestreos, para las tarjetas de sonido que soportan tablas de voces por software. Otra característica común para este tipo de programas es que si se dispone de un instrumento digital, éste puede conectarse al puerto MIDI/Joystick para grabar sesiones en vivo. De esta forma se pueden registrar las notas que han sido interpretadas durante la ejecución; sin embargo los instrumentos musicales (voces) serán reemplazados por aquellos que estén disponibles en la tarjeta de sonido. Por otro lado, los editores de sonidos digitales, se caracterizan por su capacidad para soportar múltiples tipos de archivos, de manera de incluir la mayor cantidad de estándares de la industria. Como el tamaño de un archivo de sonido es un tema a tener en consideración, la calidad del software estará en relación a la capacidad que tenga de aprovechar los diferentes algoritmos de compresión de audio. También es posible encontrar editores de sonido en tiempo real. Los programas reproductores de audio generalmente soportan todo tipo de formato incluyendo audio digital y MIDI. El Windows Media Player de Microsoft, puede manejar una extensa variedad de archivos de sonido y video, o bien reproducir pistas de CD. Bibliografía: SONIDO DIGITAL Universidad de Concepción, Departamento de Ingeniería Industrial

Page 35: Técnicas Digitales III Proyecto Integrador

VII - 1

Capítulo7 Tarjetas de sonido

Introducción

Una tarjeta de sonido es el dispositivo de hardware encargado de la reproducción de sonido. Es el nexo entre una señal de sonido analógica y una digital, es decir, es la unidad que permite el traspaso de las señales a dispositivos multimedia externos (parlantes, grabador o reproductor de CD, etc). Es una tarjeta de expansión que permite que el computador genere, manipule y envíe sonidos. De su calidad dependerá directamente el sonido reproducido por nuestro equipo, pero en general, las tarjetas de sonido permiten al computador: _Enviar sonidos a los parlantes o a un equipo conectado a la tarjeta.

_Grabar sonido desde un micrófono conectado al computador.

_Manipular sonido almacenado en el disco duro.

Sus principales funciones son: _Capturar las señales procedentes del exterior, ya sea a través de dispositivos capaces de generar una señal

de onda, como por ejemplo un equipo de música .

_Reproducir sonidos de naturaleza digital.

Los componentes principales, que pertenecen a la mayoría de las tarjetas de sonido son los Jacks y los Conectores. Un Jack es la interfaz de conexión de un solo orificio, que permiten conectar otros dispositivos a la tarjeta de sonido, uno por orificio. Se encuentra en el panel posterior de la tarjeta. Los conectores son interfaces de la tarjeta de sonido que le permiten conectar otros dispositivos a la tarjeta.

Componentes fundamentales de una placa de sonido

La tarjeta de sonido es la encargada de convertir la información digital procesada por nuestro equipo en datos analógicos , o sonidos, para que sean reproducidos por unos parlantes conectados a la propia tarjeta de sonido. Igualmente, los sonidos analógicos introducidos por medio de un micrófono, un equipo de música conectado a LINE-IN, o un instrumento musical conectado al puerto MIDI, son transformados en información digital para que sea reconocida y procesada por el equipo. Por último, la tarjeta de sonido es la encargada de reproducir por medio de los parlantes conectados a ella las pistas musicales de un COMPACT DISC de música insertado en nuestra unidad de CD-ROM. Para ello, el CD-ROM y la TARJETA DE SONIDO deben estar conectados por un cable que normalmente viene incluido con las unidades de CD-ROM. El muestreo La capacidad de muestreo es uno de los factores más importantes en la calidad de una tarjeta de sonido. Es la velocidad a la cual la tarjeta de sonido toma muestras (medida en KHz), las velocidades de muestreo normalmente son de 11.025 KHz, 22.050 KHz, y 44.1 KHz.

El tamaño de la muestra

Determina la calidad del sonido, los tamaños de muestra más comunes son de 8, 12, 16, 20 y 32 bits. MIDI (musical instrument digital interfase)

Casi todas las tarjetas de sonido soportan MIDI, un estándar adoptado por la industria de la música electrónica para controlar dispositivos como sintetizadores y tarjetas de sonido que emiten música. Procesadores multi-propósito de señales digitales Las tarjetas de sonido tienen un procesador de señales digitales (DSP). Hacen que la tarjeta de sonido sea inteligente, liberando a la computadora del trabajo en tareas intensivas como filtrar ruidos de grabaciones o compresión de sonido.

Page 36: Técnicas Digitales III Proyecto Integrador

VII - 2

Efectos de sonido 3D

Algunas tarjetas incluyen efectos de sonido de 3D. Estos trabajan retardando el tiempo de ciertas posiciones de la señal de sonido tal que las frecuencias diferentes llegan al oído a diferentes tiempos, de modo que se crea un “sonido ambiental” Entrada y salida digital Extensiones para las tarjetas de sonido que son encontrados solo en sistemas de sonido profesionales. Proveen entrada y salida digital S/PDIF y una mejora a la entrada y salida de MIDI. La conectividad S/PDIF permite a los productores de multimedia e ingenieros de sonido conectar dispositivos compatibles con S/PDIF como un reproductor DAT (Digital Audio Tape) para producciones finales de muy alta calidad. Número de Bits

Las primeras tarjetas de sonido eran de 8 bits (AdLib) y no eran capaces de reproducir sonido digital. Luego aparecieron las tarjetas de sonido con capacidad de reproducción digital (Sound Blaster y Sound Blaster Pro, esta última con capacidad de reproducir sonido estéreo) y más tarde las tarjetas de sonido de 16 bits (Sound Blaster 16). Número de voces

Las tarjetas de sonido actuales llevan al final un número 16, 32 ó 64. Este número no se refiere al número de bits, sino al número de voces o instrumentos que son capaces de reproducir simultáneamente. Es decir, una tarjeta 16 (Sound Blaster 16 o compatibles, Gravis Ultrasound, etc.) es capaz de reproducir 16 voces o instrumentos simultáneamente, una tarjeta 32 (Sound Blaster 32, Guillemot Maxi Sound 32, etc.) es capaz de reproducir 32 voces simultáneamente y una tarjeta 64, lo mismo. Debemos tener en cuenta que algunas tarjetas de sonido pueden reproducir 64 voces simultáneamente, pero 32 de ellas por software, al no estar soportadas por la tarjeta (Sound Blaster 64), con lo que el procesador del equipo tiene que dedicar parte de sus recursos a este proceso. A mayor número de voces o instrumentos, mayor será la calidad del sonido reproducido. Calidad del sonido - KHz La relación entre la cantidad de muestras por segundo de un sonido y la calidad es directa. Por tanto a mayor número de KHz mayor calidad de sonido. Las primeras tarjetas de sonido de 8 bits eran capaces de reproducir a una frecuencia de 22KHz, la mitad de la calidad de música de un reproductor de Compact Disc. Con la aparición de las tarjetas de 16 bits, esta frecuencia se elevó a 44,1KHz (la frecuencia de los reproductores de Compact Disc) Desde ese momento, la frecuencia de muestreo no ha variado, pues la calidad obtenida es más que suficiente para garantizar una gran calidad. Sin embargo, están en el mercado tarjetas de sonido con una capacidad de muestreo superior, 48KHZ y hasta 55,2KHz. Tipo de síntesis MIDI

MIDI (Musical Instrument Digital Interface - Interfaz digital para instrumentos musicales) es una serie de instrucciones enviadas por una aplicación que le indican a la tarjeta de sonido qué instrumento suena, en qué nota y con qué duración. Las tarjetas de sonido con SINTESIS FM usan una combinación de ondas que imitan los sonidos de los distintos instrumentos, dando lugar a una sensación de sonido tipo sintetizador. Este tipo de síntesis la podemos encontrar en la mayoría de las tarjetas (Sound Blaster 16 y compatibles). Las tarjetas de sonido con SINTESIS POR TABLA DE ONDAS (WAVETABLE) usan muestras digitalizadas de sonidos de instrumentos reales que se almacenan en la TABLA DE ONDAS (memoria ROM) de la tarjeta de sonido. La mayoría de las tarjetas con síntesis por tabla de ondas incluyen además cierta cantidad de memoria RAM en la propia tarjeta, o la posibilidad de añadir memoria mediante unos zócalos similares a los de memoria RAM de la placa base, para que podamos grabar muestras y así mejorar la calidad del sonido. Los parlantes La gran mayoría de las tarjetas de sonido incluyen un amplificador interno de 4 Watts por canal, lo que nos permite conectar a la salida de la tarjeta unos parlantes que no superen esta capacidad.

Page 37: Técnicas Digitales III Proyecto Integrador

VII - 3

Otras Utilidades Muchas de las tarjetas con síntesis por tabla de ondas incluyen DSP (procesador de sonido digital avanzado), que descarga de trabajo al procesador cuando se realizan ciertos procesos. Ya que por medio de una conexión a Internet podemos realizar video conferencias o simplemente comunicación telefónica, se ha empezado a implementar el soporte FULL-DUPLEX en las tarjetas de sonido. La tecnología FULL-DUPLEX consiste en que la tarjeta es capaz de recibir o grabar la voz que llega a través del micrófono u otro dispositivo conectado a la entrada LINE-IN, al mismo tiempo que está reproduciendo por la salida SPEAKER o LINE-OUT la voz o los sonidos que le llegan a través de la conexión a Internet. El SONIDO 3D nos brinda un efecto tridimensional se puede conseguir por medio de software o por medio de hardware, de modo que se crea un efecto de sonido envolvente. La única manera de conseguir sonido envolvente es mediante el uso de 4 parlantes.

Entradas salidas. Tipos de conectores Las entradas de una tarjeta de audio son conectores eléctricos u ópticos que pueden ser de tipo digital o analógico. Los más básicos son:

• Line IN: entrada analógica, normalmente estéreo, que recoge el sonido procedente de la salida (Line OUT) de otro dispositivo de audio, por ejemplo un reproductor de CD, una radio, otro ordenador, etc.

• Line OUT: salida que proporciona una señal del mismo tipo que la que puede entrar por la Line IN. Por tanto ésta salida no es apta, en general, para la conexión directa de altavoces, sino para enviar una señal a otro dispositivo de procesado o amplificación de sonido (por ejemplo: una cadena hi-fi)

• MIC IN : ésta entrada se usa para captar señales más débiles, procedentes de micrófonos o instrumentos musicales que disponen de transductores acústico-eléctricos (por ejemplo: guitarras eléctricas). La señal que entra por MIC IN se amplifica en la tarjeta de sonido hasta alcanzar un nivel adecuado para su proceso.

• Speaker OUT: a ésta salida se suelen conectar unos pequeños altavoces o unos auriculares. Suele incorporar a su vez una pequeña amplificación que en algunas tarjetas se puede regular mediante un control de volumen hardware externo.

• S/PDIF (InterFaz Digital Sonny/Philips): es un tipo de conector de E/S óptico, desarrollado por Sony y Philips para poder transmitir señales de audio digital entre dos dispositivos sin tener que convertirlas primero a formato analógico. Al tratar al sonido digitalmente, en ningún momento se producen pérdidas de calidad al pasar de soporte digital al ordenador o viceversa.

Page 38: Técnicas Digitales III Proyecto Integrador

VII - 4

• MIDI (Musical Instruments Digital Interface). Se trata de una interfaz serie asíncrona para la conexión de dispositivos controladores (por ejemplo: un teclado MIDI, un módulo de sonidos,...) al PC. Por lo general las tarjetas de sonido utilizan el mismo puerto para el joystick, por lo que se requiere un cable MIDI adaptador de un conector DB15 a dos conectores DIN de 5 pines de los que se utilizan 3: In(4), Out(5) y masa(2). La longitud máxima del cable es de 15 metros y tiene que ser trenzado y apantallado con la pantalla conectada al pin 2 en ambos extremos. Las patillas 1 y 3 se dejan sin conectar.

Tradicionalmente, para las E/S anteriores se han utilizado conectores mini-jack como los que usamos en un walkman, por ejemplo. Éstos siguen siendo los más comunes en las soluciones de nivel bajo y medio. Se trata de conexiones analógicas de media calidad. Algunas tarjetas incorporan también conectores tipo RCA. Normalmente cada RCA es un canal independiente (mientras que en el jack van dos canales juntos). Por ello siempre van de dos en dos (clásicamente el rojo es el canal derecho y el blanco el izquierdo). Ofrecen mayor calidad que los conectores jack tradicionales pero son más caros y menos compactos. Además de las anteriores conexiones, que son externas, las hay también internas, siendo la más importante la del CD-ROM a la tarjeta de sonido, para poder escuchar los CDs de música. Puede ser digital o analógica, de la cual hace tiempo había varios formatos (para CD-ROMs Sony, Mitsumi, IDE...). Incluso en algunas tarjetas antiguas se incluía un conector IDE de 40 pines para el CD-ROM.

Características técnicas e Información de la placa de sonido utilizada

La placa de sonido utilizada es una placa “Onboard” modelo CMI8338/C3DX PCI audio. Las características se muestran en la siguiente tabla:

Especificaciones de Hardware Respuesta en frecuencia 100Hz - 10KHz Razón señal ruido 120 db Frecuencia de muestreo mono 5kHz to 44.1 kHz Frecuencia de muestreo estereo 5kHz to 44.1 kHz Fuente de tensión "+5, +12, -12 Volt" Consumo de corriente 50, 500, 30 mA Impedancia del micrófono 600 Ohms Impedancia de Line-In 39 KOhms Impedancia de CD Audio-In No posee Sensibilidad del micrófono 10 - 200 mVpp Sensibilidad de Line-In 0 - 2 Vpp Sensibilidad CD Audio-In No posee Resolución de A/D, D/A 16 bits Potencia de salida 4 Watts, 4 Ohms Mezclador D/A Stereo

Page 39: Técnicas Digitales III Proyecto Integrador

VII - 5

3D Audio Direct Soun 3D Configuración del Hardware

Interrupción IRQ 10 Canal DMA (8 bit) 1 Canal DMA (16 bit) 1, 5 (compartido con el de 8bit) Joystick I/O Address 200 Hex Audio I/O Address 220 Hex FM Synthesizer I/O Address 388 Hex Sintetizador Wave, I/O Address No documentado MPU-401 I/O Address 0300Hex

Conectores Line-In Si Mic-In Si Line-Out No posee Speaker-Out Si PC Speaker-In No posee Game/Joystick Port Si CD-ROM Audio-In No posee CD-ROM Audio-In (MPC2) No posee External CD-ROM No posee CSP Chip Socket No posee

Requisitos del sistema Sistema Operativo Win. 3.1, 95, 98, NT Espacio en disco 44.2kb Slot Onboard PCI Placa madre PC 100 RAM No documentado Bibliografía. TARJETAS DE AUDIO – HARDWARE, http://www.lpi.tel.uva.es Support – KnowledgeBase Sound Blaster Product Information Sound Blaster Audio Technologies www.guillemot.com www.soundblaster.com www.duiops.net/hardware.tarjson/tarjson.html SONIDO DIGITAL Universidad de Concepción, Departamento de Ingeniería Industrial LA TARJETA DE SONIDO, J&P "El Rincón del Hardware" © 1998-99 Materia Integrada Técnicas Digitales III. Tema: Pc. Compatibles. (En los apunes de clase no se encuentra el tema placas de sonido pero se explican el sistema de interrupciones y buses).

Page 40: Técnicas Digitales III Proyecto Integrador

VIII - 1

Capítulo 8 DSP (Digital Signal Procesor) Introducción Este Procesador de Sonido Digital libera de trabajo al procesador central del equipo. Para estudiarlo con algo más de profundidad, conviene primero de todo distinguir tres conceptos parecidos que usan prácticamente las mismas siglas y que son por tanto susceptibles de confusión. En primer lugar tenemos la tecnología general de los DSP (en su acepción de Procesadores Digitales de Señal), que ha revolucionado el panorama del procesamiento de señales digitales. Estos DSP son poderosos microprocesadores capaces de procesar mucha información en tiempo real como señales de radio, sonido o vídeo. En el contexto de los anteriores es en el que se enmarcan los DSP (Procesadores de Sonido Digital) que se aplican sobre una señal sonora. Pero también tenemos el DSP como Procesamiento Digital de Campos Sonoros, que se trata de una tecnología creada por Yamaha en 1986 para recrear las mismas características acústicas de una sala de conciertos, un club de jazz o de una sala cinematográfica en nuestro propio hogar. El DSP que nos interesa ahora es el que se refiere al sonido. Cuando tratamos con una pista de sonido que tenemos grabada, por ejemplo, podemos tener la posibilidad de aplicarle efectos (eco, coro, reverberación,...) o también simular sintetizadores de sonido, realizar fades, ... Por supuesto, este proceso de modificación de una señal digital requiere potencia de cálculo, y además existen multitud de aplicaciones en la que se hace necesario el procesado de un efecto en tiempo real. Es por ello que actualmente, tanto las tarjetas de gama baja como las de gama alta incorporan un DSP, diseñado específicamente para éste tipo de tareas con lo cuál se consigue, además de liberar de carga al procesador del PC, un mayor rendimiento, ya que éste último no deja de ser una máquina de propósito general, y puede resultar menos capaz para estos procesos. Con el continuo desarrollo de los avances en tecnología digital, el DSP se ha convertido en la parte principal de cualquier tarjeta de sonido, y entre las especificaciones de cualquier tarjeta comercial, incluso de gama más baja podemos encontrar funciones como:

• Efectos digitales en tiempo real y en cualquier fuente de sonido como reverberación, coro, flanger, variador de fase o distorsión.

• Capacidad de proceso, mezcla y posicionamiento de hasta 131 canales por Hardware. • Control de agudos, graves y efectos aplicados en cualquier señal de sonido. • Configuración de salida optimizada para auriculares, dos o cuatro altavoces. • Tecnología capaz de ubicar un sonido mono o estéreo en un espacio de 360°. • Entornos creados por el DSP como sala, teatro, club, etc. En cualquier fuente de sonido y

modificable por el usuario.

Procesador de sonido digital (DSP) Este chip es el encargado de procesar todas la órdenes enviadas por las aplicaciones y organiza a los demás chips de sonido de la tarjeta para que reproduzcan los sonidos que se solicitan. Se ocupa de enviar y recibir los datos MIDI de los teclados electrónicos y los sintetizadores; así como descomprimir los archivos al ir llegando a la computadora. A continuación se muestran los comandos utilizados para programar el DSP en las versiones 2.00, 2.01+, 3.xx y 4.xx.

Categoría Comando Descripción

8 bit direct mode digitezed 10h output

Sound I/O 20h input

Transfer time constant 40h Set digitezed sound transfer time constant

8 bit single cycle DMA 14h output

Page 41: Técnicas Digitales III Proyecto Integrador

VIII - 2

Mode digitezed sound I/O 24h input

74h 8 bit to 4 bit ADPCM output

75h 8 bit to 4 bit ADPCM output with ref. byte

76h 8 bit to 3 bit ADPCM output

77h 8 bit to 3 bit ADPCM output with ref. byte

16h 8 bit to 2 bit ADPCM output

17h 8 bit to 2 bit ADPCM output output with ref. byte

8 bit DMA mode digitezed sound D0h Pause DMA mode

I/O control D4h Continue DMA mode

Digitezed sound output D1h Turn on speaker

Speaker control D3h Turn off speaker

MIDI I/O 30h Polling mode input

31h Interrupt mode input

38 otput

80h Pquse digitezed sound output for a duration

E1h Get DSP version number

Fuente "Developer Kit for Sound Blaster Series".

El Chip sintetizador de FM Sintetizar significa "poner junto". Así pues, la función de un sintetizador es la de integrar todos los elementos que intervienen para reproducir un determinado sonido. En las tarjetas de sonido el chip sintetizador de FM es el OPL2 u OPL3 de Yamaha. El chip reproduce hasta 11 instrumentos simultáneamente. La simulación de los sonidos se efectúa aproximando las ondas sinusoidales producidas por él, a las formas de onda generadas por los instrumentos reales. Para la programación de la tarjeta es necesario enviar los datos hacia los registros internos por medio de sus dos puertos de entrada y salida:

0388h Dirección/Puerto de Status (R/W) 0389h Puerto de datos (W/O)

Para la reproducción de música FM estereo se usan las direcciones 0220h y 0221h para la bocina izquierda, y las direcciones 0222h y 0223h para la bocina derecha. Los puertos 0388h y 0389h provocan la salida a través de ambas bocinas. Las tarjetas poseen un arreglo de doscientos cuarenta y cuatro registros; para escribir en un registro particular se envía el número de registro (01-F5) al puerto de direcciones, y el valor del dato a su respectivo puerto. Después de escribir en el puerto de registros se esperan 3.3 microsegundos antes de enviar la dirección, y 23 microsegundos más para el dato. Los registros son únicamente de escritura. El puerto de direcciones funciona como byte de status de la tarjeta, en la dirección 388h. En la siguiente tabla se muestra la función de cada registro:

Dirección Función

Page 42: Técnicas Digitales III Proyecto Integrador

VIII - 3

01 Test LSI / Enable waveform control

02 Timer 1 data

03 Timer 2 data

04 Timer control flags

08 Speech synthesis mode / Keyboard split note select

20-35 Amp Mod / Vibrato / EG type / Key Scaling / Multiple

40-55 Key scaling level / Operator output level

60-75 Attack Rate / Decay Rate

80-95 Sustain Level / Release Rate

A0-A8 Frecuency (low 8 bits)

B0-B8 Key On / Octave / Frecuency (high 2 bits)

BD AM depth / Vibrato depth / Rhythm control

C0-C8 Feedback strength / Connetion type

E0-F5 Wave Select

Fuente "Programming the AdLib/Sound Blaster"

Los grupos de 22 registros se utilizan por pares para la utilización de cada voz FM. La tarjeta sintetiza sonidos de hasta 8 octavas de un instrumento. Los valores para la escala cromática son:

Numero Frecuencia Nota

16B 277.2 C sostenido

181 293.7 D

198 311.1 D sostenido

1B0 329.6 E

1CA 349.2 F

1E5 370.0 F sostenido

202 392.0 G

Page 43: Técnicas Digitales III Proyecto Integrador

VIII - 4

220 415.3 G sostenido

241 440.0 A

263 466.2 A sostenido

287 493.9 B

2AE 523.3 C

El UART MPU-401

Programación del puerto MIDI para I/O

La interfase entre la tarjeta de sonido y los dispositivos MIDI, se realiza a través del chip MPU-401. Este dispositivo tiene dos modos de operación, el SB-MIDI y el modo UART. El puerto SB-MIDI está disponible en todas las tarjetas de sonido. El modo UART se incluye únicamente en las tarjetas de 16 bits. Se usa cualquiera de las dos interfaces MIDI, es mejor usar el modo de 16 bits, tiene sus propios puertos e interrupciones independientes.

El modo SB-MIDI Este modo proporciona una interfase para I/O en modo normal como el modo UART. El dato MIDI entrante se detecta al usar el método de poleo, o el de interrupción.

El modo MPU-401 En este modo la interfase no presenta servicios, literalmente relee todo lo que recibe sin modificar o interpretar, entre la PC y el dispositivo MIDI. Una vez activado el modo UART, el único comando que reconoce es el Reset. Estos puntos son básicos para iniciar la programación de la tarjeta de sonido. Sólo tienen que enviarse los datos a la dirección correcta.

BASE ADDRESS

I/O ADDRESSES USED

220h 220h to 233h

240h 240h to 253h

260h 260h to 273h

280h 280h to 293h

SB16 I/O PORTS

Page 44: Técnicas Digitales III Proyecto Integrador

VIII - 5

I/O

ADDRESS

DESCRIPTION ACCESS

Base + 0h FM Music Status Port Read

Base + 0h FM Music Register Address Port Write

Base + 1h FM Music Data Port Write Only

Base + 2h Advanced FM Music Status Port Read

Base + 2h Advanced FM Music Register Port Write

Base + 3h Advanced FM Music Data Port Write Only

Base + 4h Mixer chip Register Address Port Write Only

Base + 5h Mixer chip Data Port Read/Write

Base + 6h DSP Reset Write Only

Base + 8h FM Music Status Port Read

Base + 8h FM Music Register Port Write

Base + 9h FM Music Data Port Write Only

Base + Ah DSP Read Data Port Read Only

Base + Ch DSP Write Command/Data Write

Base + Ch DSP Write-Buffer Status (bit 7) Read

Base + Eh DSP Read-Buffer Status (bit 7) Read Only

Base + 10h CD-ROM Command or Data Register Read/Write

Base + 11h CD-ROM Status Register Read Only

Base + 12h CD-ROM Reset Register Write Only

Base + 13h CD-ROM Enable Register Write Only

SB16 I/O PORT FUNCTIONS Bibliografia: Developer Kit For Sound Blaster Series. PROCESADOR DE SONIDO DIGITAL (DSP) Stephan M_ Bernsee's Audio DSP Materia Integrada Técnicas Digitales 3. Tema: DSP

Page 45: Técnicas Digitales III Proyecto Integrador

IX- 1

Capítulo 9 Formatos digitales

Introducción:

La digitalización consiste en cuantificar la amplitud de onda. Como antes visto quedan definidos dos conceptos que son claves en la digitalización, como son: Tasa de muestreo y resolución. La tasa de muestreo es el número de lecturas que se hacen por unidad de tiempo. La resolución es el número de estados diferentes que se pueden distinguir en una señal. A mayor resolución y mayor tasa de muestreo se obtendrá mayor fidelidad en la señal muestreada.

Almacenamiento

Existen dos posibilidades de almacenamiento los archivos de audio digital y los archivos MIDI.

Sonido Audio Digital Este método de almacenamiento de audio digital presenta el grave problema de la cantidad de disco duro que se necesita para su almacenamiento y, sobre todo, memoria que se necesita para trabajar con el audio digital. Es por ello que se han estado desarrollando formatos de archivos que buscan comprimir cada vez más los archivos para realizar grabaciones de alta calidad sin necesidad de tanto espacio. Estas técnicas suelen incluir un método para codificar secuencias largas de bytes repetidos. Por ejemplo:

Si queremos digitalizar 3 minutos de música, y muestreamos 44100 veces por segundo, como en cada muestra

almacenamos dos bytes (16 bits o un word) obtenemos:

3min x 60 seg/min x 44100 muestras/seg x 2 bytes/muestra = 15.876.000 bytes.

Luego, para poder almacenar una canción de tres minutos, necesitamos casi 16 Mb.

Ahora bien, una vez obtenido el audio en forma digital, el cual esta almacenado en la memoria RAM, se le debe dar un tipo de formato para crear el archivo que se almacenara en disco, este tipo de formato es utilizado luego para la reproducción del sonido. A continuación haremos referencia a los formatos mas utilizados por los distintos paquetes de software del mercado y que muestran a su vez la evolución de estos formatos: Formato Característica

AU Son el formato audio estándar en los computadores Sun. Por lo general son de 8 bits y poseen menor calidad que otros formatos de sonido.

IFF Es común en computadores Macintosth. Pueden ser de 8 o 16 bits, soportan frecuencias de muestreo de hasta 44.1 KHz y tamaños de muestra de hasta 32 bits por muestra. También está el IFF-C que es un formato de archivo IFF comprimido.

WAV Es el formato utilizado por defecto por Windows. Posee compresión propia, y, aunque ha sido sobrepasado técnicamente por otros formatos, es uno de los más conocidos y popularizados. Puede ser de 8 o 16 bits con índices de muestreo de 11.025, 22.05 ó44.1 KHz, gestiona los datos en mono o en estéreo y por lo general tienen buena calidad de sonido.

VOC Admite muestras de 8 y 16 bits, admite frecuencias de muestreo de 11.025 kHz, 22.05 kHz, y 44.1 kHz, y los datos pueden guardarse comprimidos o sin comprimir (solo para Sound Blaster ). El formato de archivo VOC usa el concepto de bloques de silencio, es decir, un periodo extenso de silencio se reemplaza en el archivo de audio con una marca y un valor de su duración temporal, con lo que se consigue un pequeño ahorro de espacio en disco.

Real Audio Posee un sistema potente de descompresión, que puede funcionar sin necesidad de operar con el archivo entero, lo cual permite que los programas de reproducción puedan ir decodificando y reproduciendo el sonido a medida que la información les va llegando, sin esperar a recibir el archivo completo. Este mecanismo es utilizable también para video.

MP3 Permite almacenar sonido de gran calidad con altas tasas de compresión. Es un formato que se

Page 46: Técnicas Digitales III Proyecto Integrador

IX- 2

está utilizando bastante para transmitir música de alta calidad por la red, así como en otro tipo de medios informáticos. MPEG Audio File

VQF (Transform-domain Weighted Interleave Vector Quantization): es un nuevo formato de compresión de audio desarrollado por Yamaha, similar al MP3, pero con una mejor compresión y calidad de sonido. Los archivos VQF son entre 30-35% más pequeños que un archivo MP3.

aa Audible Audio File aac FAAC File aif Audio File aifc Audio File aiff Audio File ape Monkey's Audio File asf Windows Media File asx Windows Media Playlist avi Video File dat Video CD File jmx MusicEx File lks Learnkey's Real CBT File lqt Liquid Audio File m1v MPEG Video File m3u MP3 Playlist mid MIDI File midi MIDI File mov Quicktime Video File mp+ MPEGPlus File Mp2 MPEG Audio File mpa MPEG Audio File mpe MPEG Video File mpeg MPEG Video File mpg MPEG Video File mpv MPEG Video File ogg Ogg Vorbis File pls MP3 Playlist ra Real Audio File ram Real Media File rm Real Media File rmi MIDI File rmid MIDI File rmm Real Media File rmx Real Media File sdp Scalable Multicast File smi SMIL Document File smil SMIL Document File snd Audio File (Mac) swf Shockwave File tac TAC File wax Windows Media Playlist wm Windows Media File wma Windows Media File wmv Windows Media File Los archivos de audio digital son recomendables cuando: No se tenga control completo acerca del hardware de reproducción. Se disponga de suficientes recursos para manejar los archivos digitales.

Page 47: Técnicas Digitales III Proyecto Integrador

IX- 3

Se necesite reproducir diálogos.

Formato de archivo: WAVE

Introducción Uno de los formatos de fichero más utilizados para almacenar sonidos es el formato WAV. Se trata de almacenar las muestras una tras otra (a continuación de la cabecera del fichero, que entre otras cosas indica la frecuencia de muestreo), sin ningún tipo de compresión de datos, con cuantificación uniforme. La sencillez de este formato lo hace ideal para el tratamiento digital del sonido. El formato de archivo de WAVE es un subconjunto de la especificación RIFF de Microsoft que puede incluir muchos tipos diferentes de datos.

Especificación RIFF (Resource Interchange File Format) RIFF define un formato de archivo para guardar varios tipos de datos, principalmente datos multimedia tales como audio y video. La estructura de la etiquetar del archivo es útil porque ayuda a prevenir problemas de compatibilidad que pueden ocurrir ya que la definición del archivo cambia con el tiempo. Cada tramo de datos en el archivo se identifica por un título normal, una aplicación que no reconoce un elemento del datos dado puede saltearse la información desconocida. Un archivo RIFF es construido para un bloque de estructura básico llamado “chunk” en la sintaxis “C”. Existen dos tipos de “chunk”, el RIFF y LIST, los “chunk” pueden contener otros chunk llamados sub-chunk. Un archivo RIFF compatible contiene tres partes: Un “chunk INFO-LIST” que contiene un número de requerimientos y “sub-chunk” opcionales que describen el archivo, su historia y su uso. Un “sdta-list chunk” que contiene un solo “sub-chunk” que hace la articulación con los samples del audio digitales. Un “ pdta-list chunk” contiene nueve “sub-chunk” que definen la articulación de los datos de audio digitales. Los tres “chunk” pueden aparecer en distinto orden, pero el orden de los diferentes “sub-chunk” es fijo. La primer “chunk” de una estructura RIFF es el “tipo del formulario” (form type) que describe el tipo global de los volúmenes del archivo. Así que la estructura de un archivo RIFF tiene la siguiente forma: Dirección (hex) Contenido 0000 'R', 'I', 'F', 'F' 0004 Longitud del archivo-8 (32-bit usando enteros) 0008 Tipo del formulario (4 caracteres) 000C Primer tipo de “chunk” (4 carácter) 0010 Tamaño del primer “chunk” (32-bit usando enteros) 0014 Datos del primer “chunk”

Ficheros de sonido WAVE El formato WAVE es un subconjunto de RIFF usado para almacenar audio digital. Su tipo de formulario es el WAVE y requiere dos “chunk”:

• fmt chunk que describe el sample rate, sample width, etc. • data chunk que contiene el sample date.

El formato WAVE también puede contener cualquier otro tipo de “chunk” permitido por RIFF, incluso “chunk LISTA” que se usan para contener tipos optativos de datos como la fecha, el derechos de propiedad literaria el nombre de autor, etc. Los “chunk” pueden aparecer en cualquier orden. El archivo WAVE es muy poderoso, este tipo de formato se promulgo al aparecer la API WIN32.

Page 48: Técnicas Digitales III Proyecto Integrador

IX- 4

Tipo de compresión utilizado por WAVE. Las especificaciones del archivo WAVE soporta varios tipos de algoritmos de compresión. En el formato dela cabecera se indica que tipo de compresión usa, esto es indicado en “fmt chunk”: Un valor de 1 indica la Modulación de Código de Pulso (PCM) que es una "recta" o no compresión del código de las muestras. Los valores distintos de 1 indican algún forma de compresión.

Formato de los ficheros de Sonido WAV El formato de los ficheros .WAV es el siguiente:

Bytes Contenido Usual Propósito/Descripción

00 - 03 "RIFF" Bloque de identificación (sin comillas).

04 - 07 ??? Entero largo. Tamaño del fichero en bytes, incluyendo cabecera.

08 - 11 "WAVE" Otro identificador.

12 - 15 "fmt " Otro identificador

16 -19 16, 0, 0, 0 Tamaño de la cabecera hasta este punto.

20 - 21 1, 0 Etiqueta de formato. (La versión del tipo de formato utilizado).

22 - 23 1, 0 Número de canales (2 si es estéreo).

24 - 27 ??? Frecuencia de muestreo (muestras/segundo).

28 - 31 ??? Número medio de bytes/segundo.

32 - 33 1, 0 Alineamiento de bloque.

34 - 35 8, 0 Número de Bits por muestra (normalmente 8, 16 ó 32).

36 - 39 "data" Marcador que indica el comienzo de los datos de las muestras.

40 - 43 ??? Número de bytes muestreados.

resto ??? Muestras (cuantificación uniforme)

Los datos numéricos que ocupan más de un byte se representan de la siguiente forma: Primero están los bytes menos significativos, y a continuación los más significativos (convenio "little endian", también conocido como "formato Intel").

Lectura y grabación de archivos WAVE bajo Windows Para la lectura de un archivo WAVE su usa las funciones de Win32, para ello se utiliza la función PlaySound (). Si se utiliza un sistema operativo de 16-bit como Windows, se usa la función sndPlaySound(). Se puede usar ambas funciones sin conocer sobre el formato interior del archivo. Para obtener un mejor manejo se puede utilizar las funciones MCI de Windows que proporcionan un mejor manejo de los archivos WAVE.

Análisis de frecuencia Para realizar un análisis de frecuencia se utiliza Fast Fourier Transform (FFT), directamente a los datos obtenidos descartando de antemano la cabecera del archivo.

Bibliografía:

SONIDO DIGITAL Universidad de Concepción, Departamento de Ingeniería Industrial www.unitec.edu.co/biblioteca/multimedia/tm8 Developer Kit For Sound Blaster Series, Segunda Edición

Page 49: Técnicas Digitales III Proyecto Integrador

IX- 5

The WAVE File Format, http://www.lightlink.com/tjweber/StripWav/WAVE.html SoundFont 2.01 Technical Specification Microsoft Windows SDK Multimedia Programmer’s Reference.

Page 50: Técnicas Digitales III Proyecto Integrador

X - 1

Capítulo 10 MCI de Windows

Introducción:

La programación de sonido bajo Windows se puede llevar a cabo con dos herramientas diferentes, los comandos MCI y las funciones de bajo nivel del API de Windows. La programación de sonido (tanto de audio digital como de MIDI) es un caso particular de la programación multimedia. La programación en Windows puede abordar el multimedia a través de dos enfoques diferentes: el MCI y las funciones de bajo nivel. El MCI es el método más sencillo. MCI proporciona aplicaciones con compatibilidad a dispositivos independientes para controlar periféricos de audio y video. Las aplicaciones pueden usar MCI para controlar y soportar cualquier dispositivo multimedia, incluyendo los dispositivos de audio basados en forma de onda, secuencias MIDI, dispositivos de CD de audio y video digital (cintas de video). Las siglas MCI corresponden a Media Control Interface, un conjunto de herramientas de programación con las que se logra una funcionalidad muy similar a la del reproductor de medios de Windows (de hecho, esta aplicación las utiliza casi exclusivamente). Uno de los puntos más relevantes del MCI, es que trata del mismo modo todos los dispositivos multimedia (reproductor de CD, vídeo analógico y digital, videodisco, audio digital y MIDI). Existen dos interfaces de uso de los comandos MCI, el interfaz de cadenas de comandos (command-string interface) y el interfaz de mensajes de comandos (command-message interface).

Comandos MCI “Strings” y “Messages”

MCI soporta comandos “Strings” y “Messages”. Se puede usar cualquiera de los dos métodos , o ambos, en su aplicación de MCI.

• La interfase de comando “Messages” consiste de constantes y estructuras. Se utiliza la función “mciSendCommand” para enviar los mensajes a un dispositivo de MCI.

• La interfase de comando “Strings” provee una versión textual del mensaje de comando. Se utiliza la función “mciSendString” parra enviar los “Strings” a un dispositivo de MCI. Los comandos “Strings” duplican la funcionalidad de los mensajes de comando. El sistema operativo convierte los comandos “Strings” a comandos de mensaje para enviarlos a el dispositivo MCI para que lo procese.

Los comandos “Messages” agrupan la información en forma de estructuras, que son fáciles de interpretar en aplicaciones C. Estas estructuras pueden contener información sobre muchos aspectos diferentes de un dispositivo. Los comandos “Strings” agrupa la información en forma de “Strings”, y se puede recuperar sólo un “Strings” por vez. La aplicación debe analizar o debe probar cada “Strings” para interpretarlo. Algunas aplicaciones MCI usan los “Strings” cuando el valor del retorno no importa (solo para verificar el éxito) y comandos de mensajes para recuperar la información del dispositivo.

Comandos “Strings” Para enviar un comando “Strings” a un dispositivo MCI, se usa la función mciSendString que incluye los parámetros para el comando “Strings” y un buffer para cualquier retorno de información. la función mciSendString retorna cero si la operación fue exitosa. Si la función falla, la palabra de bajo-orden del valor del retorno contiene un código del error. Se puede pasar este código del error a la función mciGetErrorString para conseguir una descripción del error.

Sintaxis del comando Strings

Los comandos string MCI usan una sintaxis de tipo verbo-objeto-modificador. Cada comando string incluye un comando, un identificador del dispositivo, y un comando del argumento. Los argumentos son optativos para algunos comandos y requeridos por otros. Un comando string tiene el siguiente información: _Argumentos del comando device_id

Este componente contiene la siguiente información:

Page 51: Técnicas Digitales III Proyecto Integrador

X - 2

• El comando especifica un comando de MCI, como "open", "close", o "play". • El "device_id" identifica una petición a un dispositivo MCI. El device_id se crea cuando el

dispositivo se abre. • Los argumentos especifican las banderas y variables usadas por el comando. Las banderas

son palabras claves reconocidas por el comando MCI. Las variables son números o strings que aplican al comando MCI o a la bandera. Por ejemplo, el comando play usa los argumentos "de la posición" a la posición" para indicar las posiciones para empezar y parar. Cuando se usa una bandera que tiene una variable asociada, se debe proporcionar un valor para la variable. si no esta especificado (es optativo) los argumentos del comando asumen un valor predefinido.

La función del ejemplo siguiente envía el comando con las banderas "desde" y "hasta": DWORD PlayFromTo(LPSTR lpstrAlias, DWORD dwFrom, DWORD dwTo) char achCommandBuff[128]; // Form the command string. wsprintf(achCommandBuff, "play %s from %u to %u", lpstrAlias, dwFrom, dwTo); // Send the command string. return mciSendString(achCommandBuff, NULL, 0, NULL);

Comandos “Messages” La interfase de comando "menssage" se diseña para ser usada por aplicaciones que exigen a una interfaz del lenguaje C para controlar los dispositivos multimedia. Usa un paradigma "mensaje de paso" para comunicarse con los dispositivos MCI. Se puede enviar una orden usando la función mciSendCommand. La función mciSendCommand retorna cero si es exitoso. Si la función falla, la palabra de retorno contiene un código del error. Se puede pasar este código de error a la función mciGetErrorString para conseguir una descripción textual del error. La sintaxis de comando "Messages" Los comandos MCI "menssages" consisten en los siguientes elementos :

• Un valor constante del mensaje • Una estructura que contiene los parámetros para la orden • Un juego de banderas especificando las opciones para el comando y validando los campos en el

bloque del parámetro. El ejemplo siguiente usa el mciSendCommand la función para enviar el comando MCI_PLAY al dispositivo identificado por un identificador del dispositivo. mciSendCommand(wDeviceID, // device identifier MCI_PLAY, // command message 0, // flags (DWORD)(LPVOID) &mciPlayParms); // parameter block El identificador de dispositivo da en el primer parámetro que es recupera cuando el dispositivo se abre usando el comando MCI_OPEN. El último parámetro es la dirección de una estructura MCI_PLAY_PARMS sobre la cual se podría contener la información dónde empezar y acabar la reproducción. Muchos comandos MCI "menssages" usan una estructura para contener parámetros de este tipo. El primer miembro de cada uno de estas estructuras identifica la ventana que recibe un mensaje MM_MCINOTIFY cuando termina la operación.

Posibilidades de audio de las cadenas de comandos Básicamente, las acciones realizables en el campo del sonido son las siguientes:

Page 52: Técnicas Digitales III Proyecto Integrador

X - 3

_Acceder a cualquier punto de un CD audio _Reproducir total o parcialmente un CD audio _Reproducir total o parcialmente ficheros de forma de onda _Grabar ficheros de forma de onda _Obtener información sobre el dispositivo de forma de onda _Reproducir total o parcialmente ficheros MIDI _Obtener información sobre el dispositivo de MIDI _Obtener información de retorno sobre el éxito de las operaciones

Clasificación de los comandos MCI.

MCI define cuatro clasificaciones de los comandos: sistema, requerimiento, básico, y extendido. La lista siguiente describe la clasificación de estos comandos:

• Comandos de Sistema se que ocupa directamente MCI, en lugar del dispositivo. • Comandos de Requerimiento se ocupa el dispositivo. Todos los dispositivos MCI deben soportar las

órdenes y banderas requeridas. • Comandos básicos (o comandos optativos) es usado por algunos drivers. Si un driver soporta

comandos básicos, debe soportar un conjunto definido de banderas para ese comando. • Comandos extendidos son específicos a un tipo del dispositivo o driver.

Mientras que los comandos de sistema y los requeridos son el juego de comandos mínimos para cualquier driver MCI, los comandos esenciales y los extendidos no son soportados por todos los drivers. Su aplicación siempre puede usarse en el sistema y puede requerir órdenes y banderas, pero si necesita usar un comando esencial o extendido o banderas, debe preguntar al driver si es compatible, ello se hace con la función (MCI_GETDEVCAPS).

Comandos del sistema Son los procesos MCI que el sistema ordena directamente, en lugar de pasarlos a los dispositivos de MCI. Descripción del mensaje string: Comando Constante Descripción "break" MCI_BREAK Pone una llave de descanso para un dispositivo de MCI. "sysinfo" MCI_SYSINFO devuelve la información sobre los dispositivos de MCI.

Los Comandos requeridos Todos los dispositivos de MCI soportan los siguiente comandos requeridos. La Descripción de Mensaje "string" Comando Constante Descripción "capability " MCI_GETDEVCAPS Se obtiene las capacidades de un dispositivo. "close" MCI_CLOSE Cierra el dispositivo. "info" MCI_INFO Se obtiene la información textual de un dispositivo. "open" MCI_OPEN Inicializa o abre un dispositivo. "status" MCI_STATUS Se obtiene la información de estado del dispositivo. Algunas de las banderas de este comando no se requieren, porque es un comando básico. Los dispositivos también deben soportar un juego comandos bandera para los comandos requeridos.

Los Comandos básicos La lista siguiente resume los comandos básicos. El uso de estos comandos por un dispositivo de MCI es optativo.

Page 53: Técnicas Digitales III Proyecto Integrador

X - 4

La Descripción de Mensaje "sting": Comando Constante Descripción "load" MCI_LOAD Lee los datos de un archivo. "pause" MCI_PAUSE Para la ejecución. La grabación pueden reanudarse en la posición actual. "play" MCI_PLAY Pone a trasmitir los datos a la salida. "record" MCI_RECORD Comienza la grabación de datos de la entrada. "resume" MCI_RESUME Resume la ejecución o grabando en una pausa el dispositivo. "Save" MCI_SAVE Guarda los datos a un archivo del disco. "Seek" MCI_SEEK Busca adelante o hacia atrás. "Set" MCI_SET el estado en que opera del dispositivo. "status" MCI_STATUS Obtiene la información de estado del dispositivo. "stop" MCI_STOP Para la ejecución.

Los Comandos extendidos Algunos dispositivos de MCI tienen órdenes adicionales, o ellos se le agregan banderas a las órdenes existentes. Mientras algunos comandos extendidos se le aplican a un driver del dispositivo específico, la mayoría de ellos se aplican a todos los driver de un tipo del dispositivo particular. Este tipo de comando son utilizados para video digital y secuencias MIDI.

Funciones MCI, Macros, y Mensajes.

Muchas aplicaciones de MCI usan la función mciSendString y mciSendCommand. El identificador del dispositivo requerido por la mayoría de los comandos MCI se obtiene llamando al comando "open" (MCI_OPEN). Por ejemplo si se necesita un identificador pero no quiere abrir el dispositivo, o consultar las capacidades del dispositivo antes de tomar alguna otra acción se puede llamar la función del mciGetDeviceID. La función mciGetCreatorTask permite a la aplicación usar un identificador del dispositivo para obtener una referencia de la tarea que creó ese identificador. La función mciGetYieldProc y mciSetYieldProc asignan y recuperan la dirección de la función callback que asoció con la bandera "wait" (MCI_WAIT). La función mciGetErrorString devuelve un cordón que describe un valor de error MCI. Cada cordón que MCI devuelve, que puede ser un datos o una descripción del error, posee un máximo de 128 caracteres. Los campos de caja de diálogo (Dialog box ) que son más pequeño que 128 caracteres truncarán los cordones más largos que retorna MCI. Los macros de MCI son las herramientas que se pueden usar para crear y desmontar valores que especifican los formatos de tiempo. Éstos formatos de tiempo se usan en muchos comandos MCI. Los formatos representados por las macros es: hours/minutes/seconds (HMS), minutes/seconds/frames (MSF), y tracks/minutes/seconds/frames (TMSF).

Descripción de la macro Constante Descripción MCI_HMS_HOUR Retorna la horas compuesto de un valor de HMS. MCI_HMS_MINUTE Retorna la horas compuesto de un valor de HMS. MCI_HMS_SECOND Retorna la horas compuesto de un valor de HMS. MCI_MAKE_HMS Crea un valor de HMS. MCI_MAKE_MSF Crea un valor de MSF. MCI_MAKE_TMSF Crea un valor de TMSF. MCI_MSF_FRAME Retorna el componente de los frames con un valor de MSF. MCI_MSF_MINUTE Retorna el componente de los minutos con un valor de MSF.

Page 54: Técnicas Digitales III Proyecto Integrador

X - 5

MCI_MSF_SECOND Retorna el componente de los segundos con un valor de MSF. MCI_TMSF_FRAMe Retorna el componente de los frames con un valor de TMSF. MCI_TMSF_MINUTE Retorna el componente de los minutos con un valor de TMSF. MCI_TMSF_SECOND Retorna el componente de los segundos con un valor de TMSF. MCI_TMSF_TRACK Retorna el componente de los track con un valor de TMSF. MCI también proporciona dos mensajes: MM_MCINOTIFY y MM_MCISIGNAL. El mensaje MM_MCINOTIFY informa a una aplicación del resultado de un comando MCI siempre que ese comando especifique la bandera "notifique" (MCI_NOTIFY). El mensaje MM_MCISIGNAL es específico de los dispositivos del video digital; informa a la aplicación cuando se alcanza una posición especificada .

Espera, Notificación, y Banderas Prueba

Muchas órdenes de MCI incluyen banderas que modifican el comando. Las banderas "Wait" (MCI_WAIT) y "Notify" (MCI_NOTIFY) son comunes en cada comando. La bandera "Test" (MCI_TEST) está disponible para digital-video y dispositivos de VCR.

Bandera de la Espera Los comandos de MCI retornan inmediatamente al usuario, aun cuando toma varios minutos para completar la acción. Se puede usar la bandera "wait" (MCI_WAIT) para dirigir el dispositivo que espere hasta que la acción pedida se complete antes de devolver el mando a la aplicación. Por ejemplo, el comando no devolverá el mando a la aplicación hasta que se complete: mciSendString("play mydevice from 0 to 100 wait", lpszReturnString, lstrlen(lpszReturnString), NULL); Nota : Se puede cancelar la espera apretando CTRL+BREAK. Las aplicaciones pueden redefinir usando el comando "break" (MCI_BREAK). (MCI_BREAK usa la estructura MCI_BREAK_PARMS ) Cuando una espera se cancela, MCI intenta devolver el mando a la aplicación sin interrumpir el comando asociado con la bandera de espera.

Bandera de información. La bandera "notify" (MCI_NOTIFY) dirige al dispositivo para anunciar un mensaje MM_MCINOTIFY cuando el dispositivo completa una acción. Su aplicación debe tener un procedimiento de ventana para procesar el mensaje de MM_MCINOTIFY. Un mensaje de MM_MCINOTIFY indica que el proceso de un comando se ha completado, pero no indica si el comando fue completado con éxito, si falló, o se reemplazó o abortó. En la interfaz de comando "string", se usa en el parámetro de la función mciSendString . En la interfaz del comando "message", se especifica en la palabra dwCallBack de la estructura enviada con el comando "menssage". (Cada estructura asociada con un comando "menssage" contiene este miembro.)

Bandera de Prueba la bandera "test" (MCI_TEST) pregunta al dispositivo para determinar si puede ejecutar el comando. El dispositivo devuelve un error si no puede ejecutar el comando. No devuelve ningún error si puede ocuparse del comando. Cuando se especifica esta bandera, MCI devuelve el mando a la aplicación sin ejecutar el comando. Esta bandera es soportada por video digital y dispositivos VCR para todos los comandos excepto "open"(MCI_OPEN) y "close" (MCI_CLOSE).

Page 55: Técnicas Digitales III Proyecto Integrador

X - 6

Comandos de atajo y Variaciones

Se puede usar varios comandos atajos al trabajar con las órdenes de MCI. Estos atajos permiten usar un solo identificador para referirse a todos los dispositivos de la aplicación que se ha abierto, o para abrir un dispositivo sin emitir explícitamente un comando "open"(MCI_OPEN ). Se puede especificar un "all" (MCI_ALL_DEVICE_ID) como identificador del dispositivo para cualquier comando que no devuelve información. Cuando se especifica "all", MCI envía la orden secuencialmente a todos los dispositivos abiertos por la aplicación actual. Por ejemplo, el comando "close" "all" cierra todos los dispositivos abiertos y el comando "play" "all" empiezan a ejecutarse todos los dispositivos abiertos por la aplicación. Ya que MCI envía los comandos secuencialmente a los dispositivos de MCI, hay un intervalo entre, cuando los primero y el último dispositivo recibe el comando. Usando "all" es una manera conveniente de transmitir un comando a todos sus dispositivos, pero no se debe confiar en él para sincronizarlos. Cuando se emite un comando y se especifica a un dispositivo que no está abierto, MCI intenta abrir el dispositivo antes de llevar a cabo el comando. Las siguientes reglas se aplican para abrir los dispositivos automáticamente:

• La apertura automática sólo trabaja con la interfaz del "comando string". • La apertura automática falla para comandos que son específico a los driver del dispositivo

personalizado. • La apertura automática de los dispositivos, no responden a órdenes que usan "all" como un nombre

de dispositivo. • La apertura automática no permite que una aplicación especifique el tipo de bandera. Sin el nombre

del dispositivo, MCI determina el nombre del dispositivo para las entradas en un registro. Para usar un dispositivo específico, se puede combinar el nombre del dispositivo con el nombre del archivo usando con un punto de admiración.

Si una aplicación usa la apertura automático para abrir un dispositivo, la aplicación debe verificar el valor de retorno de cada orden abierta para verificar que el dispositivo este todavía abierto. MCI cierra automáticamente cualquier dispositivo que abre automáticamente. MCI cierra un dispositivo en las siguientes situaciones:

• El comando se completa. • Se aborta el comando. • Se notificación de la demanda en un comando subsiguiente. • MCI descubre una falla.

Dispositivos MCI

Cada dispositivo multimedia MCI posee un juego de órdenes de MCI. Por ejemplo, play (MCI_PLAY ) hace que el dispositivo se abra para reproducir un archivo, no importa el tipo de datos con que el dispositivo trabaja.

Control del dispositivo Para controlar un dispositivo de MCI, se abre el dispositivo, envía los comandos necesarios, y entonces cierra el dispositivo. Los comandos pueden ser muy similares, incluso para dispositivos MCI completamente diferentes. Este ejemplo ejecuta el track número 6 de un CD de audio usando mciSendStrimg : mciSendString("open cdaudio", lpszReturnString, lstrlen(lpszReturnString), NULL);

mciSendString("set cdaudio time format tmsf", lpszReturnString, lstrlen(lpszReturnString), NULL);

mciSendString("play cdaudio from 6 to 7", lpszReturnString, lstrlen(lpszReturnString), NULL);

mciSendString("close cdaudio", lpszReturnString, lstrlen(lpszReturnString), NULL);

El ejemplo siguiente muestra la misma serie de comandos para reproducir los primeros 10000 samples de un archivo de forma de onda:

Page 56: Técnicas Digitales III Proyecto Integrador

X - 7

mciSendString(

"open c:\mmdata\purplefi.wav type waveaudio alias finch", lpszReturnString, lstrlen(lpszReturnString), NULL);

mciSendString("set finch time format samples", lpszReturnString, lstrlen(lpszReturnString), NULL);

mciSendString("play finch from 1 to 10000", lpszReturnString, lstrlen(lpszReturnString), NULL);

mciSendString("close finch", lpszReturnString, lstrlen(lpszReturnString), NULL);

Reproducción y Posicionamiento Varios comandos MCI como (MCI_PLAY), (MCI_STOP), (MCI_PAUSE), (MCI_RESUME), (MCI_SEEK), afecta la reproducción o el posicionamiento de un archivo multimedia. Si un dispositivo de MCI recibe un comando de reproducción mientras otro comando de reproducción esta siendo ejecutado, acepta el comando y detiene o reemplaza el comando anterior. Muchos comandos MCI, como (MCI_SET ), no afectan la reproducción. Una notificación de uno de estos comandos no interfiere con la reproducción pendiente o comandos de posición con tal de que las notificaciones no se realicen al mismo driver.

Tipos de dispositivos MCI reconoce un conjunto básico de dispositivo. Un tipo de dispositivo es un conjunto de drivers de MCI que comparten un conjunto de comando en común y se usa para controlar dispositivos multimedia similares o archivos de datos. Muchos comandos MCI como (MCI_OPEN), se le debe especificar un tipo del dispositivo. Dispositivo Constante Descripción cdaudio MCI_DEVTYPE_CD_AUDIOCD Reproductor de CD de audio digitalvideo MCI_DEVTYPE_DIGITAL_VIDEO Vídeo digital en una ventana dat MCI_DEVTYPE_DAT Reproductor de cinta DAT overlay MCI_DEVTYPE_OVERLAY Vídeo analógico en una ventana scanner MCI_DEVTYPE_SCANNER Scanner de imágenes sequencer MCI_DEVTYPE_SEQUENCER Secuenciador MIDI vcr MCI_DEVTYPE_VCR Vídeo en cinta magnética waveaudio MCI_DEVTYPE_WAVEFORM_AUDIO Ficheros de onda videodisk MCI_DEVTYPE_VIDEODISC Reproductor de disco de vídeo Los nombres de la columna dispositivo son los que utilizaremos en las cadenas de comandos, mientras que las constantes se utilizan en los mensajes de comandos.

Nombres de los dispositivos Para identificar a un driver de MCI, MCI usa los nombres del dispositivo. Los nombres del dispositivo se identifican en la sección [mci] del archivo SYSTEM.INI o en la parte apropiada del registro. Esta información identifica a todos los drivers de MCI para Windows.

Page 57: Técnicas Digitales III Proyecto Integrador

X - 8

La lista de dispositivos MCI disponibles, varía de un ordenador a otro en función de los drivers instalados. La lista de dispositivos disponibles coincidirá con las entradas de la sección [mci] en el fichero system.ini : [mci]

cdaudio=mcicda.drv

sequencer=mciseq.drv

waveaudio=mciwave.drv

avivideo=mciavi.drv

videodisc=mcipionr.drv

vcr=mcivisca.drv

MPEGVideo=mciqtz.drv

MPEGVideo2=mciqtz.drv La lista del ejemplo es una lista básica que el instalador de Windows coloca, si detecta la presencia de una tarjeta de sonido y de una unidad de CD-ROM. En el caso de otros dispositivos menos frecuentes, como lectores de videodisco, scanners, etc. la instalación de los drivers y la modificación del system.ini, se llevará a cabo desde el software que acompañe al aparato.

Driver de soporte para los Comandos de MCI Los drivers de MCI mantienen la funcionalidad los comandos de MCI. El software del sistema realiza algunas tareas de direccionar datos, pero toda la reproducción multimedia, la presentación, y la grabación se ocupa los drivers de MCI. Los driver varían en el soporte de comandos MCI y las banderas del comando. Porque los dispositivos multimedia pueden tener capacidades muy diferentes, MCI se diseña para permitir a los drivers extenderse o se reducen comandos para igualar las capacidades del dispositivo.

Trabajando con dispositivos MCI

Abriendo un Dispositivo Antes de usar un dispositivo, se debe inicializarlo usando (MCI_OPEN) . Este comando carga al driver en la memoria y recupera el identificador del dispositivo que se usará para identificar el dispositivo en los comandos de MCI. Se debe verificar el valor de retorno de la función mciSendString o mciSendCommand antes de usar el identificador del dispositivo para asegurar que el identificador es válido. (También se puede recuperar un identificador de dispositivo usando la función mciGetDeviceID). Como todos comandos de mensaje (command messages) de MCI, MCI_OPEN tiene una estructura asociada. Estas estructuras a veces se llaman los bloques del parámetro. La estructura predefinida para MCI_OPEN es MCI_OPEN_PARMS. Ciertos dispositivos (como waveform y overlay) han extendido sus estructuras (MCI_WAVE_OPEN_PARMS y MCI_OVLY_OPEN_PARMS ) para acomodar los parámetros optativos adicionales. A menos que se necesite usar estos parámetros adicionales, se puede usar la estructura MCI_OPEN_PARMS con cualquier dispositivo de MCI. El número de dispositivos que usted puede tener abierto sólo está limitado por la cantidad de memoria disponible. Usando un seudónimo

Page 58: Técnicas Digitales III Proyecto Integrador

X - 9

Cuando se abre un dispositivo, se puede usar la bandera de "seudónimo" o "alias" para especificar un identificador del dispositivo para el dispositivo. Esta bandera le permite asignar un identificador corto del dispositivo para los dispositivos compuestos con nombres de archivo largo, y le permite abrir casos múltiples del mismo archivo o dispositivo. Por ejemplo, el comando siguiente asigna el de identificador de dispositivo al nombre de archivo largo C:\NABIRDS\SOUNDS\MOCKMTNG.WAV: mciSendString(

"open c:\nabirds\sounds\mockmtng.wav tipo de “alia” para wave ",

lpszReturnString, lstrlen(lpszReturnString), NULL);

En la interfaz comando mensaje, se especifica un alias usando el miembro lpstrAlias de la estructura MCI_OPEN_PARMS.

Especificando un Tipo del Dispositivo Cuando se abre un dispositivo, se puede usar la bandera "tipe" para referirse a un tipo de dispositivo, en lugar de un driver del dispositivo específico. El ejemplo siguiente abre el archivo waveform-audio C:\WINDOWS\CHIMES.WAV (usando la bandera "tipe" para especificar el tipo de dispositivo de waveaudio) y asigna los el seudónimo "chimes": mciSendString (

c:\windows\chimes.wav tipo de alias para el waveaudio chimes",

lpszReturnString, lstrlen(lpszReturnString), NULL);

En la interfaz del comando mensaje, la funcionalidad de la bandera del "type" se proporciona por el miembro del lpstrDeviceType de la estructura MCI_OPEN_PARMS Los Dispositivos simples y Compuestos

MCI clasifica a los driver del dispositivo como simple o compuesto. Los drivers para los dispositivos compuestos requieren el nombre de un archivo del datos para la reproducción; los drivers para los dispositivos simples no lo hacen. Los dispositivos simples incluyen cd de audio y dispositivos del video. Hay dos maneras de abrir los dispositivos simples:

• Especificando un indicador a un string null-terminated que contiene el nombre del dispositivo del registro o el archivo SYSTEM.INI. Por ejemplo, para abrir un dispositivo de video usando el comando siguiente: mciSendString ("open videodisc", lpszReturnString, lstrlen(lpszReturnString), NULL);

En este caso, el "video" es el nombre del dispositivo en el registro o en la sección [ mci] de SYSTEM.INI. • Especificando el nombre real del driver del dispositivo. Abriendo un dispositivo que usa el nombre

de archivo del driver del dispositivo, sin embargo, hace que la aplicación sea especifica del dispositivo y puede impedir que la aplicación corra sin los cambios de la configuración de sistema. Si se usa un nombre de archivo, no es necesario especificar el camino completo o la extensión del archivo, MCI asume que el driver se localiza en un directorio del sistema y su extensión es DRV.

Los dispositivos compuestos incluyen waveaudio y dispositivos sequencer. Hay tres maneras de abrir un dispositivo compuesto:

• Especificando sólo el nombre del dispositivo. Esto le permite abrir un dispositivo compuesto sin asociar un nombre de archivo.

• Especificando sólo el nombre de archivo. El nombre del dispositivo es determinado de las asociaciones en el registro.

• Especificando el nombre de archivo y el de dispositivo. MCI ignora las entradas en el registro y abre el nombre del dispositivo especificado.

Para asociar un archivo de datos con un dispositivo particular, se especifica el nombre de archivo y el nombre del dispositivo. Por ejemplo, el comando siguiente abre el dispositivo de waveaudio con el archivo MYVOICE.SND: mciSendString("open myvoice.snd type waveaudio", lpszReturnString, lstrlen(lpszReturnString), NULL);

Abriendo un Dispositivo Usando la Extensión de archivo

Page 59: Técnicas Digitales III Proyecto Integrador

X - 10

Si el comando (MCI_OPEN ) especifica sólo el nombre del archivo, MCI usa la extensión del archivo para seleccionar el dispositivo apropiado de la lista del registro o de las extensiones del mci en la sección del archivo SYSTEM.INI. Archivo nuevo de dato

Para crear un archivo nuevo de datos, simplemente se especifica un nombre de archivo. MCI no guarda un nuevo archivo hasta que no se lo guarde usando (MCI_SAVE ). Al crear un nuevo archivo, se debe incluir un alias del dispositivo con (MCI_OPEN ). El ejemplo siguiente abre un archivo nuevo de waveaudio, comienza y finaliza el grabado, entonces guarda y cierra el archivo: mciSendString("open new type waveaudio alias capture", lpszReturnString, lstrlen(lpszReturnString), NULL);

mciSendString("record capture", lpszReturnString, lstrlen(lpszReturnString), NULL);

mciSendString("stop capture", lpszReturnString, lstrlen(lpszReturnString), NULL);

mciSendString("save capture orca.wav", lpszReturnString, lstrlen(lpszReturnString), NULL);

mciSendString("close capture", lpszReturnString,lstrlen(lpszReturnString), NULL);

Información recuperada de un Dispositivo Cada dispositivo responde al comando (MCI_GETDEVCAPS ), (MCI_STATUS ), e (CI_INFO ). Estos comandos obtienen la información sobre el dispositivo. Las banderas y los comandos básicos proporcionan una cantidad mínima de información sobre un dispositivo. Muchos dispositivos complementan los comandos básicos con banderas extendidas que proporcionar información adicional sobre el dispositivo.

Obtención de la información del sistema de MCI El comando (MCI_SYSINFO ) obtiene la información del sistema sobre los dispositivos de MCI. MCI se ocupa de este comando sin relevarlo a cualquier dispositivo de MCI. Para la interfaz de comando mensaje, MCI devuelve la información del sistema en la estructura MCI_SYSINFO_PARMS . Se puede usar el comando (MCI_SYSINFO) para recuperar la información, como el número de dispositivos de MCI en un sistema, el número de dispositivos de MCI de un tipo particular, el número de dispositivos de MCI abierto, y los nombres de los dispositivos. Este comando se llama a menudo más de una vez para recuperar un pedazo de información. Por ejemplo, se podría recuperar el número de dispositivos de un tipo particular en la primera llamada y entonces podría enumerar los nombres de los dispositivos en la próximo.

Ejecutando un Dispositivo El comando (MCI_PLAY ) ejecuta la reproducción de un dispositivo. Sin cualquier bandera, este comando empieza reproducir en la posición actual y reproduce hasta que el comando se interrumpa o hasta el fin del archivo. También se puede usar (MCI_SEEK ) para cambiar la posición actual. La mayoría de los dispositivos que soportan el comando también soportan las banderas (MCI_FROM) y (MCI_TO). Estas banderas indican la posición a que el dispositivo debe empezar y debe detener la reproducción. Las unidades asignadas al valor de la posición dependen del formato de tiempo usado por el dispositivo. Cada dispositivo tiene un formato de tiempo predefinido, pero se debe especificar el formato de tiempo usando (MCI_SET ) antes de emitir cualquier comando que usa los valores de la posición.

Grabación La especificación generales de MCI soportan grabación de video-digital, secuencias MIDI, VCR, y los dispositivos de audio del tipo forman de onda; sin embargo, sólo se usa en audio-waveform y dispositivos de VCR. Se puede insertar o borrar la información grabada en un archivo existente o se puede grabar en un nuevo archivo. Para grabar en un archivo existente, se abre un dispositivo de audio-waveform y se guarda como se hace normalmente. Para grabar en un nuevo archivo con la interfaz de comando mensaje, se especifica un archivo de longitud cero. Cuando MCI crea un nuevo archivo para grabar, el formato de los datos se pone a un formato predefinido especificado por el driver del dispositivo. Para usar otro tipo formato de que no sea el formato predefinido, se debe usar el comando (MCI_SET).

Page 60: Técnicas Digitales III Proyecto Integrador

X - 11

Para empezar a grabar, se usa un registro y un comando ellos son: ( MCI_RECORD y la estructura MCI_RECORD_PARMS ). Si no se especifica un fin, la grabación continúa hasta que se envíe una parada (MCI_STOP ). Si se graba en un archivo nuevo, se puede empezar a grabar al principio del archivo nuevo y especificar una situación de fin para terminar la grabación. Guardando un Archivo Grabado Cuando la grabación está completo, se usa el comando ( MCI_SAVE y la estructura MCI_SAVE_PARMS ) para guardar la grabación antes de cerrar el dispositivo.

Detener, y hacer una pausa. El comando (MCI_STOP ) suspende la reproducción o grabación de un dispositivo. Muchos dispositivos también soportan el comando (MCI_PAUSE ). La diferencia entre la parada y la pausa depende del dispositivo. Normalmente la pausa suspende el funcionamiento pero deja al dispositivo listo para reanudar inmediatamente la reproducción o grabación.

Cerrando un Dispositivo El cierre se realiza con el comando (MCI_CLOSE ) libera el acceso del comando a un dispositivo o archivo. MCI libera un dispositivo cuando todas las tareas que usan un dispositivo lo han cerrado. Para ayudar a MCI a manejar los dispositivos, la aplicación debe cerrar cada dispositivo o archivo cuando ya fue usando. Cuando se cierra un dispositivo externo de MCI que usa sus propios medios de comunicación en lugar de los archivos (como el CD audio), el driver deja el dispositivo en su modo actual de funcionamiento. Así, si se cierra un dispositivo de CD de audio que está reproduciendo, aunque el driver del dispositivo se libera de la memoria, el CD de audio continuará reproduciendo hasta que alcance el fin de su volumen.

La interfaz de mensajes de comandos desde el lenguaje C

Cuando se utiliza el interfaz de cadenas, una llamada a las funciones mciSendString() o mciExecute(), fuerza al sistema a interpretar la cadena y desglosar cada uno de los parámetros que la componen. Con estos valores el sistema realiza internamente una nueva llamada, esta vez a la función mciSendCommand(), que es la función utilizada directamente por el interfaz de mensajes. Ambos interfaces ofrecen la misma funcionalidad y poseen, por así decirlo, el mismo "vocabulario", pero donde el interfaz de cadenas, utiliza cadenas de texto, el de mensajes, utiliza datos estructurados y constantes predefinidas en el fichero de cabecera “mmsystem.h”. Cada uno de los comandos, dispositivos o modificadores que pueden formar parte de una cadena MCI, tienen un valor numérico asociado, accesible desde una constante de C. Así por ejemplo, el comando open tiene asociada la constante MCI_OPEN, y el dispositivo waveaudio, la constante MCI_DEVTYPE_WAVEFORM. El prototipo de la función mciSendCommand() es el siguiente: DWORD mciSendCommand(UINT wIDDispositivo, UINT wComando, DWORD dwParam1, DWORD dwParam2); wIDDispositivo, es un entero sin signo, que identifica al dispositivo. wComando, indica el comando a realizar, mediante una de las constante del tipo MCI_XXX. dwParam1 es un entero largo en el que se colocan constantes de tipo bandera (flags) que indican diferentes formas de llevar a cabo la acción (esperar, avisar, etc.) dwParam2 está definido como entero largo, pero contiene en realidad la dirección de una estructura C con información adicional para el comando (inicio, final, etc.). El tipo de estructura varía con el valor de wComando, ya que cada uno posee una estructura asociada.

Resumen del manejo de un dispositivo MCI

Page 61: Técnicas Digitales III Proyecto Integrador

X - 12

1. Abrir un dispositivo con el comando MCI_OPEN y los parámetros necesarios (dispositivo y fichero) en la estructura MCI_OPEN_PARMS. En este caso, el parámetro wIDDispositivo se deja a cero. 2. Almacenar en una variable, el identificador del dispositivo abierto, retornado en el campo wDeviceID de MCI_OPEN_PARMS, en la llamada anterior. 3. A partir de la obtención de este identificador, lo podremos utilizar para cualquier otra operación. 4. Consultar el estado del dispositivo, con el comando MCI_STATUS y la estructura CI_STATUS_PARMS. 5. Modificar algún parámetro del dispositivo, con el comando MCI_SET y la estructura MCI_SET_PARMS. 6. Reproducir un fichero con el comando MCI_PLAY y la estructura MCI_PLAY_PARMS. 7. Grabar un fragmento (sólo aplicable al dispositivo de onda) con el comando MCI_RECORD y la estructura MCI_RECORD_PARMS. 8. También se pueden utilizar los comandos MCI_PAUSE, MCI_RESUME y MCI_STOP, para parar temporalmente, reanudar, o parar definitivamente la reproducción o la grabación. En este caso no se utiliza ninguna estructura, dejando por lo tanto a cero el último parámetro de la función. 9. Salvar un fichero a disco con el comando MCI_SAVE y la estructura MCI_SAVE_PARMS. 10.Cerrar un dispositivo con el comando MCI_CLOSE. No se utiliza ninguna estructura, por lo que el último parámetro se deja a cero. En caso de que se produzca algún error, se puede utilizar la función mciGetError(), que devuelve una cadena con el mensaje de error correspondiente al código numérico.

Limitaciones de los comandos MCI

En el tema del sonido, las posibilidades MCI son especialmente notables para los dispositivos de onda y el CD audio. Las principales restricciones:

• Imposibilidad de grabar mensajes MIDI. • Imposibilidad de elección del puerto de salida para MIDI • Imposibilidad de enviar mensajes individuales para MIDI.

Bibliografía: Soporte técnico de Microsoft Microsoft Windows SDK Multimedia Programmer’s Reference. Programación de sonido con los comandos MCI, Sergi Jordà Puig, Audio digital y MIDI, Guías Monográficas Anaya Multimedia, Madrid 1997

Page 62: Técnicas Digitales III Proyecto Integrador

XI - 1

Capítulo 11 Programa de adquisición

Introducción

Este programa de adquisición se basa en tomar datos desde la placa de sonido mediante el uso de los comandos MCI de Windows y almacenarlos en un archivo del tipo de forma de onda o WAVE, a su vez esta aplicación se ejecuta bajo el sistema operativo Windows y posee un entorno grafico. La aplicación fue desarrollada en Dev-C++ 4, el cual nos permite el uso de las API de Windows y el uso de los comandos MCI.

Programas bajo Windows

Los programas de Windows presentan las siguientes características:

Independencia de la máquina Los programas Windows son independientes de la máquina en la que se ejecutan, el acceso a los dispositivos físicos se hace a través de interfaces, y nunca se accede directamente a ellos. Esta es una de las principales ventajas para el programador, ya que no hay que preocuparse por el modelo de tarjeta gráfica o de impresora, la aplicación funcionará con todas, y será el sistema operativo el que se encargue de que así sea.

Recursos Un concepto importante es el de recurso. Desde el punto de vista de Windows, un recurso es todo aquello que puede ser usado por una o varias aplicaciones. Existen recursos físicos, que son los dispositivos que componen el ordenador, como la memoria, la impresora, el teclado o el ratón y recursos virtuales o lógicos, como los gráficos, los iconos o las cadenas de caracteres. Por ejemplo, si nuestra aplicación requiere el uso de un puerto serie, primero debe averiguar si está disponible, es decir, si existe y si no lo está usando otra aplicación; y después lo reservará para su uso. Esto es necesario porque este tipo de recurso no puede ser compartido. Lo mismo pasa con la memoria o con la tarjeta de sonido, aunque son casos diferentes. Por ejemplo, la memoria puede ser compartida, pero de una forma general, cada porción de memoria no puede compartirse, y se trata de un recurso finito. Las tarjetas de sonido, dependiendo del modelo, podrán o no compartirse por varias aplicaciones. Otros recursos como el ratón y el teclado también se comparten, pero se asigna su uso automáticamente a la aplicación activa, a la que normalmente mantiene contacto con el usuario. Desde otro punto de vista, también consideramos recursos a varios componentes como los menús, los iconos, los cuadros de diálogo, las cadenas de caracteres, los mapas de bits, los cursores, etc. En sus programas, Windows almacena separados el código y los recursos, dentro del mismo fichero, y estos últimos pueden ser editados por separado, permitiendo por ejemplo, hacer versiones de los programas en distintos idiomas sin tener acceso a los ficheros fuente de la aplicación.

Ventanas La forma en que se presentan las aplicaciones Windows ante el usuario, es la ventana. Cada aplicación tiene al menos una ventana, la ventana principal, y todas las comunicaciones entre usuario y aplicación se canalizan a través de una ventana. Cada ventana comparte el espacio de la pantalla con otras ventanas, incluso de otras aplicaciones, aunque sólo una puede estar activa, es decir, sólo una puede recibir información del usuario.

Page 63: Técnicas Digitales III Proyecto Integrador

XI - 2

Eventos Los programas en Windows están orientados a eventos, esto significa que normalmente los programas están esperando a que se produzca un acontecimiento que les incumba, y mientras tanto permanecen aletargados o dormidos. Un evento puede ser por ejemplo, el movimiento del ratón, la activación de un menú, la llegada de información desde el puerto serie, una pulsación de una tecla... Esto es así porque Windows es un sistema operativo multitarea, y el tiempo del microprocesador ha de repartirse entre todos los programas que se estén ejecutando. Si los programas fueran secuenciales puros, esto no sería posible, ya que hasta que una aplicación finalizara, el sistema no podría atender al resto.

Proyectos Debido a la complejidad de los programas Windows, normalmente los dividiremos en varios ficheros fuente, que se compilan por separado y se enlazan juntos. Para crear un proyecto Windows usando este compilador elegiremos el menú "File/New Project". Se abrirá un cuadro de diálogo donde podremos elegir el tipo de proyecto. Elegimos "Windows Application" y "C++ Project". A continuación pulsamos "Aceptar". El compilador crea un proyecto con un fichero C++, con el esqueleto de una aplicación para una ventana.

Controles Los controles son la forma en que las aplicaciones Windows intercambian datos con el usuario. Normalmente se usan dentro de los cuadros de diálogo, pero pueden usarse en cualquier ventana. Los más importantes son:

• Control estatic: son etiquetas, marcos, iconos o dibujos. • Control edit: permiten que el usuario introduzca datos alfanuméricos en la aplicación. • Control list box: el usuario puede escoger entre varias opciones de una lista. • Control combo box: es una combinación entre un edit y un list box. • Control scroll bar: barras de desplazamiento, para la introducción de valores entre márgenes

definidos. • Control button: realizan acciones o comandos, de button de derivan otros dos controles muy

comunes: 1. Control check box: permite leer variables de dos estados "checked" o "unchecked" 2. Control radio button: Se usa en grupos, dentro de cada grupo sólo uno puede ser activado.

Descripción del Programa.

Ficheros de cabecera Los ficheros de cabecera utilizados son los siguientes:

• “windows.h” que es el fichero para crear aplicaciones Windows llamando a las API. • “mmsystem.h” fichero cabecera para el uso de MCI. • “stdlib.h” fichero que posee funciones estándar de librerías. • “stdio.h” fichero que posee funciones estándar de entrada salida. • “ids.h” fichero que posee declaraciones de constantes utilizadas por la aplicación.

Page 64: Técnicas Digitales III Proyecto Integrador

XI - 3

Para que la aplicación pueda ser ejecutada bajo Windows fue necesario incluir la siguiente librería: winmm.lib. #include <windows.h>

#include <mmsystem.h>

#include <stdlib.h>

#include <stdio.h>

#include "ids.h"

#pragma comment(lib, "winmm.lib").

Declaración del prototipo de las funciones. Cada tipo (o clase) de ventana que usemos en nuestro programa, o cada cuadro de diálogo, necesitará un procedimiento propio, que deberemos declarar y definir. Siguiendo la estructura de un programa C, esta es la zona de declaración de prototipos. Para el procedimiento de la ventana la declaración del prototipo de la función tiene la siguiente forma:

LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM); Los cuadros de diálogo poseen el siguiente prototipo:

1. Función por la cual llamamos a un procedimiento que realiza un cuadro de diálogo, en pantalla, por el cual podemos visualizar el tiempo de adquisición: BOOL CALLBACK DlgProc2(HWND, UINT, WPARAM, LPARAM);

2. Función por la cual realizamos el manejo con caracteres alfanuméricos de un “control edit”:

BOOL CALLBACK DlgProc3(HWND, UINT, WPARAM, LPARAM);

3. Función por la cual realizamos el manejo con caracteres numéricos de un “control edit”:

BOOL CALLBACK DlgProcnum(HWND, UINT, WPARAM, LPARAM); Las funciones utilizadas para la grabación y reproducción de ficheros WAVE se declaran de la siguiente forma:

1. Declaración de la función de grabación: DWORD playWaveFile(HWND, LPSTR);

2. Declaración de la función de reproducción:

DWORD recordWAVEFile(HWND, DWORD);

Declaración de variables globales Nuestra aplicación hace uso de algunas variables globales, alguna solo las utiliza Windows como por ejemplo el nombre de clase, y otras son utilizadas a lo largo del programa:

1. Nombre de la clase: char szClassName[ ] = "Adquisidor";

2. Tiempo de adquisición que se realiza en milisegundos, es del tipo entero ya que solo se admiten caracteres tipo numérico: int MilliSeconds;

3. Nombre del archivo con que guardaremos nuestra adquisición, es un array de caracteres: char Nombre[80];

4. Para poder almacenar nuestro nombre de archivo haremos uso de una estructura, en la cual existe un

solo parámetro tipo carácter:

Page 65: Técnicas Digitales III Proyecto Integrador

XI - 4

typedef struct stDatos

char Texto[80];

DATOS;

5. Para poder almacenar nuestro tiempo de muestreo y luego verificar que se incluyen solo caracteres numéricos usaremos una estructura, en la cual existe un solo parámetro tipo entero: typedef struct inDatos

int Numero;

INDATOS;

Función Win main La función Winmain se divide en tres partes claramente diferenciadas: declaración, inicialización y bucle de mensajes. La función WinMain tiene cuatro parámetros de entrada:

• hInstance es un manipulador para la instancia del programa que estamos ejecutando. Cada vez que se ejecuta una aplicación, Windows crea una Instancia para ella, y le pasa un manipulador de dicha instancia a la aplicación.

• hPrevInstance es un manipulador a instancias previas de la misma aplicación. Como Windows es multitarea, pueden existir varias versiones de la misma aplicación ejecutándose, varias instancias. En Win32 usa un segmento distinto para cada instancia y este parámetro es siempre NULL, sólo se conserva por motivos de compatibilidad con Win 3.11.

• lpszCmdParam, esta cadena contiene los argumentos de entrada del comando de línea. • nCmdShow, este parámetro especifica cómo se mostrará la ventana.

Función winmain: int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR pszArgument, int nFunsterStil) Declaración En la primera zona declararemos las variables que necesitamos para nuestra función WinMain:

• HWND hWnd, un manipulador para la ventana principal de la aplicación. Ya que nuestra aplicación necesitará al menos una ventana.

• MSG Message, una variable para manipular los mensajes que lleguen a nuestra aplicación. • WNDCLASSEX wincl, una estructura que se usará para registrar la clase particular de ventana que

usaremos en nuestra aplicación. La declaración se realiza de la siguiente forma: HWND hwnd;

MSG messages;

WNDCLASSEX wincl; También haremos uso de otra declaración previa la cual es el tiempo de adquisición el cual debe poseer un valor por defecto, en este caso el valor por defecto será 1000 ms: MilliSeconds = 1000;

Inicialización Esta zona se encarga de registrar la clase o clases de ventana, crear la ventana y visualizarla en pantalla. Para registrar la clase primero hay que rellenar adecuadamente la estructura WNDCLASSEX, que define algunas características que serán comunes a todas las ventanas de una misma clase, como color de fondo, icono, menú por defecto, el procedimiento de ventana, etc. Después hay que llamar a la función RegisterClassEx.

Page 66: Técnicas Digitales III Proyecto Integrador

XI - 5

A continuación se crea la ventana usando la función CreateWindowEx. Esta función nos devuelve un manipulador de ventana que podemos necesitar en otras funciones. Para que la ventana sea visible hay que llamar a la función ShowWindow. La primera vez que se llama a ésta función, después de crear la ventana, se puede usar el parámetro nCmdShow de WinMain como parámetro o mejor aún, como se recomienda por Windows, el valor SW_SHOWDEFAULT. Estructura de la ventana: wincl.hInstance = hThisInstance;

wincl.lpszClassName = szClassName;

wincl.lpfnWndProc = WindowProcedure;

wincl.style = CS_DBLCLKS;

wincl.cbSize = sizeof(WNDCLASSEX);

Usa icono y puntero del ratón por defecto: wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);

wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

wincl.hCursor = LoadCursor(NULL, IDC_ARROW);

wincl.lpszMenuName = NULL;

wincl.cbClsExtra = 0;

wincl.cbWndExtra = 0;

wincl.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);

Registra la clase de ventana, si falla sale del programa: if(!RegisterClassEx(&wincl)) return 0;

La clase es registrada, ya se puede crear el programa: hwnd = CreateWindowEx(

0, /* Extended possibilities for variation */

szClassName, /* Classname */

"Adquisidor de Datos ", /* Title Text */

WS_OVERLAPPEDWINDOW, /* default window */

CW_USEDEFAULT, /* Windows decides the position */

CW_USEDEFAULT, /* where the window ends up on the screen */

544, /* The programs width */

375, /* and height in pixels */

HWND_DESKTOP, /* The window is a child-window to desktop */

LoadMenu(hThisInstance, "Menú"),/* menú llamado del recurso win003.rc*/

hThisInstance, /* Program Instance handler */

NULL /* No Window Creation data */

); Visualización de la ventana: ShowWindow(hwnd, nFunsterStil);

Bucle de mensajes Este es el núcleo de la aplicación, como se ve en el programa permanece en este bucle mientras la función GetMessage retorne con un valor TRUE si retorna cero sale de la aplicación. while(GetMessage(&messages, NULL, 0, 0))

TranslateMessage(&messages); /* Translate virtual-key messages into character messages */

DispatchMessage(&messages); /* Send message to WindowProcedure */

La función TranslateMessage se usa para traducir los mensajes de teclas virtuales a mensajes de carácter. Los mensajes traducidos se reenvían a la lista de mensajes del proceso, y se recuperarán con las siguientes

Page 67: Técnicas Digitales III Proyecto Integrador

XI - 6

llamadas a GetMessage. La función DispatchMessage envía el mensaje al procedimiento de ventana, donde será tratado adecuadamente.

El procedimiento de ventana Cada ventana tiene una función asociada, esta función se conoce como procedimiento de ventana, y es la encargada de procesar adecuadamente todos los mensajes enviados a una determinada clase de ventana. Es la responsable de todo lo relativo al aspecto y al comportamiento de una ventana. Normalmente, estas funciones están basadas en una estructura "switch" donde cada "case" corresponde aun determinado tipo de mensaje. Esta función es llamada por la función del API DispatchMessage(). LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message,WPARAM wParam LPARAM )

• hwnd es el manipulador de la ventana a la que está destinado el mensaje. • msg es el código del mensaje. • wParam es el parámetro de tipo palabra asociada al mensaje. • lParam es el parámetro de tipo doble palabra asociada al mensaje.

Podemos considerar este prototipo como una plantilla para crear nuestros propios procedimientos de ventana. El nombre de la función puede cambiar, pero el valor de retorno y los parámetros deben ser los mismos. El miembro lpfnWndProc de la estructura WNDCLASS es un puntero a una función de este tipo, esa función es la que se encargará de procesar todos los mensajes para esa clase de ventana. Cuando registremos nuestra clase de ventana, tendremos que asignar a ese miembro el puntero a nuestro procedimiento de ventana. Ya que esta función se encuentra fuera de la función Winmain debemos declarar algunas variables que se usaran a lo largo de la aplicación:

• Declaramos una variable tipo puntero a carácter la cual posee la dirección y el nombre de archivo: char* WAV="c:\tdiii\tmp.wav";

• Declaro como static las variables para el diálogo: static HINSTANCE hInstance;

static DATOS Datos;

static INDATOS inDatos; Manipulador de mensajes: La estructura swich tiene la siguiente forma en donde cada case corresponde a un mensaje: switch (message)

case WM_CREATE:

*

*

*

return 0;

break;

case WM_COMMAND:

*

*

*

break;

break;

case WM_DESTROY:

PostQuitMessage(0);

Page 68: Técnicas Digitales III Proyecto Integrador

XI - 7

break;

default:

return DefWindowProc(hwnd, message, wParam, lParam);

return 0;

WM_DESTROY es el mensaje que se envía a una ventana cuando se recibe un comando de cerrar, ya sea por menú o mediante el icono de aspa en la esquina superior derecha de la ventana. Este mensaje sólo sirve para informar a la aplicación de que el usuario tiene la intención de abandonar la aplicación, y le da una oportunidad de dejar las cosas en su sitio: cerrar ficheros, liberar memoria, guardar variables, etc. Incluso, la aplicación puede decidir que aún no es el momento adecuado para abandonar la aplicación. En este caso, efectivamente cierra la aplicación, y lo hace enviándole un mensaje WM_QUIT, mediante la función PostQuitMessage. El resto de los mensajes se procesan en el caso "default", y simplemente se cede su tratamiento a la función del API que hace el proceso por defecto para cada mensaje, DefWindowProc. Este es el camino que sigue el mensaje WM_QUIT cuando llega, ya que el proceso por defecto para este mensaje es cerrar la aplicación. Menús Un menú: se trata de una ventana, del tipo pop-up, que contiene una lista de comandos u opciones entre las cuales el usuario puede elegir. Cuando se usan en una aplicación, normalmente se agrupan varios menús bajo una barra horizontal, dividida en varias zonas o ítems. Cada ítem de un menú, (salvo los separadores y aquellos que despliegan nuevos menús), tiene asociado un identificador, este identificador se declara en el archivo cabecera ids.h. El valor de ese identificador se usará por la aplicación para saber qué opción se activó por el usuario, y decidir las acciones a tomar en consecuencia. Respondiendo a los mensajes del menú

Las activaciones de los menús se reciben mediante un mensaje WM_COMMAND. Para procesar estos mensajes, si sólo podemos recibir mensajes desde un menú, únicamente nos interesa la palabra de menor peso del parámetro wParam del mensaje. switch (message)

case WM_CREATE:

/* Inicialización de los datos de la aplicación */

hInstance = ((LPCREATESTRUCT)lParam)->hInstance;

strcpy(Datos.Texto, "c:\\tdiii\\tmp.wav"); //Copio el nom, de arch. a la estructura

strcpy(Nombre,Datos.Texto); //copio de la estructura a la variable Nombre

inDatos.Numero = MilliSeconds; // asigno el valor de MilliSeconds al parámetro de la estructura

return 0;

break;

case WM_COMMAND:

switch(LOWORD(wParam)) //la macro LOWORD para extraer el identificador del ítem del //parámetro wParam.

case CM_ADQ: // ** MENU ** --> GRABAR

//Muestro el tiempo de adquisición

DialogBoxParam(hInstance, "Dialogo2", hwnd, DlgProc2, MilliSeconds);

//función grabar

recordWAVEFile(hwnd, MilliSeconds); //llamo a la fc grabar

/* Msg adquisición terminada */

MessageBox(hwnd, "Adquisición terminada", "Adquisidor", MB_OK);

Page 69: Técnicas Digitales III Proyecto Integrador

XI - 8

break;

case CM_REP: // ** MENU ** --> REPRODUCIR

/* Rutina de REPROPDUCCION */

playWaveFile(hwnd, Nombre);

/* Msg reproducción terminada */

MessageBox(hwnd, "Reproducción terminada", "Adquisidor", MB_OK);

break;

case CM_SALIR: // ** MENU ** --> SALIR

PostQuitMessage(0); /* envía un mensaje WM_QUIT a la cola de mensajes */

break;

case CM_ARCH: // MENU -> config -> arch

DialogBoxParam(hInstance, "Dialogo3", hwnd, DlgProc3, (LPARAM)&Datos);

strcpy(Nombre,Datos.Texto);

MessageBox(hwnd, "Esta fc. no esta incluida", "Adquisidor", MB_OK);

break;

case CM_TIEMPO: // MENU -> config -> tiempo

DialogBoxParam(hInstance, "Dialogonum", hwnd, DlgProcnum, (LPARAM)&inDatos);

MilliSeconds = inDatos.Numero; //cargo el entero con el valor de la estructura

break;

break;

case WM_DESTROY:

PostQuitMessage(0); /* envía un mensaje WM_QUIT a la cola de mensajes*/

break;

default:

return DefWindowProc(hwnd, message, wParam, lParam);

return 0;

El mensaje WM_CREATE tiene como parámetro en lParam un puntero a una estructura CREATESTRUCT que contiene información sobre la ventana. En nuestro caso sólo nos interesa el campo hInstance.

Funciones de grabación y reproducción: Estas funciones realizan la grabación y reproducción de archivos WAVE, cada una de las funciones aquí utilizadas fueron descriptas en el Capítulo 11, MCI de Windows.

Función Grabar: El prototipo de la función es el siguiente: DWORD recordWAVEFile(HWND hMainWnd, DWORD dwMilliSeconds)

En donde:

• HWND hMainWnd, es el tipo de ventana. • DWORD dwMilliSeconds, es el tiempo de adquisición en milisegundos.

Definición de variables: UINT wDeviceID;

DWORD dwReturn;

MCI_OPEN_PARMS mciOpenParms;

MCI_RECORD_PARMS mciRecordParms;

MCI_SAVE_PARMS mciSaveParms;

MCI_PLAY_PARMS mciPlayParms;

Page 70: Técnicas Digitales III Proyecto Integrador

XI - 9

Abre un dispositivo de audio de forma de onda con un nuevo archivo para grabar utilizo el archivo adq.wav, este archivo solo posee las cabeceras de una archivo WAVE. mciOpenParms.lpstrDeviceType = "waveaudio";

mciOpenParms.lpstrElementName = "adq.wav";

Verifico si el dispositivo abrió correctamente: if (dwReturn = mciSendCommand(0, MCI_OPEN,

MCI_OPEN_ELEMENT | MCI_OPEN_TYPE,

(DWORD)(LPVOID) &mciOpenParms))

// Falla al abrir el dispositivo; devuelve error.

MessageBox(hMainWnd, "ERROR apertura ID", "Adquisidor", MB_OK);

return (dwReturn);

Si el dispositivo abrió con éxito; obtengo el ID al dispositivo. wDeviceID = mciOpenParms.wDeviceID;

Ya nos encontramos en condiciones de iniciar la grabación con el tiempo de adquisición ya antes previsto. mciRecordParms.dwTo = dwMilliSeconds;

if (dwReturn = mciSendCommand(wDeviceID, MCI_RECORD,

MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &mciRecordParms))

mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0);

MessageBox(hMainWnd, "Adquisición exitosa", "Adquisidor", MB_OK);

return (dwReturn);

Ejecuta la grabación para verificar que sea correcta. MessageBox(hMainWnd, "Ejecuto la adq", "Adquisidor", MB_OK);

mciPlayParms.dwFrom = 0L;

if (dwReturn = mciSendCommand(wDeviceID, MCI_PLAY,

MCI_FROM | MCI_WAIT, (DWORD)(LPVOID) &mciPlayParms))

mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0);

return (dwReturn);

Se esta en condiciones de guardar el archivo con un nombre por defecto. if (MessageBox(hMainWnd, "Guardar la adq?",

"", MB_YESNO) == IDNO)

mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0);

return (0);

// Guardo la adquisición con el nom de arch.

mciSaveParms.lpfilename = "temp.wav";

if (dwReturn = mciSendCommand(wDeviceID, MCI_SAVE,

MCI_SAVE_FILE | MCI_WAIT, (DWORD)(LPVOID) &mciSaveParms))

mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0);

MessageBox(hMainWnd, "ERROR no se Guardo", "Adquisidor", MB_OK);

return (dwReturn);

Page 71: Técnicas Digitales III Proyecto Integrador

XI - 10

Una vez finalizado todo el proceso debo finalizar el dispositivo y retornar un valor a la aplicación que llamo a esta función. mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); // cierro el dispositivo antes de salir

return (0);

Función Reproducir: El prototipo de la función es el siguiente: DWORD playWaveFile(HWND hMainWnd, LPSTR lpstrNombreFichero)

En donde:

• HWND hMainWnd, es el tipo de ventana • LPSTR lpstrNombreFichero, es un puntero con el nombre del archivo a reproducir.

Definición de variables: UINT wIDDispositivo;

DWORD dwRetorno;

MCI_OPEN_PARMS mciOpenParms;

MCI_PLAY_PARMS mciPlayParms;

Abrimos dispositivo, indicando tipo de archivo y fichero, en este caso es “Temp.wav”: mciOpenParms.lpstrDeviceType = "waveaudio";

mciOpenParms.lpstrElementName = "temp.wav";

Una ves indicado el tipo de fichero y archivo debemos obtener el id del dispositivo. MessageBox(hMainWnd, "Comienzo de la Reproducción", "Adquisidor", MB_OK);

if (dwRetorno = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,

(DWORD)(LPVOID)&mciOpenParms))

MessageBox(hMainWnd, "ERROR en apertura", "Adquisidor", MB_OK);

return (dwRetorno); //Error en la apertura

//Apertura correcta. Obtenemos el identificador

wIDDispositivo = mciOpenParms.wDeviceID;

MessageBox(hMainWnd, "Apertura OK, ID OK", "Adquisidor", MB_OK); Se inicia la reproducción. mciPlayParms.dwFrom = 0L;

if (dwRetorno = mciSendCommand(wIDDispositivo, MCI_PLAY,

MCI_FROM | MCI_WAIT, (DWORD)(LPVOID) &mciPlayParms))

mciSendCommand(wIDDispositivo, MCI_CLOSE, 0, 0);

MessageBox(hMainWnd, "ERROR reproducción", "Adquisidor", MB_OK);

return (dwRetorno);

Terminada la reproducción finalizamos el dispositivo. mciSendCommand(wIDDispositivo, MCI_CLOSE, 0, 0); // cierro el dispositivo antes de salir

return (0);

Page 72: Técnicas Digitales III Proyecto Integrador

XI - 11

Funciones de diálogo Función Imprimir diálogo(Imprime en pantalla en tiempo de adquisición)

El procedimiento de la función es el siguiente: BOOL CALLBACK DlgProc2(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)

En donde:

• HWND hDlg, identifica el cuadro de diálogo y es el manipulador de la ventana a la que está destinado el mensaje.

• UINT msg, es el código del mensaje • WPARAM wParam, es el parámetro de tipo palabra asociado al mensaje • LPARAM lParam, es el parámetro de tipo doble palabra asociado al mensaje

El procedimiento de diálogo debe retornar con un valor no nulo si procesa el mensaje y cero si no lo hace. Cuando responde a un mensaje WM_INITDIALOG, el procedimiento debe retornar cero si llama a la función SetFocus para poner el foco a uno de los controles del cuadro de diálogo. En otro caso, debe retornar un valor distinto de cero, y el sistema pondrá el foco en el primer control del diálogo que pueda recibirlo.

char texto[25];

switch (msg) /* manipulador del mensaje */

case WM_INITDIALOG:

sprintf(texto, "T. de adq. (ms): %d", lParam);

SetWindowText(GetDlgItem(hDlg, TEXTO), texto);

return TRUE;

case WM_COMMAND:

EndDialog(hDlg, FALSE);

return TRUE;

return FALSE;

Hemos usado la función estándar “sprintf” para conseguir un texto estático a partir del parámetro “lParam”. Posteriormente, usamos ese texto para modificar el control estático “TEXTO”. La función “SetWindowText” se usa para cambiar el título de una ventana, pero también sirve para cambiar el texto de un control estático. Función diálogo “Nombre de archivo” Podemos introducir y modificar texto en el cuadro de diálogo, pero no podemos asignar valores iniciales al control de edición ni tampoco podemos hacer que la aplicación tenga acceso al texto introducido por el usuario. Lo primero que tenemos que tener es algún tipo de variable que puedan compartir los procedimientos de ventana de la aplicación y el del diálogo. En nuestro caso se trata sólo de una cadena. Se trata de crear una estructura con todos los datos que queremos que el procedimiento de diálogo comparta con el procedimiento de ventana, al declaración de esta estructura se define como variable global. El procedimiento de la función es el siguiente: BOOL CALLBACK DlgProc3(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)

Existe un modo de pasar parámetros al cuadro de diálogo, usando la función “DialogBoxParam”, a través del parámetro “lParam”. Aunque esta opción nos limita a valores enteros, y sólo permite pasar valores al procedimiento de diálogo, en realidad se puede usar para pasar valores en ambos sentidos, bastará con enviar un puntero en lugar de un entero. Para ello haremos un llamado del puntero al tipo “LPARAM”. Dentro del procedimiento de diálogo haremos otro llamado de “LPARAM” al puntero. Esto nos permite declarar la variable que contiene los datos dentro del procedimiento de ventana.

Page 73: Técnicas Digitales III Proyecto Integrador

XI - 12

Ahora tenemos que hacer que se actualice el contenido del control “edit” al abrir el cuadro de diálogo. El lugar adecuado para hacer esto es en el proceso del mensaje “WM_INITDIALOG”. case WM_INITDIALOG:

SendDlgItemMessage(hDlg, ID_TEXTO, EM_LIMITTEXT, 80, 0L);

Datos = (DATOS *)lParam;

SetDlgItemText(hDlg, ID_TEXTO, Datos->Texto);

SetFocus(GetDlgItem(hDlg, ID_TEXTO));

return FALSE; Existen dos llamadas a dos funciones del API. La primera es a SendDlgItemMessage, que envía un mensaje a un control. En este caso se trata de un mensaje EM_LIMITTEXT, que sirve para limitar la longitud del texto que se puede almacenar y editar en el control edit. Es necesario que hagamos esto, ya que el texto que puede almacenar nuestra estructura de datos está limitado a 80 caracteres. También hemos añadido una llamada a la función SetDlgItemText, que cambia el contenido del texto en el interior de un control edit. Al pulsar el botón de aceptar, el dato de nuestra aplicación se actualiza con el texto que hay en el control edit. case WM_COMMAND:

switch(LOWORD(wParam))

case IDOK:

GetDlgItemText(hDlg, ID_TEXTO, Datos->Texto, 80);

EndDialog(hDlg, FALSE);

break;

case IDCANCEL:

EndDialog(hDlg, FALSE);

break;

Para eso hemos añadido la llamada a la función GetDlgItemText, que es simétrica a SetDlgItemText. Función diálogo “Tiempo de adquisición” Para la edición de números, el API tiene previstas algunas constantes y funciones. Igual que el caso anterior debemos crear una estructura con un parámetro, pero en este caso debe ser entero. El prototipo de la función es el siguiente: BOOL CALLBACK DlgProcnum(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)

Para actualizar el contenido del control edit al abrir el cuadro de diálogo se realiza en el proceso del mensaje: WM_INITDIALOG:

switch (msg) /* manipulador del mensaje */

case WM_INITDIALOG:

datos = (INDATOS *)lParam; //el dato contenido en el estructura lo paso a dato

SetDlgItemInt(hDlg, ID_NUMERO, (UINT)datos->Numero, FALSE);//cambia el contenido del

control a un control numérico

SetFocus(GetDlgItem(hDlg, ID_NUMERO));

return FALSE;

En este caso no es necesario limitar el texto que podemos editar en el control, ya que las propias funciones del API se encargan de capturar y convertir el contenido del control en un número. SetDlgItemInt, cambia el contenido de un control edit con un valor numérico.

Page 74: Técnicas Digitales III Proyecto Integrador

XI - 13

Para leer el contenido cuando procesemos el comando generado al pulsar el botón de "Aceptar" añadimos la llamada a la función GetDlgItemInt, que es simétrica a SetDlgItemInt. El proceso difiere del usado para capturar cadenas, ya que en este caso la función nos devuelve el valor numérico del contenido del control edit. case WM_COMMAND:

switch(LOWORD(wParam))

case IDOK:

numero = GetDlgItemInt(hDlg, ID_NUMERO, &NumeroOk, FALSE);//lee el contenido del control

if(NumeroOk)

datos->Numero = numero;

EndDialog(hDlg, FALSE);

else

MessageBox(hDlg, "Número no válido", "Error", MB_ICONEXCLAMATION | MB_OK);

break;

case IDCANCEL: EndDialog(hDlg, FALSE);

break;

También devuelve un parámetro que indica si ha habido algún error durante la conversión. Si el valor de ese parámetro es TRUE, significa que la conversión se realizó sin problemas, si es FALSE, es que ha habido un error. Si nuestro programa detecta un error visualizará un mensaje de error y no permitirá abandonar el cuadro de diálogo. Pero si ha habido un error, el valor de retorno de GetDlgItemInt será cero. El flag BM_ICONEXCLAMATION en el MessageBox, añade un icono al cuadro de mensaje y el sonido predeterminado para alertar al usuario.

Fichero cabecera “ids.h” este fichero cabecera contiene todas las declaraciones de identificadores, tanto para el menú como para los mensajes. Constantes del menú pop-up “Adquirir”:

• #define CM_ADQ 100, se define la opción Adquirir del menú. • #define CM_REP 101 , se define la opción Reproducir del menú. • #define CM_SALIR 102 , se define la opción Salir del menú.

Constantes del menú pop-up “Configurar”:

• #define CM_ARCH 103, se define la opción Nombre de archivo del menú. • #define CM_TIEMPO 104, se define la opción Tiempo de adquisición del menú.

Constantes para los diálogos:

• #define TEXTO 106 • #define CM_DIALOGO 107 • #define ID_TEXTO 108, constante para la edición de texto. • #define ID_NUMERO 110, constante para la edición de enteros.

Ficheros de recursos Una forma de implementar menús es por medio de un fichero de recursos, para crear o modificar menús durante la ejecución de la aplicación. 1. Usaremos siempre etiquetas como identificadores para los ítems de los menús, y nunca valores numéricos literales. 2. Crearemos un fichero de cabecera con las definiciones de los identificadores, en nuestro caso se llamará "ids.h".

Page 75: Técnicas Digitales III Proyecto Integrador

XI - 14

3. Incluiremos este fichero de cabecera tanto en el fichero de recursos, como en el del código fuente de nuestra aplicación. Dev-C++, posee un editor de recursos: File New Resource File. En el cual editaremos nuestro recurso. En nuestro recurso hemos incluido un icono para la aplicación de la siguiente forma: win003 ICON "c:\\tdiii\\Multimedia.ico"

En un recurso se debe incluir los ficheros de cabecera utilizados: #include <windows.h>

#include "ids.h" En un fichero de recursos podemos crear toda la estructura de un menú. Menú Menu MENU

BEGIN

POPUP "&Adquirir"

BEGIN

MENUITEM "&Adquirir", CM_ADQ

MENUITEM SEPARATOR

MENUITEM "&Reproducir", CM_REP

MENUITEM SEPARATOR

MENUITEM "&Salir", CM_SALIR

END

POPUP "&Configurar"

BEGIN

MENUITEM "&Archivo", CM_ARCH

MENUITEM SEPARATOR

MENUITEM "&Tiempo", CM_TIEMPO

END

END Definimos el menú mediante una cadena identificadora, sin comillas, seguida de la palabra MENU. Entre las palabras BEGIN y END podemos incluir items, separadores u otras columnas. Para incluir columnas usamos una sentencia del tipo POPUP seguida de la cadena que se mostrará como texto en el menú. Cada POPUP se comporta del mismo modo que un MENU. Los ítems se crean usado la palabra MENUITEM seguida de la cadena que se mostrará en el menú, una coma, y el comando asignado a ese ítem, que puede ser un número entero, o, como en este caso, una macro definida. Los separadores se crean usando MENUITEM seguido de la palabra SEPARATOR. El símbolo & , por ejemplo "&Adquirir" indica que la siguiente letra puede usarse para activar la opción del menú desde el teclado, usando la tecla [ALT] más la letra que sigue al símbolo &. Para indicar eso, en pantalla, esa letra se muestra subrayada. Diálogos. Los cuadros de diálogo son la forma de ventana de comunicación entre una aplicación Windows y el usuario. Para facilitar la tarea del usuario a la hora de introducir datos, existen varios tipos de controles, cada uno de ellos diseñado para un tipo específico de información. Los más comunes son los "static", "edit", "button", "listbox", "scroll", "combobox", "group", "checkbutton", "ratiobutton", "updown", "listview", "treeview", "gauge", "tab" y "trackbar". Un cuadro de diálogo es una ventana normal, aunque con algunas peculiaridades. También tiene su procedimiento de ventana (procedimiento de diálogo), pero puede devolver un valor a la ventana que lo invoque. Igual que los menús, los cuadros de diálogo se pueden construir durante la ejecución o a partir de un fichero de recursos. Dialogo2 DIALOG

0, 0, 118, 48 // Puntos de inicio y fin

Page 76: Técnicas Digitales III Proyecto Integrador

XI - 15

STYLE DS_MODALFRAME | //se creará un cuadro de diálogo con un marco de dialog-box modal

que puede combinarse con una barra de título y un menú de sistema.

WS_POPUP | //crea una ventana "pop-up".

WS_VISIBLE | //crea una ventana inicialmente visible.

WS_CAPTION CAPTION //crea una ventana con una barra de título,

"Adquisidor" //Nombre de la ventana.

FONT 8, "Helv" // Fuente y tamaño de la letra

BEGIN

CONTROL // palabra clave que indica que vamos a definir un control.

"Tiempo (ms):", //texto que se mostrara

TEXTO, //id es el identificador del control.

"static", // class es la clase de control, en nuestro caso "static".

SS_LEFT | //indica un simple rectángulo y el texto suministrado se alinea en su

//Interior a la izquierda.

WS_CHILD | //crea el control como una ventana hija.

WS_VISIBLE, //crea una ventana inicialmente visible.

8, 9, 84, 8 // coordenadas del control.

CONTROL "Aceptar",

IDOK, //esta definido dentro de windows.h

"button", //class es la clase de control, en nuestro caso "button".

BS_PUSHBUTTON | //crea un botón corriente que envía un mensaje WM_COMMAND

BS_CENTER | // centra el texto horizontalmente en el área del botón.

WS_CHILD |

WS_VISIBLE |

WS_TABSTOP, // define un control que puede recibir el foco del teclado cuando el

//Usuario pulsa la tecla TAB.

56, 26, 50, 14

END

Dialogo3 DIALOG //Nombre de arch "mensaje de guardar"

0, 0, 118, 48

STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION

"Adquisidor" FONT 8, "Helv"

BEGIN

CONTROL "Archivo:", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 9, 28, 8

CONTROL "",

ID_TEXTO, "EDIT", ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP,

36, 9, 76, 12

CONTROL "Aceptar", IDOK, "BUTTON",BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD |

WS_VISIBLE | WS_TABSTOP, 8, 26, 45, 14

CONTROL "Cancelar", IDCANCEL, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD |

WS_VISIBLE | WS_TABSTOP, 61, 26, 45, 14

END

Dialogonum DIALOG //tiempo de adq ES_NUMBER permite la edición de enteros

0, 0, 118, 48 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION

CAPTION "Adquisidor" FONT 8, "Helv"

BEGIN

CONTROL "Tiempo (ms):", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 9, 28, 8

CONTROL "", ID_NUMERO, "EDIT", ES_NUMBER | ES_LEFT | WS_CHILD | WS_VISIBLE |

WS_BORDER | WS_TABSTOP, 36, 9, 76, 12

CONTROL "Aceptar", IDOK, "BUTTON", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD |

WS_VISIBLE | WS_TABSTOP, 8, 26, 45, 14

CONTROL "Cancelar", IDCANCEL, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD |

WS_VISIBLE | WS_TABSTOP, 61, 26, 45, 14

END

Page 77: Técnicas Digitales III Proyecto Integrador

XI - 16

Estructura del Proyecto. El proyecto incluye los siguientes códigos fuente:

• Cabecera ids.h • WinMenu.c • Recurso win003.rc

Para ver el código fuente completo remitirse al Apéndice A Nota: Para el correcto funcionamiento de la aplicación se deben incluir en el proyecto las librerías utilizadas, recursos, etc. Para ello se accede a Project Project

options y se agrega la librería “libwinmm.a” y el recurso utilizado “win003.rc” antes de realizar la compilación. La carpeta que contiene el código fuente debe tener incluidos los siguientes archivos (algunos los crea el compilador por ejem.: los archivos con extensión “o” y “obj”).

Page 78: Técnicas Digitales III Proyecto Integrador

XI - 17

Manejo de la aplicación “Adquisidor.exe”. Una vez ejecutada la aplicación, como primer paso, se debe configurar el tiempo de adquisición en milisegundos, la aplicación ya trae, por defecto, configurado un tiempo de 1000ms. También se puede cambiar el nombre del archivo en donde se almacena la adquisición , que por defecto es tmp.wav, pero no esta disponible en esta aplicación, solo se presenta para desarrollos futuros. Seleccionamos la opción “Tiempo”del menú “Configurar”. El tiempo de adquisición esta comprendido entre 1 ms y 1000000000 ms. Si el número ingresado esta fuera de rango nos mostrará un error.

Una vez realizada la configuración previa estamos en condiciones de realizar la adquisición para ello seleccionamos “Adquirir” del menú “Adquirir” Una vez seleccionado visualizaremos el tiempo durante el cual se llevara a cabo la adquisición. Presionando “Aceptar” la aplicación nos informa del comienzo de la adquisición.

Nuevamente presionando el botón “Aceptar” comienza el proceso de adquisición, durante el tiempo seleccionado.

Una vez finalizada, la aplicación permite reproducir la adquisición, con el fin de verificar si esta correcta. Presionando el botón “Aceptar” comienza la reproducción.

Si la adquisición obtenida es la deseada estamos en condiciones de guardar la adquisición, la aplicación utiliza un nombre por defecto para guardar la adquisición, este nombre es “tmp.wav” que se encuentra en la misma carpeta donde se tiene la aplicación.

Page 79: Técnicas Digitales III Proyecto Integrador

XI - 18

Al finalizar todo el proceso de adquisición y guardado, la aplicación nos informa de la finalización de dicha adquisición.

Otra particularidad de nuestra aplicación es que nos permite reproducir los archivos adquiridos, para ello se accede a la opción “Reproducir” del menú “Adquirir” Una vez seleccionado, la aplicación, nos informa del comienza de la reproducción.

Al presionar “Aceptar” se presenta una serie de información, como que la apertura del archivo fue correcta y que se obtuvo correctamente el identificador del dispositivo, solo vasta con presionar “Aceptar” para comenzar la reproducción.

Una vez finalizada la reproducción, se nos informa de la finalización por medio de un mensaje.

Tanto en la grabación como en la reproducción, en caso de error se podrá visualizar el siguiente mensaje.

Para salir de la aplicación se accede al menú “Adquirir” y se selecciona la opción “Salir” o presionado la cruz “X” en el borde superior derecho. Bibliografía: Win API. Aplicaciones con API 32. Julio de 2004, Salvador Pozo Coronado http:\winapi.conclase.net Microsoft Windows SDK Multimedia Programmer’s Reference. Programación de sonido con los comandos MCI, Sergi Jordà Puig, Audio digital y MIDI, Guías Monográficas Anaya Multimedia, Madrid 1997 Materia Integrada: Informática II. (En nuestro proyecto se trataron la mayoría de los temas de la cátedra ) Consulta realizada al Ing. Vota Ramiro sobre: compilación, manejo de funciones especiales. Bibliografía de la materia: Turbo C/C++, Herbert Schild (Los temas aquí tratados eran de nuestro conocimiento lo cual no fue necesario el uso de esta bibliografía). El lenguaje de programación C, Kernighan y Ritchie. (Los temas de consulta son: “proposiciones”, “punteros”, “funciones”).

Page 80: Técnicas Digitales III Proyecto Integrador

XII - 1

Capítulo 12 Transformadas de Fourier y la DFT.

Introducción.

Los métodos de Fourier son comúnmente usados para el análisis de señales y el diseño de sistemas en telecomunicaciones modernas, radar, y procesamiento de imágenes. Los métodos clásicos de Fourier tales como la serie de Fourier y la integral de Fourier son usados para señales y sistemas de tiempo continuo (CT); es decir sistemas en los que una señal característica s(t) , esta definida en todos los valores de t sobre un continuo –inf.<t<inf. Un conjunto mas recientemente desarrollado de métodos de Fourier, incluyendo la transformada de fourier de Tiempo Discreto (DTFT) y la Transformada Discreta de Fourier (DFT ) son extensiones de conceptos básicos de Fourier que se aplican a señales en tiempo discreto (DT). Una señal DT característica s[n], esta definida solamente para valores de n donde n es un entero en el rango –inf<n<inf.

Clases CT y DT de métodos de Fourier

Un énfasis particular sobre la relación entre estas dos clases. La relación entre los dominios CT y DT esta caracterizada por las operaciones de muestreo y reconstrucción. Si s*(t), denota una señal s(t) que ha sido uniformemente muestreada cada T segundos, luego la representación matemática de s*(t) esta dada por:

s*(t)= ∑∞

−∞=

−n

nTtts )()( δ (ec. 1.2.1)

Donde δ(t) es una función impulso CT definida cero para todo t distinto de cero, indefinida en t=0, y teniendo área unidad al integrar desde t=-inf. a t=+inf. Dado que los únicos lugares donde el producto dentro de la sumatoria anterior, no es idénticamente igual a cero, son los instantes de muestreo, s(t) en la ecuación (1) puede ser remplazado con s(nT). Luego:

s*(t)= ∑∞

−∞=

−n

nTtnts )(*)( δ (ec. 1.2.2)

el modelo de muestreo CT, s*(t) consiste de una secuencia de funciones impulso CT uniformemente espaciadas a intervalos de T segundos y escalados por los valores de la señal s(t) en los instantes de muestreo. En el dominio DT, el modelo de muestreo es simplemente la secuencia definida al tomar los valores de s(t) en los instantes de muestreo:

nTttsns == |)(][ (ec. 1.2.3) En contraste a s*(t), que no esta defina para los instantes de muestreo, s[n] está bien definida en los instantes de muestreo. Así, está ahora claro, que s*(t) y s[n] son modelos diferentes pero equivalentes del proceso de muestreo en los dominios CT y DT, respectivamente. Sus equivalencias esta establecida por el hecho de que tienen el mismo espectro en el dominio de Fourier, y la señal CT subyacente a partir de la cual s*(t) y s[n] son derivadas, puede ser recuperada por cualquiera de las dos representaciones de muestreo, bajo la condición de una razón de muestreo lo suficientemente grande usada en la operación de muestreo.

Page 81: Técnicas Digitales III Proyecto Integrador

XII - 2

Transformada clásica de Fourier para señales de tiempo continuo.

Definición (CTFT):

s(t)= ∫∞

∞−

ωωπ ω dejS tj)()2/1( (ec.1.3.1)

dtetsjS tjωω −∞

∞−∫= )()( (ec. 1.3.2)

A menudo (ec.1.3.1)es llamada la integral de Fourier y (ec.1.3.2) es simplemente llamada la transformada de Fourier. Un par de transformación )()( ωjSts ↔ representa un mapeo (invertible) uno a uno, mientras que s(t) satisface condiciones que garantizan que la integral de Fourier converge. El espectro de Fourier del modelo de muestreo de tiempo continúo. Porque el modelo de muestreo CT s*(t) ,dado en (ec. 1.2.1), es por si mismo una señal CT, es apropiado aplicar la CTFT para obtener una expresión del espectro de la señal muestreada:

∑∑∞

−∞=

−∞

−∞=

=−=n

Tnj

n

enTsnTttsFtsF ωδ )()().()(* (ec. 1.4.1)

Este resultado es comparado más tarde con el resultado de la operación sobre el modelo de muestreo DT, designado como s[n], de la transformada de Fourier DT para ilustrar que los dos modelos de muestreo tienen el mismo espectro.

La transformada de Fourier de tiempo discreto.

La transformada de Fourier de tiempo discreto (DTFT) puede ser obtenida mediante el uso del modelo de muestreo DT y considerando que la relación obtenida en (ec 1.4.1) sea la definición de la DTFT. Sea T=1 de tal manera que el periodo de muestreo es removido de las ecuaciones y sea Ω=ωT una frecuencia normalizada, el par DTFT se define:

nj

n

ensS Ω−∞

−∞=∑=Ω .][)( (ec.1.5.1)

s[n]=(1/2π) ∫−

Ω ΩΩπ

π

deSjn).( (ec. 1.5.2)

El espectro S(Ω) es periódico en Ω con periodo 2π. Comparando (ec. 1.4.1) con (ec 1.5.1), y notando que Ω=ωT, se establece que: DTFTs[n] =Fs*(t)|ω=Ω/T Donde s[n]=s(t)|t=nT..Esto demuestra que el espectro de s*(t), como calculado por la transformada de Fourier CT, es idéntico al espectro de s[n] calculado mediante la DTFT.

Page 82: Técnicas Digitales III Proyecto Integrador

XII - 3

Relación entre el espectro de tiempo continuo y discreto. Debido a que las señales DT a menudo se originan por muestreo de señales CT, es importante desarrollar la relación entre el espectro original de la señal CT y el espectro de la señal DT que resulta. En efecto: Se tiene

Fs*(t)=F ∑∞

−∞=

−n

nTtts )()( δ = )()()2/1( ∑∞

−∞=

−⊗n

nTtFjS δωπ

Expandiendo en series CT de Fourier el tren de impulsos (de periodo T)

)./1()()2/1()(*)(* )/2(∑∞

−∞=

⊗==n

ntTjeTFjStsFjS

πωπω

= ∑∞

−∞=

−⊗n

nTTjS ))/2(()/2()()2/1( πωδπωπ

El resultado es :

∑∑∞

−∞=

−∞=

−=−=n

s

n

njSTnTjSTjS ))(()/1()))/2((()/1()(* ωωπωω

Donde ωs=(2π/T) es la frecuencia de muestreo expresada en radianes por segundo. Pero el segundo miembro de la ecuación anterior puede ponerse asì:

(1/T) ∑∑∞

−∞=

−∞=

−Ω=−Ωnn

TnSTnTTS )/).2((.)/1())/2()/(( ππ

Esto es S*(ω)=Fs*(t) consiste de un numero infinito de replicas del espectro CT S(ω)=Fs(t) posicionadas a intervalos de (2π/T) sobre el eje ω o a intervalos de 2π sobre el eje Ω.Note que si S(ω) es de banda limitada con un ancho de banda ωc, y si T se elije suficientemente pequeño de modo tal que ωs>2 ωc luego el espectro DT es una copia de S(ω) (escalado por 1/T) en la banda base –π<Ω≤π.

La transformada discreta de Fourier (DFT).

Para obtener la DFT el dominio continuo de frecuencia de la DTFT es muestreado a en N puntos uniformemente espaciados alrededor del circulo unitario en el plano Z, es decir en los puntos: ωk=(2πk/N),k=0,1,…,N-1.El resultado es el par DFT definido por las ecuaciones siguientes:

S[k]= ∑−

=

−1

0

/2][N

n

Nknjens π k=0,1…N-1.

∑−

=

=1

0

/2][)/1(][N

k

NknjekSNns π n=0,1,..,N-1

Materia Integradora.

Análisis de señales y sistemas. Tema: Transformada de Fourier.

Page 83: Técnicas Digitales III Proyecto Integrador

XIII - 1

Capítulo 13 FFT con MatLab

Introducción.

Para el análisis de espectro se utilizo el programa MatLab 6.5 Por simplicidad se copia el archivo WAVE, en nuestro caso Temp.wav, a la carpeta C:\MATLAB6p5\work o se selecciona el path donde el adquisidor guarda el archivo.. Para poder comenzar con el análisis de la señal de audio adquirida con el programa “adquisidor.exe”, abrimos el archivo M-File “procesamiento.m”.

Procesamiento.m

Como primer paso el programa carga el archivo “temp.wav” y devuelve los valores de las muestras en un el vector Y y la frecuencia de muestreo en la variable Fs. [Y,Fs]=wavread('temp.wav'); Luego reproduce el archivo de audio adquirido mediante la siguiente sentencia: wavplay(Y,Fs) Para poder graficar la señal en tiempo, necesitamos saber el tiempo de duración del archivo. Para ello, primero obtenemos la cantidad de muestras tomadas y la guardamos en la variable muestras. muestras=length(Y) Teniendo la frecuencia de muestreo Fs y la cantidad de muestras , podemos inferir el tiempo de duración como: tf=muestras*1/Fs Una vez obtenido el tiempo de duración, se necesitamos crear un vector de tiempos para poder graficar la señal. t=1/Fs:1/Fs:tf; Teniendo el valor de cada muestra y el tiempo en que fue tomada cada una, graficamos: figure(1) plot(t,Y) title('Señal') xlabel('Tiempo (Seg)') ylabel('Amplitud (v)') grid Para poder analizar el espectro de la señal tomada, necesitamos aplicar la transformada discreta de fourier (DFT), ya que la señal no es de tiempo continuo, sino que es una señal muestreada. Para poder calcular la DFT, usamos el algoritmo de calculo que se denomina FFT (transformada rápida de fourier).. Para usar la FFT, primero vamos a determinar la cantidad de puntos que vamos a tomar para realizar la FFT. Si tomamos en cuenta que la frecuencia de muestreo es de 22050 Hz, entonces el periodo de muestreo es de 1/22050=45,35 microsegundos. Si elegimos una cantidad de 8192 muestras, tenemos una ventana de tiempo de 8192/22050=371ms. N=8192;

Page 84: Técnicas Digitales III Proyecto Integrador

XIII - 2

Calculamos la FFT. X = fft(Y,N); Calculamos el vector modulo de los valores de la FFT. Xmodulo=abs(X); Para poder graficar el espectro, calculamos el vector de frecuencias. f=((Fs)*(1:N))/N; Por último, graficamos: figure(2) plot(f,Xmodulo) title('Espectro') xlabel('Frecuencia (Hz)') ylabel('Amplitud (mv)') grid Las líneas siguientes muestran la señal y el espectro en una misma figura: figure(3) subplot(2,1,1),plot(t,Y) title('Señal') xlabel('Tiempo (Seg)') ylabel('Amplitud (v)') grid subplot(2,1,2),plot(f,Xmodulo) title('Espectro') xlabel('Frecuencia (Hz)') ylabel('Amplitud (mv)') grid *Nota: el comando plot usa usa los valores discreto del vector de valor absoluto de los puntos de la FFT e interpola valores para poder graficar. Una forma de visualizar las señales en tiempo discreto es usando el comando : figure(4) stem(t,Y) title('Señal') xlabel('Tiempo (Seg)') ylabel('Amplitud (v)') grid figure(5) stem(f,Xmodulo) title('Espectro') xlabel('Frecuencia (Hz)') ylabel('Amplitud (mv)') grid figure(6) subplot(2,1,1),stem(t,Y) title('Señal') xlabel('Tiempo (Seg)') ylabel('Amplitud (v)') grid subplot(2,1,2),stem(f,Xmodulo)

Page 85: Técnicas Digitales III Proyecto Integrador

XIII - 3

title('Espectro') xlabel('Frecuencia (Hz)') ylabel('Amplitud (mv)') grid Para correr el programa solo hay que elegir la opción “Debug+Run”. A modo de mostrar los resultados usamos una señal de 2,5 segundos de duración, mostrando una aproximación en tiempo continuo y la real en tiempo discreto, las cuales coinciden.

En tiempo continuo.

Page 86: Técnicas Digitales III Proyecto Integrador

XIII - 4

En tiempo discreto.

Page 87: Técnicas Digitales III Proyecto Integrador

XIII - 5

Espectro continuo.

Espectro discreto.

Bibliografía:

Apuntes de clase. Técnicas digitales III. Ayuda de MatLab.

Page 88: Técnicas Digitales III Proyecto Integrador

XIII - 6

Apéndice A Código Fuente del programa

Cabecera ids.h

/* *********** Fichero Cabecera ********** */ /* ****** identificadores de comandos **** */ /*Ctes del menú ADQ*/ #define CM_ADQ 100 #define CM_REP 101 #define CM_SALIR 102 /*Ctes del menú CONFIG*/ #define CM_ARCH 103 #define CM_TIEMPO 104 /*Ctes del menú ESPECTRO*/ #define CM_ESP 112 /*Ctes del menú AYUDA*/ #define CM_AYU 113 /* ****** identificadores de diálogo **** */ /* Cuadro de mensaje */ #define TEXTO 106 #define CM_DIALOGO 107 #define ID_TEXTO 108 #define ID_NUMERO 110

Winmenu.c

/***********************************************************/ /********* FICHEROS DE CABECERA ****************************/ /***********************************************************/ #include <windows.h> //cabecera de window #include <mmsystem.h> // " multimedia #include <stdlib.h> #include <stdio.h> #include "ids.h" // cabecera del menu (declaración de ctes) #pragma comment(lib, "winmm.lib") /***********************************************************/ /********* DECLARACION DE FUNCIONES*************************/ /***********************************************************/ LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);// Declaración del procedimiento de ventana /*declaración de la función de grabación y reproducción*/ DWORD playWaveFile(HWND, LPSTR); //Paso a la función el manipulador de ventana //y un puntero al archivo wav DWORD recordWAVEFile(HWND, DWORD); //Paso a la función el manipulador de ventana //y el tiempo de grabación en ms /* Funciones de manejo de controles*/

Page 89: Técnicas Digitales III Proyecto Integrador

A - 7

BOOL CALLBACK DlgProc2(HWND, UINT, WPARAM, LPARAM); BOOL CALLBACK DlgProc3(HWND, UINT, WPARAM, LPARAM); //fc para control edit de daracteres BOOL CALLBACK DlgProcnum(HWND, UINT, WPARAM, LPARAM);//fc para control edit numerico /***********************************************************/ /********* VARIABLES GLOBALES ******************************/ /***********************************************************/ char szClassName[ ] = "Adquisidor"; // Nombre de la clase en una variable global int MilliSeconds; //tiempo de adquisición en ms char Nombre[80]; //Nombre del archivo typedef struct stDatos //Estructura de datos nombre del archivo char Texto[80]; //Longitud del nombre de arch. DATOS; typedef struct inDatos //Estructura de datos tiempo de muestreo int Numero; INDATOS; /***********************************************************/ /********* FUNCION MAIN ************************************/ /***********************************************************/ /* función winmain*/ int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) /* Declaración: */ HWND hwnd; /* manipulador para la ventana principal */ MSG messages; /* variable para manipular los mensajes */ WNDCLASSEX wincl; /* estructura para registrar la clase de ventana */ /*declaración previa del tiempo de adq*/ MilliSeconds = 1000; /* Inicialización */ /* Estructura de la ventana */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* fc llamada por la ventana */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof(WNDCLASSEX); /* Usa icono y puntero mouse por defecto */ wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor(NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */

Page 90: Técnicas Digitales III Proyecto Integrador

A - 8

/* Use light-gray as the background of the window */ wincl.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH); /* Register the window class, if fail quit the program */ if(!RegisterClassEx(&wincl)) return 0; /* The class is registered, let's create the program*/ hwnd = CreateWindowEx( 0, /* Extended possibilites for variation */ szClassName, /* Classname */ "Adquisidor de Datos ", /* Title Text */ WS_OVERLAPPEDWINDOW, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 544, /* The programs width */ 375, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ LoadMenu(hThisInstance, "Menu"),/* menu llamado del recurso win003.rc*/ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ ); /* Make the window visible on the screen */ ShowWindow(hwnd, nFunsterStil); /* Bucle de mensaje */ /* Run the message loop. It will run until GetMessage( ) returns 0 */ while(GetMessage(&messages, NULL, 0, 0)) /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); /* The program return-value is 0 - The value that PostQuitMessage( ) gave */ return messages.wParam; /***********************************************************/ /********* FIN DE LA FUNCION MAIN **************************/ /***********************************************************/ /*---------------------------------------------------------*/ /***********************************************************/ /********* DECLARACION DE FUNCIONES*************************/ /***********************************************************/ /* Esta función es llamada por la función del API DispatchMessage()*/ LRESULT CALLBACK WindowProcedure( HWND hwnd, // Manipulador de ventana UINT message, // Mensaje WPARAM wParam, // Parámetro palabra, varía LPARAM lParam // Parámetro doble palabra, varía ) // DECLARACION DE VARIABLES

Page 91: Técnicas Digitales III Proyecto Integrador

A - 9

char* WAV="c:\tdiii\tmp.wav"; //dirección del archivo wav static HINSTANCE hInstance; // Variables para diálogo static DATOS Datos; //DATOS Datos; static INDATOS inDatos; //esturctura de tiempo de adq //MANIPULADOR DE MENSAJES switch (message) /* manipulador del mensaje */ case WM_CREATE: /* Inicialización de los datos de la aplicación */ hInstance = ((LPCREATESTRUCT)lParam)->hInstance; strcpy(Datos.Texto, "c:\\tdiii\\tmp.wav"); //copio el nom de arch a la estructura strcpy(Nombre,Datos.Texto); //copio de la escructura a la variable Nombre inDatos.Numero = MilliSeconds; // asigno el valor de MilliSeconds al parametro de la estructura return 0; break; case WM_COMMAND: switch(LOWORD(wParam)) case CM_ADQ: //********************************************************* // ** MENU ** --> GRABAR /* --->> */ /* ******** Rutina de grabación ********* */ DialogBoxParam(hInstance, "Dialogo2", hwnd, DlgProc2, MilliSeconds); recordWAVEFile(hwnd, MilliSeconds); //llamo a la fc grabar /* ******** MSN adquisicion terminada******** */ MessageBox(hwnd, "Adquisición terminada", "Adquisidor", MB_OK); /* <<--- */ //********************************************************* break; case CM_REP: //********************************************************* // ** MENU ** --> REPRODUCIR /* --->> */ /* ******** Rutina de REPROPDUCCION ********* */ playWaveFile(hwnd, Nombre); /* ******** MSN reproducción terminada******** */ MessageBox(hwnd, "Reproducción terminada", "Adquisidor", MB_OK); /* <<--- */ //********************************************************* break; case CM_SALIR: // ** MENU ** --> SALIR PostQuitMessage(0); /* envía un mensaje WM_QUIT a la cola de mensajes */ break; case CM_ARCH: // MENU -> config -> arch DialogBoxParam(hInstance, "Dialogo3", hwnd, DlgProc3, (LPARAM)&Datos); strcpy(Nombre,Datos.Texto);

Page 92: Técnicas Digitales III Proyecto Integrador

A - 10

MessageBox(hwnd, "Esta fc. no esta incluida", "Adquisidor", MB_OK); break; case CM_TIEMPO: // MENU -> config -> tiempo DialogBoxParam(hInstance, "Dialogonum", hwnd, DlgProcnum, (LPARAM)&inDatos); MilliSeconds = inDatos.Numero; //cargo el entero con el valor de la estructura break; case CM_ESP: // MENU -> Espectro -> Obtener MessageBox(hwnd, "Esta opción no esta disponible", "Adquisidor", MB_OK); break; case CM_AYU: // MENU -> AYUDA -> Programa MessageBox(hwnd, "Realizado por: Benitez, Pablo -- Carranza, Rodrigo -- Curaratti, Nazareno", "Adquisidor", MB_OK); break; break; case WM_DESTROY: PostQuitMessage(0); /* envía un mensaje WM_QUIT a la cola de mensajes*/ break; default: /* for messages that we don't deal with */ return DefWindowProc(hwnd, message, wParam, lParam); return 0; /***********************************************************/ /*---------------------------------------------------------*/ /*---------------- FUNCION GRABAR -------------------------*/ /*---------------------------------------------------------*/ DWORD recordWAVEFile(HWND hMainWnd, DWORD dwMilliSeconds) UINT wDeviceID; DWORD dwReturn; MCI_OPEN_PARMS mciOpenParms; MCI_RECORD_PARMS mciRecordParms; MCI_SAVE_PARMS mciSaveParms; MCI_PLAY_PARMS mciPlayParms; MessageBox(hMainWnd, "Comienzo de la adqisición", "Adquisidor", MB_OK); // Abre un dispositivo de audio de forma de onda con un nuevo archivo para grabar. mciOpenParms.lpstrDeviceType = "waveaudio"; mciOpenParms.lpstrElementName = "adq.wav"; if (dwReturn = mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE, (DWORD)(LPVOID) &mciOpenParms)) // Falla al abrir el dispositivo; devuelve error. MessageBox(hMainWnd, "ERROR apertura ID", "Adquisidor", MB_OK); return (dwReturn);

Page 93: Técnicas Digitales III Proyecto Integrador

A - 11

// El dispositivo abrió con éxito; asigno el ID al dispositivo. wDeviceID = mciOpenParms.wDeviceID; //Comiensa la grabación y graba para el número especificado de millisegundos. mciRecordParms.dwTo = dwMilliSeconds; if (dwReturn = mciSendCommand(wDeviceID, MCI_RECORD, MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &mciRecordParms)) mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); MessageBox(hMainWnd, "Adquisición exitosa", "Adquisidor", MB_OK); return (dwReturn); // Ejecuta la grabación y pregunta para guardar el archivo MessageBox(hMainWnd, "Ejecuto la adq", "Adquisidor", MB_OK); mciPlayParms.dwFrom = 0L; if (dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_FROM | MCI_WAIT, (DWORD)(LPVOID) &mciPlayParms)) mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); return (dwReturn); if (MessageBox(hMainWnd, "Guardar la adq?", "", MB_YESNO) == IDNO) mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); return (0); // Guardo la adquisición con el nom de arch. mciSaveParms.lpfilename = "temp.wav"; if (dwReturn = mciSendCommand(wDeviceID, MCI_SAVE, MCI_SAVE_FILE | MCI_WAIT, (DWORD)(LPVOID) &mciSaveParms)) mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); MessageBox(hMainWnd, "ERROR no se Guardo", "Adquisidor", MB_OK); return (dwReturn); mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); // cierro el dispositivo antes de salir return (0); /***********************************************************/ /*---------------------------------------------------------*/ /*---------------- FUNCION REPRODUCIR----------------------*/ /*---------------------------------------------------------*/ DWORD playWaveFile(HWND hMainWnd, LPSTR lpstrNombreFichero) // hWndNotifica es el Handle a la ventana que recibe la notificación // lpstrNombreFichero es una cadena con el nombre del fichero UINT wIDDispositivo; DWORD dwRetorno; MCI_OPEN_PARMS mciOpenParms;

Page 94: Técnicas Digitales III Proyecto Integrador

A - 12

MCI_PLAY_PARMS mciPlayParms; //Abrimos dispositivo, indicando tipo y fichero mciOpenParms.lpstrDeviceType = "waveaudio"; mciOpenParms.lpstrElementName = "temp.wav"; MessageBox(hMainWnd, "Comienzo de la Reproducción", "Adquisidor", MB_OK); if (dwRetorno = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)(LPVOID)&mciOpenParms)) MessageBox(hMainWnd, "ERROR en apertura", "Adquisidor", MB_OK); return (dwRetorno); //Error en la apertura //Apertura correcta. Obtenemos el identificador wIDDispositivo = mciOpenParms.wDeviceID; MessageBox(hMainWnd, "Apertura OK, ID OK", "Adquisidor", MB_OK); //Se inicia la reproducción. mciPlayParms.dwFrom = 0L; if (dwRetorno = mciSendCommand(wIDDispositivo, MCI_PLAY, MCI_FROM | MCI_WAIT, (DWORD)(LPVOID) &mciPlayParms)) mciSendCommand(wIDDispositivo, MCI_CLOSE, 0, 0); MessageBox(hMainWnd, "ERROR reproducción", "Adquisidor", MB_OK); return (dwRetorno); mciSendCommand(wIDDispositivo, MCI_CLOSE, 0, 0); // cierro el dispositivo antes de salir return (0); ; /***********************************************************/ /*---------------------------------------------------------*/ /*---------------- FUNCION DE DIALOGO ---------------------*/ /*---------------------------------------------------------*/ /***********************************************************/ /*---------------------------------------------------------*/ /*---------------- Fc Imprimir diálogo --------------------*/ /*---------------------------------------------------------*/ BOOL CALLBACK DlgProc2(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) char texto[25]; switch (msg) /* manipulador del mensaje */ case WM_INITDIALOG: sprintf(texto, "T. de adq. (ms): %d", lParam); SetWindowText(GetDlgItem(hDlg, TEXTO), texto); return TRUE; case WM_COMMAND: EndDialog(hDlg, FALSE); return TRUE; return FALSE;

Page 95: Técnicas Digitales III Proyecto Integrador

A - 13

/***********************************************************/ /*---------------------------------------------------------*/ /*-------- FUNCION DE DIALOGO NOMBRE DE ARCHIVO -----------*/ /*---------------------------------------------------------*/ BOOL CALLBACK DlgProc3(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) static DATOS *Datos; switch (msg) /* manipulador del mensaje */ case WM_INITDIALOG: SendDlgItemMessage(hDlg, ID_TEXTO, EM_LIMITTEXT, 80, 0L); Datos = (DATOS *)lParam; SetDlgItemText(hDlg, ID_TEXTO, Datos->Texto); SetFocus(GetDlgItem(hDlg, ID_TEXTO)); return FALSE; case WM_COMMAND: switch(LOWORD(wParam)) case IDOK: GetDlgItemText(hDlg, ID_TEXTO, Datos->Texto, 80); EndDialog(hDlg, FALSE); break; case IDCANCEL: EndDialog(hDlg, FALSE); break; return TRUE; return FALSE; /***********************************************************/ /*---------------------------------------------------------*/ /*-------- FUNCION DE DIALOGO tiempo de adq---- -----------*/ /*---------------------------------------------------------*/ BOOL CALLBACK DlgProcnum(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) BOOL NumeroOk; static INDATOS *datos; int numero; switch (msg) /* manipulador del mensaje */ case WM_INITDIALOG: datos = (INDATOS *)lParam; //el dato contenido en el estructura lo paso a dato SetDlgItemInt(hDlg, ID_NUMERO, (UINT)datos->Numero, FALSE);//cambia el contenido del control a un control numerico SetFocus(GetDlgItem(hDlg, ID_NUMERO)); return FALSE; case WM_COMMAND: switch(LOWORD(wParam)) case IDOK: numero = GetDlgItemInt(hDlg, ID_NUMERO, &NumeroOk, FALSE);//lee el contenido del control if(NumeroOk)

Page 96: Técnicas Digitales III Proyecto Integrador

A - 14

datos->Numero = numero; EndDialog(hDlg, FALSE); else MessageBox(hDlg, "Número no válido", "Error", MB_ICONEXCLAMATION | MB_OK); break; case IDCANCEL: EndDialog(hDlg, FALSE); break; return TRUE; return FALSE;

Recurso win003.rc

win003 ICON "c:\\tdiii\\Multimedia.ico" #include <windows.h> #include "ids.h" /*DECLARACION DEL MENU*/ Menu MENU BEGIN POPUP "&Adquirir" BEGIN MENUITEM "&Adquirir", CM_ADQ MENUITEM SEPARATOR MENUITEM "&Reproducir", CM_REP MENUITEM SEPARATOR MENUITEM "&Salir", CM_SALIR END POPUP "&Configurar" BEGIN MENUITEM "&Archivo", CM_ARCH MENUITEM SEPARATOR MENUITEM "&Tiempo", CM_TIEMPO END POPUP "&Espectro" BEGIN MENUITEM "&Obtener espectro", CM_ESP END POPUP "&Ayuda" BEGIN MENUITEM "&Programa", CM_AYU END END /*******DIALOGO*******/ Dialogo2 DIALOG 0, 0, 118, 48 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Adquisidor" FONT 8, "Helv" BEGIN CONTROL "Tiempo (ms):",

Page 97: Técnicas Digitales III Proyecto Integrador

A - 15

TEXTO, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 9, 84, 8 CONTROL "Aceptar", IDOK, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 56, 26, 50, 14 END Dialogo3 DIALOG //Nombre de arch "mensaje de guardar" 0, 0, 118, 48 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Adquisidor" FONT 8, "Helv" BEGIN CONTROL "Archivo:", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 9, 28, 8 CONTROL "", ID_TEXTO, "EDIT", ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 36, 9, 76, 12 CONTROL "Aceptar", IDOK, "BUTTON", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 26, 45, 14 CONTROL "Cancelar", IDCANCEL, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 61, 26, 45, 14 END Dialogonum DIALOG //tiempo de adq 0, 0, 118, 48 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Adquisidor" FONT 8, "Helv" BEGIN CONTROL "Tiempo (ms):", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 9, 28, 8 CONTROL "", ID_NUMERO, "EDIT", ES_NUMBER | ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 36, 9, 76, 12 CONTROL "Aceptar", IDOK, "BUTTON", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 26, 45, 14 CONTROL "Cancelar", IDCANCEL, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 61, 26, 45, 14 END