Proyecto terminal Alumno: Sánchez García Angel Fabricio...

132
1 Proyecto terminal Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos Digitales de audio Introducción:

Transcript of Proyecto terminal Alumno: Sánchez García Angel Fabricio...

Page 1: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

1

Proyecto terminal Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close

Efectos Digitales de audio

Introducción:

Page 2: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

2

El proyecto pretende desarrollar código para la síntesis de música y efectos de audio digital en MatLab. El tema es de interés tanto en las ciencias computacionales como en la electrónica. De hecho, ahora hay congresos especializados dedicados al tema y libros referentes. Sin embargo, a pesar de su creciente importancia, el procesamiento de audio digital no es un tema ni tratado ni ofrecido en la UAM.-I. El desarrollo del proyecto dejará documentación y código sobre el tema que podría servir para futuros alumnos o inclusive cursos. Por ser novedoso en la UAM.-I, es necesario que el alumno tenga el conocimiento mínimo relacionado con el procesamiento digital del audio y de los filtros digitales.

Page 3: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

3

Sánchez García Angel Fabricio Proyecto terminal Profesor: Doctor John Goddard.

Índice Primera parte “Conceptos fundamentales” 1.- Introducción 1 2.- Respecto a sonido:

2.1.- Definición de sonido 1 2.2.- Descripción del sonido como onda 1 2.3.- El sonido en el vacío. 2

3.- Respecto al Oído 3.1.-Anatomía del oído

3.1.1.- Oído externo 3 3.1.2 - Oído medio 3 3.1.3. -Oído interno 3 3.1.4.- Breve explicación del funcionamiento del oído 4

4.- Magnitudes y cualidades del sonido

4.1.- Magnitudes físicas del sonido 5 4.2.- Frecuencia de la señal. 6 4.3.- Características o cualidades del sonido 7 4.4.- Como se produce un sonido 7 4.5.- Velocidad del sonido 8 4.6.- Atenuación del sonido 8 4.7.- Decibelio 9 4.8.- Presión 10 4.9.- Relación de la frecuencia con una cuerda. 11

Segunda parte “Definiciones” 1.- Introducción. 13 2.- Espectro o frecuencia audible. 13 3.- Frecuencia de algunos instrumentos 13 4.-Octava 14 5.- Diapasón. 16 6.- Audición de algunos animales 17 7.- Fuera del espectro audible 17 8.- División del espectro audible. 18 9.- Algunos fenómenos psicoacusticos. 18 10.- Movimiento armónico simple. 19

Page 4: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

4

11.- Programación de un M.A.S. 20 Tercera parte “WAV, Muestreo y Nyquist” 1.- Introducción. 2.- Tarjeta de audio. 23 3.- Formato WAV de Microsoft. 24

3.1.-Descripción 3.2.-Estructura.

4.- Frecuencia de muestreo. 25 5.- Cuantificación digital. 29 6.- Teorema de muestreo de Nyquist-Shannon 30 7.- Primer acercamiento sobre trato de archivos 31 Cuarta parte “Fourier y Armónicos”

1.- Introducción 32 2.-La serie de Fourier 34 3.- La transformada discreta de Fourier 34 4.- La fft ( Fast Fourier Transform). 36 5.- Los armonicos. 6.- Armónicos en instrumentos 38 Quinta parte “Filtros digitales” 1.- Introducción 42 2.- Filtros analógicos y digitales. 43 3.- Filtros recursivos y no recursivos. 44 4.- Filtros FIR 45 5.- Filtros IIR 45 6.- Transformada z 47 7.- Polos y ceros de la transformada zeta. 48 8.- Plano z 49 9.- Trabajando con MatLab. 50 9.1 filter 51 9.2 fir1 52 9.3 freqz 55 9.4 zplane 56 Sexta parte “Aplicación de los filtros digitales y síntesis de efectos de sonido” 1.- Introducción. 57 2- Síntesis de efectos de sonido. 57 2.1.- Función adsr 57 2.2.- Suma de sonidos y beats 61 2.3.- Sonido estéreo en MatLab 61 3.- Simulación de instrumentos musicales utilizando señales moduladas en frecuencia. 62 3.1.- Campana 62

Page 5: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

5

3.2.- Tremelo 63 3.3.- Vibrato 64 4.- Aplicación de los filtros digitales 65 4.1.- Plucked String 65 4.2.- 1 o mas Ecos 71 4.3.- Reverberación 74 4.4.- Coros. 76 5.- Tipos de filtros 77 5.1.- paso bajo 77 5.2.- paso alto 77 5.3.- pasa banda 77 5.4.- rechaza banda 77 6.- Ejemplo de filtro 77 Conclusiones 81 Apéndice A Manual técnico de creación de GUI en MatLab 7.4 82 Apéndice B Mi primer GUI desde cero 104 Apéndice C GENERADOR DE SONIDOS. Detalles de la Interfaz grafica del proyecto 116

Page 6: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

6

Primera parte “Conceptos fundamentales

Sonido 1.-Introducción:

Esta primera parte pretende dar una introducción a conceptos básicos relevantes al proyecto tales como definiciones y propiedades del sonido, como escuchamos y conceptos clave. 2.- Respectos al sonido

2.1.-Definición de sonido:

El sonido es un conjunto de vibraciones mecánicas múltiples proveniente desde un punto o foco, el cual produce un cambio de presión en el medio. Esto produce que las partículas del medio (por lo general, el aire) reaccionen unas con otras, propagándose las perturbaciones de presión en todas direcciones en forma de ondas senoidales.

Imagen que representa la creación y propagación de un sonido en un foco dado y que puede ser escuchado por un oyente.

2.2.-Definición del sonido como onda.

El sonido es, desde el punto de vista físico, el movimiento ondulatorio en un medio elástico (normalmente el aire), debido a cambios rápidos de presión, generados por el movimiento vibratorio de un cuerpo sonoro. En general, se llama sonido a la sensación, en el órgano del oído, producida por este movimiento.

Otra forma de tratar de comprender el sonido es tratando de compararlo con un rió o lago (que seria el medio), el cual si no tiene ninguna perturbación de aire u otro medio entonces representaría el silencio y si lanzáramos piedras a este entonces se producirían ondas que se expandirían y cada una de estas produciría ondas de diferente tamaño que

Page 7: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

7

representarían los sonidos. Con esta interpretación es importante preguntarse ¿el foco de un sonido de un instrumento musical es igual en cada momento? ¿Por qué las ondas al alejarse pierden fuerza?

2.3.-El sonido en el vacío.

Un sonido se propaga en un medio material (como el aire, como se a mencionado), pero que sucedería si este sonido se produjera en el vacío, como en el espacio.

Tal vez por suposición cuando vimos una película donde explota una nave en el espacio, nos queda la sensación de que produce un sonido tremendo, ¡Pero el espacio esta vacío!, entonces, por donde se desplaza ese sonido. La verdad es que solo son efectos de la película como tantos otros.

3.- Respecto al oído

Y como podemos escuchar los sonidos

Ahora que tenemos una noción básica de los que es un sonido, necesitamos saber como podemos escuchar, ya que sin un aparato auditivo no se puede decir que se pueda escuchar un sonido. Aquí una investigación del aparato auditivo. 3.1.- Anatomía del oído.

El aparato auditivo Percibimos los sonidos a través del aparato auditivo que recibe las ondas sonoras y las transmite al cerebro. Esta reacción sucede incluso antes de nacer.

Imagen de www2.netexplora.com

Page 8: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

8

3.1.-Anatomía del oído El oído es un órgano que transforma las vibraciones mecánicas que le llegan del oído externo en impulsos nerviosos que se envían al cerebro. Consta de tres partes fundamentales, oído externo, oído medio y oído interno.

3.1.1.- Oído externo

Esta parte más externa e incluye el pabellón auricular, el canal auditivo externo y el tímpano. Las ondas sonoras son recogidas por el pabellón que las conduce a través del conducto auditivo hacia la membrana del tímpano.

• Pabellón auricular. Es un cartílago plano y elástico que tiene forma del extremo de una trompeta y esta cubierto por piel gruesa, se distinguen el hélix o borde exterior replegado, el antihélix o eminencia central del pabellón que termina en una elevación llamada antítrago, concha o parte central y lóbulo, que es la parte inferior.

• Canal auditivo externo, un conducto (tubo) curvo de cerca de 2,5 cm. de longitud que se encuentra en el hueso temporal; esta compuesto por folículos pilosos, glándulas sebáceas que son las glándulas productoras de cerumen y glándulas de ovillo que son las glándulas que dan color a la cera.

• Tímpano. Es una membrana delgada y semitransparente compuesta por tejido conectivo fibroso que se encuentra entre el conducto auditivo externo y el oído medio.

3.1.2.- Oído medio

Es una cavidad limitada por el tímpano por un lado y por la base de la cóclea por le otro. En su interior hay 3 huesecillos, denominados martillo, yunque y estribo. La cabeza del martillo se apoya sobre el tímpano y transmite vibraciones a través del yunque al estribo. A su vez este último se apoya en una de las dos ventanas que cierran la cóclea, la ventana oval.

Se encuentra ubicada en la parte central del oído e incluye:

• Trompa de Eustaquio, un conducto que comunica directamente el oído medio con la faringe, igualando la presión entre las dos bandas del tímpano.

• Cadena de huesecillos conformada por el martillo, yunque y estribo, que son el camino de las vibraciones mecánicas hacia la ventana oval.

• Ventana oval. Es otra membrana que provoca una vibración en el líquido contenido dentro del caracol. La cadena de huesecillos transforma un estímulo del medio aéreo a un medio líquido a través de la ventana oval.

3.1.3.- Oído Interno

Es una cavidad hermética cuyo interior esta anegado por un líquido denominado linfa. Consta de 3 elementos: los canales semicirculares, el vestíbulo y la cóclea. Los canales semicirculares no tienen relación directa con la audición, tienen que ver con el equilibrio. Las vibraciones de la ventana oval del vestíbulo son transformadas en la

Page 9: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

9

cóclea. Las señales de la cóclea son codificadas y transformadas en impulsos electroquímicos que se propagan por el nervio acústico hasta llegar al cerebro.

Como su nombre indica, es la parte más interna del oído; consta de:

• Cóclea o caracol. Es un órgano en forma de tubo espiral. Está lleno de líquido (endolinfa) y posee la membrana de Reissner y la membrana basilar, donde reside el órgano de Corti, un conjunto de células ciliadas (entre 24.000 y 30.000), que vibran a determinadas frecuencias. La localización de los cilios a lo largo de la membrana basilar guarda relación con la longitud de onda a la que son sensibles.

• Canales semicirculares. Son tres tubos de forma semicircular, dos de ellos tienen posición vertical y otra posición horizontal (anterior, posterior y lateral). La función de los canales semicirculares es mantener el equilibrio.

• Nervio auditivo. Nervio que conduce la información nerviosa hasta al cerebro, cada oído por separado.

El conjunto de la cóclea y los canales semicirculares se denomina laberinto.

3.1.4.- Breve explicación del funcionamiento del oí do El vestíbulo posee dos orificios (ventanas oval y redonda) tapados por sendas membranas. La ventana oval está unida al estribo y recibe de él sus vibraciones. La cóclea se divide longitudinalmente por la membrana basilar, sobre la que se asientan los filamentos terminales del nervio auditivo. Cuando el estribo empuja la ventana oval, se produce una sobre presión en la parte superior de la cóclea que obliga a circular el fluido linfático hacia la cavidad inferior a través del helicotrema, mientras que la membrana basilar se deforma hacia abajo. Finalmente, la membrana elástica que cierra la ventana redonda cede hacia afuera. Cuando el estribo se mueve hacia la izquierda y la derecha, aumentando y disminuyendo la presión del líquido contenido encima de la membrana basilar, aparece una onda que se desplaza de izquierda a derecha a lo largo de la membrana. Esta onda puede visualizarse como un movimiento de traslación hacia arriba y hacia abajo de la membrana. Su velocidad de avance depende de la frecuencia y de las características de la membrana basilar. En algún punto de la cóclea la velocidad es cero. Cerca de ese punto, la membrana oscila hacia arriba y hacia abajo con mayor fuerza y absorbe la energía de la onda. Cada punto de la membrana basilar responde así a una determinada frecuencia. Cuando el oído recibe un sonido con varias frecuencias, cada una de ellas excita un punto en la membrana basilar, de modo que el cerebro puede interpretar además de la altura del sonido su timbre, sin más que discernir qué terminaciones nerviosas fueron excitadas y con cuánta intensidad. Es decir, el oído interno funciona como un analizador de sonidos.

Page 10: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

10

Comparación del oído humano con instrumentos digitales o eléctricos.

Imagen de www.ehu.es/acustica/espanol/fisiologia1

4.- Magnitudes y cualidades del sonido.

4.1.- Magnitudes físicas del sonido

Como todo movimiento ondulatorio, el sonido puede representarse por una curva ondulante como, por ejemplo, una sinusoide, y se pueden aplicar las mismas magnitudes y unidades de medida que a cualquier onda:

• Longitud de onda: indica el tamaño de una onda. Este va comprendido por el tamaño de la onda, que es la distancia entre el principio y el final de una onda completa (ciclo).

• Frecuencia: número de ciclos (ondas completas) que se producen o que se reciben por unidad de tiempo. En el caso del sonido la unidad de tiempo es el segundo y la frecuencia se mide en Hertz (ciclos por segundo).

• Periodo: es el tiempo que tarda cada ciclo en repetirse. Es el inverso de la frecuencia.

• Amplitud : indica la cantidad de energía que contiene una señal sonora. No hay que confundir amplitud con volumen o potencia acústica. En sonido, normalmente, la amplitud viene definida en decibelios SPL, las siglas SPL hacen referencia a la presión sonora (Sound Pressure Level).

• Fase: la fase de una onda expresa su posición relativa con respecto a otra onda.

Page 11: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

11

• Potencia: la potencia acústica es la cantidad de energía radiada en forma de ondas por unidad de tiempo por una fuente determinada. La potencia acústica viene determinada por la propia amplitud de la onda, pues cuanto mayor sea la amplitud de la onda, mayor es la cantidad de energía (potencia acústica) que genera.

Representación de una onda con frecuencia f, a lo largo del tiempo, donde se apreciar el periodo, la posición inicial y la amplitud. Se observa una muestra a lo largo del tiempo.

4.2.- Frecuencia de onda (senoidal).

Una onda como tal es una perturbación que se propaga desde el punto que se produjo hacia el medio que lo rodea. La propagación consta de un empuje y un choque entre las partículas del medio. La velocidad depende del tipo de medio en que se realice esta propagación tal como sólidos, líquidos o gases. Teniendo menor velocidad los gases que los líquidos y los líquidos, menor que los sólidos, esto debido a que las partículas del sólido están más unidas y firmes, lo que provoca que la respuesta sea más rápida. .

Esta onda curiosamente cumple con la función matemática seno, donde la distancia de separación de la posición de equilibrio al vibrar respecto al tiempo cumple esta representación, prediciendo de esta forma la posición que ocuparan estas partículas en el tiempo.

Page 12: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

12

4.3.- Características o cualidades del sonido

Las cuatro cualidades básicas del sonido son:

• El tono: viene determinado por la frecuencia fundamental de las ondas sonoras (es lo que permite distinguir entre sonidos graves, agudos o medios) medida en ciclos por segundo o hercios (Hz).

• La intensidad: es la cantidad de energía acústica que contiene un sonido. La intensidad viene determinada por la potencia, que a su vez está determinada por la amplitud y nos permite distinguir si el sonido es fuerte o débil.

Los sonidos que percibimos deben superar el umbral auditivo (0 dB) y no llegar al umbral de dolor (140 dB). Esta cualidad la medimos con el sonómetro y los resultados se expresan en decibelios (dB) en honor al científico e inventor Alexander Graham Bell.

• El timbre : es la cualidad que confiere al sonido los armónicos que acompañan a la frecuencia fundamental. Esta cualidad es la que permite distinguir dos sonidos, por ejemplo, entre la misma nota (tono) con igual intensidad producida por dos instrumentos musicales distintos.

• La duración: es la cualidad que determina el tiempo de vibración de un objeto. Por ejemplo, podemos escuchar sonidos largos, cortos, muy cortos, etc.

4.4.- Cómo se produce un sonido

• El sonido se produce por la vibración de las partículas. La frecuencia de vibración se mide en Hercios.

• Si un árbol se cae en medio de la selva y no hay nadie para oírlo. Desde el punto de vista físico, éste produce ruido (ya que produce ondulaciones del aire). Tomando en cuenta la acepción general de sonido, no lo produce (ya que las ondas que emite no chocarían con ningún órgano perceptor de sonido).

4.5.- Velocidad del sonido

• El sonido tiene una velocidad de 343 m/s en el aire a 20º C, pero varía con la temperatura. En cambio, depende muy poco de la presión del aire.

• La velocidad del sonido depende del tipo de material. Cuando el sonido se desplaza en los sólidos tiene mayor velocidad que en los líquidos, y en los líquidos es más veloz que en los gases. Esto se debe a que las partículas en los sólidos están más cercanas.

• No es necesario que la fuente en movimiento emita sonido para que produzca una onda de choque. Una vez que un objeto se mueve con más rapidez que el sonido, produce sonido.

Page 13: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

13

≈5000 Hierro y acero

≈4000 Madera

1200 Plomo

1498 Agua pura

343 Aire a 20ºC

331 Aire a 0ºC

≈6000 Granito

5170 Vidrio Pyrex

1541 Agua marina

Velocidad del sonido (m/s) Medio material

Formula para la velocidad del sonido en el aire donde solo importa la temperatura.

+=273

1331t

c , donde "t" es la temperatura del aire en grados Celsius.

Tabla de algunos ejemplos de velocidades de sonido donde si importa el medio y dos ejemplos de velocidades del aire a diferentes temperaturas.

4.6.- Atenuación del sonido

Respondiendo a preguntas previas.

¿El foco de un sonido de un instrumento musical es igual en cada momento?

¿Por qué las ondas al alejarse pierden fuerza?

Las ondas van debilitándose en su amplitud conforme van alejándose de su punto de origen: es lo que se conoce como atenuación de la onda. Aunque la amplitud de las ondas decrece, su longitud de onda y su frecuencia permanecen invariables, ya que éstas dependen sólo del foco emisor.

Como un ejemplo practico imaginemos nuestra televisión o bien nuestro estéreo, e imaginemos que estamos a cierta distancia, digamos 10 metros. Si tenemos necesidad de alejarnos de nuestro aparato entonces tendremos que subir el volumen para poder escucharlo como antes, o si nos acercáramos tendriamos que disminuir el volumen de este porque lo escucharíamos más fuerte. Al realizar esto vemos que en ninguno de los casos el sonido cambio, solamente el volumen se ve afectado.

En conclusión, al alejarnos del aparato, el sonido pierde fuerza en el volumen pero conserva su misma frecuencia y al acercarnos el volumen es más fuerte y también conserva su frecuencia.

Page 14: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

14

La disminución de la amplitud viene cuantificada por la Ley cuadrática inversa.

Imagen de http://es.wikipedia.org/wiki/Ley_de_la_inversa_del_cuadrado

A grandes rasgos, observa como la densidad de las líneas que emanan del foco S disminuyen conforme se alejan. La estructura de la imagen se conserva, pero la densidad no. Con el sonido entonces, el foco se escucha más fuerte por que es más denso y conforme se aleje el recetor del foco este escuchara el mismo sonido, pero con densidad menor.

Es importante considerar en este punto que el foco y el emisor se encuentran estables al momento de escuchar las diferencias, ya que existe otro efecto con las frecuencias y que es cuando el foco puede moverse. A modo de ejemplo piensa en lo siguiente:

Al acercarse una moto desde una gran distancia, escuchamos el sonido de su motor, pero es percibible cambios en el sonido al momento que se comienza a acercar o alejar y sobre todo cuando pasa al lado de nosotros, en realidad podemos distinguir si la moto se acerca, cuando se aleja y por su puesto al momento de pasar al lado de nosotros. Lo que sucede es que cuando el foco se acerca a nosotros provoca que escuchemos más comprimidas las frecuencias y cuando se aleja provoca que estas tengan un periodo ligeramente más grande.

El volumen de un sonido puede ser medido con un aparato que se llama sonómetro y que mide el número de decibeles que contiene el sonido, por lo tanto.

4.7.- Decibelio: se denomina decibelio a la unidad relativa empleada en Acústica y Telecomunicación para expresar la relación entre dos magnitudes, acústicas o eléctricas, o entre la magnitud que se estudia y una magnitud de referencia.

El decibelio, símbolo dB, es una unidad logarítmica. Es 10 veces el logaritmo decimal de la relación entre la magnitud de interés y la de referencia. El belio es el logaritmo de la relación entre la magnitud de interés y la de referencia, pero no se utiliza por ser demasiado grande en la práctica.

Page 15: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

15

El belio recibió este nombre en honor de Alexander Graham Bell, tradicionalmente considerado como inventor del teléfono.

Un belio, la unidad original, equivale a 10 decibelios. 1 B = 10 dB

Representa un aumento de potencia de 10 veces (1 es el logaritmo decimal de 10) sobre la magnitud de referencia. Cero belios es el valor de la magnitud de referencia. (0 es el logaritmo de 1). Así, dos belios representan un aumento de cien veces (2 es el logaritmo decimal de 100) en la potencia. 3 belios equivalen a un aumento de mil veces (3 es el logaritmo decimal de 1.000), y así sucesivamente. Es decir:

0 B es el valor de referencia, 1 B es 10 veces el valor de referencia, 2 B es 100 veces el valor de referencia, etc.

El sonido crea una presion determinada, la cual podemos percibir por ejemplo en una cancion que tenga muchos bajos y con un volumen alto.

4.8.- La presión La presión es medida en pascales, aunque también puede ser medida en decibeles. Un pascal tiene unidades de fuerza por unidad de área (1 Pa = 1 N/m2), y la conversión para cambiarlos por decibeles es la siguiente:

5102log*20

−×= Pa

dB

pp

La constante 5102 −× es seleccionada por que 5102 −× Pa es considerado como el umbral de lo escuchado y que es la porción de sonido mínimo en volumen que podemos escuchar. De forma que si dBp es igual a cero entonces quiere decir que tenemos el

volumen mínimo como, ya que el log (1) es igual a cero. Así como es posible describir un sonido con volumen minino, existe un máximo volumen soportado por un humano, que es lo que se conoce como umbral del dolor. La siguiente figura (obtenida del documento de Mark Petersen), muestra el grado de decibeles que contiene cada uno de los ejemplos mostrados. El valor máximo de la figura es de 120 decibeles, donde se representa el umbral del dolor por volumen. Aunque a decir verdad después de los 100 decibeles la prolongada exposición de un sonido de esta magnitud es perjudicial para cualquier humano.

Page 16: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

16

4.9.- Relación de la frecuencia con una cuerda .

Si tomamos como punto de partida una sola cuerda, la siguiente formula da una relación de sus propiedades de ésta con su frecuencia. Tales propiedades son su densidad lineal, la tensión y la longitud.

linealdensidad

tension

longitudfrecuencia

_*2

1=

La densidad lineal es la masa dividida por la longitud. La tensión es la fuerza a la que se sujeta la cuerda a ambos extremos.

Ibanez RG-370 Las cuerdas se encuentran sostenidas en ambos extremos con una determinada tensión y los diámetros de las cuerdas son casi iguales.

Al dar un pellizco en una de los cuerdas los elementos físicos de esta se mueven hacia arriba y hacia abajo en un movimiento descrito por un movimiento armónico simple, pero no se desplazan a lo largo de esta cuerda. Solo la onda se desplaza a lo largo de la cuerda con una velocidad que depende del impulso dado. Esto lo podemos interpretar de la siguiente forma: Al tocar una cuerda (de calidad aceptable) esta tiene un tono constante y no importa que tan fuerte sea tocada siempre sonara igual y solo varia la duración y el volumen. Ahora, el movimiento horizontal que es donde se desplaza la onda, depende del impulso dado y es minimizado por el choque de vuelta de la onda, esto es, al rebotar en un extremo de sujeción. De la formula descrita podemos también mencionar las siguientes afirmaciones:

• Si apretamos la cuerda (por ejemplo apretando las perillas de la guitarra), aumentara la tensión de esta, por la tanto aumentara la frecuencia. Esto por que el valor de la tensión se encuentra como un numerador en la formula.

Page 17: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

17

• Si aumenta el grosor de la cuerda, (por ejemplo si pensamos en el grosor de las cuerdas de una guitarra), aumentaría la densidad lineal por lo tanto disminuiría la frecuencia. Esto por que la densidad lineal esta como denominador en la formula.

• Si pusiéramos un dedo en un traste de la guitarra, esto disminuiría la longitud de la cuerda. Por lo tanto aumentaría la frecuencia. Esto por que es inversamente proporcional a la frecuencia en la formula.

Referencias:

http://es.wikipedia.org

http://amath.colorado.edu/outreach/demos/music/MathMusic.pdf

Page 18: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

18

Segunda parte “Definiciones”. 1.- Introducción: En esta parte se analiza que tantos sonidos podemos escuchar los humanos y una comparación con algunos animales como el murciélago, el análisis del movimiento armónico simple para obtener datos y como muestrear las frecuencias.

2.- Espectro audible o frecuencia audible

El espectro audible lo conforman las audiofrecuencias, es decir, toda la gama de frecuencias que pueden ser percibidas por el oído humano.

Un oído sano y joven es sensible a las frecuencias comprendidas entre los 20 Hz y los 20 Khz. No obstante, este margen varia según cada persona y se altera con la edad (llamamos presbiacusia a la pérdida de audición con la edad). Este rango equivale muy aproximadamente con diez octavas completas (210=1024).

3.- Frecuencias de algunos instrumentos. La siguiente grafica muestra el rango que abarcan ciertos instrumentos, donde es importante observar que estos estan dentro del rago de frecuencias audibles. A la vez tambien podemos observar que el piano es el instrumento que tiene un rango el rango de frecuencias más amplio

10

20

30

40

60

80

100

200

300

400

600

800

1000

2000

3000

4000

6000

800

1000

PIANO VIOLIN

TUBA PICCOLO

SOPRANALTO

TENOBAJO

Page 19: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

19

4.- Una octava. En música, una octava de una nota es cuando vuelve a repetirse la nota en la escala musical, por ejemplo la octava de DO la encontraríamos 8 notas después de esta (incluida esta), de la siguiente forma:

DO – RE – MI – FA – SOL – LA – SI – DO La nota Su primera octava Pero también es ocupada la palabra “octava” para referirse a la secuencia de notas de DO a SI de la siguiente forma: DO RE MI FA SOL LA SI, donde cada que se repite esta secuencia se asigna un nombre numérico a cada escala. La explicación más delante. También existe una relación con su frecuencia de 2 a 1, esto quiere decir, que la primera octava es el doble de la frecuencia de la nota en cuestión. Ósea que si la frecuencia de la primera nota fuese 55 Hz, entonces su octava tiene una frecuencia de 110 Hz. Es importante tomar en cuenta que también puede considerarse su octava más grave de forma que la frecuencia de esta octava es la mitad de la frecuencia original, donde se sigue considerando la relación de 2 a 1, pero siempre que se menciona “la octava” esta es referida al doble de la frecuencia tratada. La diferencia de estas notas es relativa a su octava correspondiente. Se parte de la nota LA con frecuencia de 440 Hz que es llamada LA CENTRAL y que corresponde a la octava 4, por lo tanto esta nota es llamada LA4. De aquí las notas cada una de las notas en la escala musical que incluyen esta nota son definidas para la octava 4 de la siguiente forma: Si esta es la nota LA4 DO – RE – MI – FA – SOL – LA – SI – DO – RE – MI – FA – SOL – LA – SI – DO

Estas notas corresponden a la octava 4. Hacia delante comienza la octava 5. Hacia atrás esta la octava 3.

Page 20: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

20

El resto de la asignación de las octavas para cada una de las notas se toma de la siguiente manera, donde inclusive se aprecian los bemoles o sostenidos:

Imagen obtenida del documento Mathematical Harmonies de Mark Petersen

Existe otro concepto utilizado en Estados unidos para asignar las octavas con otro nombre u otra asignación y que es de la siguiente manera: LA 1 � low low low A

LA 2 � low low A

LA 3 � low A

LA 4 � middle A Esta es la nota en la octava central

LA 5 � high A

LA 6 � high high A LA 7 � high high high A LA 8 � high high high high A …asi para cada nota… Este documento no toma en cuenta esta forma de especificar las octavas.

Page 21: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

21

De acuerdo a la longitud de la cuerda en la formula (en la PRIMERA PARTE), esta es inversamente proporcional a la frecuencia, por lo que podemos afirmar lo siguiente La siguiente formula representa la proporción en la que se encuentra la longitud respecto a la frecuencia.

lengthfrecuencia

1∝ ; Relación directa de la frecuencia con la longitud de la cuerda.

La siguiente figura ilustra lo que pasa al poner un dedo en un traste de la guitarra y que corresponde exactamente a la mitad de la cuerda o las siguientes proporciones. Vemos por ejemplo que la cuerda en un estado inicial o normal, corresponde a una frecuencia de 55 Hz, pero si ponemos el dedo a la mitad, entonces la frecuencia se doblaría, por lo que obtendríamos la siguiente octava. De esta forma obtenemos a modo de ejemplo las 3 primeras octavas de la nota LA1.

Nota Frecuencia Diagrama de una cuerda vibrante LA1 f = 55 Hz LA2 f = 110 Hz LA3 f = 220 Hz A central f = 440 Hz

Figura. Octavas de una cuerda

La secuencia de estas octavas forma una secuencia geométrica (55, 110, 220, 440), donde cada valor es el doble del anterior. Por lo tanto la siguiente afirmación es importante. Las frecuencias de octavas forman una secuencia geométrica. 5.- Diapasón. Imagen de Wikipedia.

1/2

1/4

1/8

Page 22: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

22

Un diapasón es una pieza en forma de U de metal elástico (generalmente acero). Cuando se le golpea haciéndolo vibrar, genera una onda sinusoidal casi inaudible dependiendo de la frecuencia (para poder escucharlo se debe acercar al oido, nunca apoyarlo en el cráneo, o amplificar apoyándolo sobre una caja de resonancia de madera, como la caja de un instrumento de cuerda, por ejemplo). El diapasón más utilizado produce una frecuencia LA4, que inclusive bajo el agua ofrece una frecuencia de alrededor de 650 Hz.

El diapasón fue inventado en 1711 por John Shore, sargento trompetero de la corte inglesa, que tenía partichelas escritas específicamente para él por George Friderich Handel y Henry Purcell.

El piano Rhodes utiliza martillos como los de un piano convencional pero que no golpean cuerdas tensas (como el piano) sino una especie de diapasones (uno por cada tecla). Esto hacía que el piano eléctrico no se pudiera desafinar nunca (ya que la afinación de un diapasón no varía con el tiempo, como sí varía la de una cuerda).

Diapasón afinado a 659 Hz. Imagen de Wikipedia.

Normalmente el diapasón se utiliza para afinar instrumentos musicales de acuerdo a una afinación concreta. El diapasón da la pauta de afinación que siguen todos los demás instrumentos.

6.- Audición de algunos animales.

“Es importante mencionar que existen diferencias entre el rango de audición entre las diferentes especies. Por ejemplo el oído de un perro puede llegar hasta los 40 Khz., mientras que el caso más interesante es el del murciélago cuyo rango de audición va desde los 10 Hz hasta los 100 Khz.”.

7.- Fuera del espectro audible:

• Por encima estarían los ultrasonidos (Ondas acústicas de frecuencias superiores a los 20 Khz.).

• Por debajo, los infrasonidos (Ondas acústicas inferiores a los 20 Hz).

Page 23: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

23

8.- División del espectro audible.

El espectro audible podemos subdividirlo en función de los tonos:

1. Tonos graves (frecuencias bajas, correspondientes a las 4 primeras octavas, esto es, desde los 16 Hz a los 256 Hz).

2. Tonos medios (frecuencias medias, correspondientes a las octavas quinta, sexta y séptima, esto es, de 256 Hz a 2 Khz.).

3. Tonos agudos (frecuencias altas, correspondientes a las tres últimas octavas, esto es, de 2 Khz. hasta poco más 16 Khz.).

En Occidente, dividimos el espectro audible en 11 secciones que denominamos octavas.

El valor máximo de las frecuencias cada octava es el doble del de la anterior.

1. La primera y segunda octava (los tonos más graves, 16 - 64 Hz). No todas las personas son capaces de percibirlos, depende de la sensibilidad del oído de cada persona.

2. La tercera y cuarta octava (tonos graves medios, 64 - 250 Hz) 3. La Quinta, Sexta y Séptima octava (tonos medios, 250 Hz – 2.000 Hz).

Contienen el tono fundamental y los primeros armónicos de la mayoría de las fuentes sonoras.

4. La octava, octava (tonos agudos, 2.000 Hz – 4.000 Hz). Comprende el margen en que el oído humano tiene mayor sensibilidad.

5. La novena y décima octava (tonos agudos de frecuencia alta, 4.000 a 16.000 Hz).

6. La undécima octava (los tonos más agudos del espectro audible, por encima de los 16.000 Hz). No todas las personas son capaces de percibirlos, depende de la sensibilidad del oído de cada persona.

La octava se puede dividir en valores más pequeños, por ejemplo: la media octava (divide cada octava en dos) y el tercio de octava (cada intervalo de la octava se divide en tres partes).

En la práctica musical occidental la octava suele dividirse en una escala cromática, compuesta por 12 semitonos que determina lo que se conoce como altura musical.

9.- Algunos fenómenos psicoacústicos

• Discriminación de frecuencias: En sonidos de frecuencias próximas, si uno de ellos tiene más intensidad enmascara al otro (esto precisamente se denomina enmascaramiento). En frecuencias próximas del mismo nivel, percibimos una frecuencia intermedia denominada interfono.

• Audición biaural : La localización de los sonidos en el espacio se consigue gracias al procesamiento por separado de la información de cada oreja y de la posterior comparación de fase y nivel entre ambas señales. Tenemos más desarrollado el sentido horizontal que el vertical de audición.

• Efecto Haas: No diferenciamos sonidos separados en el tiempo por menos de 40-50 milisegundos. En este caso el primer sonido que se produce es el que se

Page 24: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

24

percibe, y el segundo se oye como parte de éste. A partir de los 50 ns, ya se procesan como sonidos separados.

• Presbiacusia: Es la pérdida de audición con la edad.

Estas frecuencias pueden ser descritas por medio de una función senoidal por lo tanto con movimiento armónico simple. Este concepto se usa en MatLab para muestrear frecuencias.

10.- Movimiento armónico simple (M.A.S) Una partícula describe un Movimiento Armónico Simple cuando se mueve a lo largo del eje X (que representa al tiempo), estando su posición y dada en función del tiempo t por la ecuación

y(t) = Asen(ωt+φ)

donde

• A es la amplitud. • ω la frecuencia angular. (rad/s). • ω t+ϕ la fase. • ϕ la fase inicial en el instante t = 0.

El movimiento de una partícula en un movimiento armónico simple. Observe la línea curva la cual describe una porción de el movimiento de ésta por medio de la formula descrita.

Representación del movimiento de una partícula a lo largo del tiempo. Se muestra la amplitud (A) y el periodo (λ)

Page 25: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

25

Características:

• Dado que esta función esta limitada por un seno, entonces los valores máximo y mínimo que puede tomar son 1 y -1. Por lo tanto la función multiplica los valores de la amplitud A por un factor que varia desde –A hasta A.

• La función seno es periódica y se repite cada 2π, por tanto, el movimiento se repite cuando el argumento de la función seno se incrementa en 2π.

• El periodo del movimiento es el tiempo necesario para que la función complete una oscilación completa, de modo que está dada por.

w

)(2 piT = , segundos; su frecuencia es

)(2T

1

pi

wf == Hertz.

La frecuencia (f) esta medida en ciclos por segundo, mientras que la frecuencia circular (ω) tiene dimensiones de rad / s.

Algunas propiedades de la ecuación M.A.S.

• Es importante notar que, dado que la ecuación descrita anteriormente es una ecuación de posición, y se puede obtener su primer y segunda derivada; entonces es posible obtener su velocidad y aceleración, solo que pospondré estas anotaciones en caso de que en algún momento sean útiles.

He encontrado esta ecuación en diversas fuentes y en algunas ocasiones se ocupa seno y en otras el coseno, la siguiente explicación nos da el por que: Es bien sabido que existe una relación entre las funciones de seno y coseno, tal como Cos (x) = Sin (x + π /2 ), lo cual indica que si cambia en una constante el argumento del seno entonces son iguales, o por decirlo de otra forma, existe un valor de inicio en el cual la función es posible que sea igual, ya sea se utilice seno o coseno. Por lo tanto A Cos (ωt+θ) = A Sin(ωt+φ) , donde θ= φ+ π. Por otro lado si desarrollamos la siguiente ecuación; A Cos (ωt+θ) = A Cos θ Cos ωt - A Sin θ Sin ωt. Resulta una forma de representar esta ecuación a partir de la constante θ que permite cualquier combinación de senos o cósenos. Cabe destacar que en MatLab todos los datos obtenidos como muestras los he calculado en base a la función seno.

11.- La programación de un armónico simple se basa en la perspectiva de funciones discretas y se logra tomando la variable tiempo como no continua; de forma que se tomen sucesiones determinadas por un espacio reglamentado previamente y constante. Para esto se toma la frecuencia de muestreo que es la calidad con la que se muestrea la señal original (se describe más delante este concepto).

Page 26: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

26

Para nuestros fines conviene utilizar ω de la forma siguiente: A*Sin(2*π* f*t); dado que tenemos la frecuencia f.

n es una variable que cambia consecutivamente con un incremento constante. Es importante mencionar que en MatLab se ocupa una función muy adecuada y que tiene la forma siguiente:

n = (valor inicial) : (incremento) : (valor final) ;

Ejemplo en MatLab:

Así que la evaluación de la variable n en la función seno da por resultado la evaluación de la variable n por cada uno de sus elementos.

>> sin(2*pi*440*n)

ans =

1.0e-012 *

Columns 1 through 7

0 0.0314 0.0628 0.3215 0.1255 -0.0705 0.6430

Columns 8 through 9

0.4470 0.2510

Depende de que valor tomemos en el incremento para evaluar la señal, para tener la calidad de la señal. Si graficamos este ejemplo la evaluación de la señal no estará bien definida.

Grafica de los puntos evaluados utilizando la función Plot de MatLab. Ni siquiera aparenta ser un seno.

Page 27: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

27

Tal como ha mostrado la funcion anterior crea un vector fila, donde cada valor se encuentra igualmente separado por la distancia determinada.

En MatLab es sumamente útil ocupar este vector dentro de las funciones que nos convienen, como son las funciones senoidales.

En el ejemplo anterior creamos un vector “n” con un número determinado de variables. Si utilizamos convenientemente este vector podemos definir el numero de muestras de nuestro vector resultante al evaluarlo en la funcion senoidal conveniente*.

* Posteriormente en la tercera parte hablo de esto, para definir que tantas muestras tomar.

Referencias

Wikipedia

http://amath.colorado.edu/outreach/demos/music/MathMusic.pdf

http://www.sc.ehu.es/sbweb/fisica/oscilaciones/mas/mas.htm

Page 28: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

28

Tercera parte “WAV, Muestreo y Nyquist”

1.- Introducción. En esta parte examinan deferentes temas como las tarjetas de audio de las computadoras, el formato de audio soportado por MatLab, el proceso de digitalización de la señal analógica y que tanto se debe muestrear una señal por medio del teorema de Nyquist. Hasta ahora conocemos la frecuencia de muestreo, la frecuencia de la señal, entre otros; pero es necesario conocer la forma en cual se almacenan los sonidos en la computadora.

2.- Tarjeta de audio La imagen siguiente muestra una típica tarjeta de computadora, que a pesar de ser externa, algunas Mother Board incluyen la tarjeta de sonido integrada, aunque esto no limita que se puedan introducir tarjetas más avanzadas.

Tarjeta de sonido Sound Blaster Live! 5.1. Imagen de wikipedia.

La tarea principal de estas tarjetas es la entrada y salida de sonido, y son controladas por medio de algún programa de computo. Una vez que tenemos la tarjeta, es sumamente indispensable conocer como vamos a grabar los sonidos en la computadora dado que existen diferentes formatos en los que se pueden grabar estos sonidos o inclusive modificarlos una vez dentro de la computadora, por medio de algún programa dedicado a este fin.

Page 29: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

29

Un formato es algo que permite interpretar los datos en un archivo de manera adecuada. Existen diferentes formatos para diversas aplicaciones como formato para imagen, video, documentos, etc. Cabe destacar que para identificar el formato en un archivo, normalmente basta ver los 3 últimos símbolos del nombre del archivo, después del punto, por ejemplo “archivo.wav”. Los formatos de los archivos de audio son, por así decirlo, contenedores en donde se guarda una grabación de audio. Dado que existen deferentes archivos de audio, la diferencia principal entre estos son su propiedad, donde se aprecia la forma en la que almacenan los datos, capacidades de reproducción y como puede utilizarse el archivo en un sistema de administración de archivos, ósea su etiquetado. Por otro lado hay formatos de audio sin compresión como es el caso de WAV y FLAC, y también existen formatos con compresión con pérdida y sin pérdida. El formato MP3 es el formato de compresión de audio actualmente más utilizado y surge de la conversión del formato WAV mediante la compresión del mismo manteniendo una calidad aceptable, aunque con pérdida de algunas frecuencias.

3.- EL FORMATO WAV 3.1.- Descripcion. Un formato importante a tratar en esta investigación es el formato WAV. El formato WAV es un formato de archivo originario de Microsoft Windows 3.1. Lo flexible de este formato lo hace muy usado para el tratamiento del sonido pues puede ser comprimido y grabado en distintas calidades y tamaños. Los KHz van desde 11025, 22050, 44100). Los archivos en formato WAV pueden llegar a tener una calidad comparable a la del CD (16 bites y 44,1 Khz. estéreo) pero esta calidad tiene un precio en su tamaño, lo cual resulta una desventaja cuando existe la necesidad de enviar estos archivos por Internet o intentar almacenar gran cantidad de estos archivos. Es importante mencionar aunque podríamos grabar un archivo WAV con solo 4 bits y los KHz lo más bajo posible, solo que disminuiría la calidad de nuestro archivo provocando ruidos, estática e inclusive cortes de sonido.

3.2.- La parte estructural del formato wav de Microsoft El archivo esta formado por 2 bloques: la cabecera y las muestras digitalizadas de sonido. La cabecera tiene un tamaño de 44 bytes y contiene información relevante a este que corresponde a cada byte de la siguiente forma. Bytes Contenido usual Propósito/Descripción 00-03 RIFF en código ascii Bloque de identificación

Page 30: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

30

04-07 ??? Entero largo que representa el tamaño del fichero en bytes, incluyendo la cabecera

08-11 WAVE Otro identificador 12-15 fmt (más un espacio blanco) Otro identificador 16-19 16.0.0.0 Tamaño de la cabecera

hasta este punto 20-21 1.0 Etiqueta de formato 22-23 1.0 Numero de canales (2 si es

estéreo) 24-27 ??? Frecuencia de muestreo,

puede valer 11025, 22050 o 44100

28-31 ??? Numero medio de bytes/segundo

32-33 1.0 Alineamiento de bloque 34-35 8.0 Numero de Bits por

muestra (normalmente vale 8, 16 0 32)

36-39 data en código ascii Marcador que indica el comienzo de los datos de las muestras

40-43 ??? Numero de bytes muestreados

44-RESTO ??? Muestras (cuantificación uniforme)

4.- Frecuencia de muestreo

La tasa o frecuencia de muestreo es el número de muestras por unidad de tiempo que se toman de una señal continua para producir una señal discreta, durante el proceso necesario para convertirla de analógica en digital. Como todas las frecuencias, generalmente se expresa en Hz o múltiplos suyos, como el kilohercio (Khz.), aunque pueden utilizarse otras magnitudes.

Es importante tomar en cuenta el número de muestras que serán tomadas debido a que quedara definida la calidad de la señal pero también el tamaño en bits del archivo si se llega a guardar. Aquí muestro 3 imágenes; la primera es una representación de la señal continua original; la segunda tiene una frecuencia de muestreo de alguna calidad y es importante tomar en cuenta que aquí son muestras discretas de la señal continua; la tercera tiene una frecuencia de muestreo mayor.

Esta imagen representa una frecuencia (f).

Page 31: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

31

Misma frecuencia donde se observa una calidad de muestreo de cierta calidad. Aquí se observa la misma frecuencia pero con una frecuencia de muestreo mayor.

Es necesario tener una idea de que tan bien queremos muestrear nuestra señal. Existen diferentes criterior para tomar esta decisión, tal como la calidad de nuestro archivo, ya que si tiene mucha calidad se escuchara muy bien pero sera difícil mandar por Internet; si queremos que el sonido sea grabado en estéreo tendra un peso significativo, etc. MatLab ocupa como se habia mencionado una forma de obtener un vector que deteminara el numero de muestras de nuestra señal resultante y es de la forma siguiente: n = inicio : inc : final ; Los valores “inicio” y “final” son tomados como el punto inicial y final en segundos, que por lo general suena logico que inicio sea igual a cero. El valor “inc” es punto clave en la frecuencia de muestreo ya que si lo colocamos como 1/Frec_muestreo, tendremos una resolución esperada dependiendo de la frecuencia de muestreo deseada. Las frecuencias de muestreo comúnmente utilizadas son 8192 Hz, 11025 Hz, 22050 Hz y 44100 Hz. Si tenemos la evaluacion de la siguiente forma, tenemos: N= 0:1/8192:1; N tiene 8193 muestras N= 0:1/11025:1; N tiene 11026 muestras N= 0:1/22050:1; N tiene 22051 muestras N= 0:1/44100:1; N tiene 44101 muestras

Page 32: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

32

Para cada una de estas N y evaluando en una funcion senoidal de la siguiente forma: Y1 = sin (2 * π * f * N), tendriamos que el vector Y1 tiene una dimension correspondiente a N y esto por el numero de muestras tomadas de N. LA duracion de estas frecuencias dura el mismo tiempo (aproximadamente un segundo). ¿Pero como guardar o leer este tipo de archivos? Existen en MatLab funciones apropiadas para trabajar con este tipo de archivos. Guardar archivo: Los archivos son grabados con formato WAV, (descrito previamente) con la funcion wavwrite(y,Fs,filename), donde, “y” es el vector generado y que se planea grabar, “Fs” es la frecuencia de muestreo seleccionada al momento de crear la serie de muestras a partir de la funcion senoidal y “filename” es el nombre con el que se planea grabar, en formato WAV. Se puede especificar una direccion de carpetas existente en el workspace de forma que podamos dar almacenamiento apropiado a los archivos. Por ejemplo si dentro del workspace existiera una carpeta con el nombre prueba, podriamos grabar un archivo con el nombre prueba.wav de la siguiente forma filename = prueba/prueba.wav. Nota: Existen variaciones de esta funcion, pero no es el objetivo de este documento realizar una exhaustiva demostración de esta funcion. Esta función no devuelve parámetros, tan solo guarda el archivo en el workspace. Leer archivo: Los archivos de audio en forma WAV de Microsoft pueden ser leidos del workspace con la siguiente funcion: [y, Fs] = wavread(filename)

Donde, filename es el nombre del archivo y que inclusive puede tener la carpetas asociadas como explique anteriormente. Esta funcion si regresa valores que a pesar de tener diferentes formatos para este proyecto es sufiente utilizarla de la forma mencionada. Aquí “y” es el vector que contiene las muestras del sonido del archivo WAV y “Fs” es la frecuencia de muestreo asociada al mismo archivote sonido. Reproducir archivo Una vez que tenemos almacenado el archivo de audio en un vector y que tenemos o sabemos la frecuencia de muestreo, es posibles escucharlo por medio de la siguiente funcion.

Page 33: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

33

sound(y,Fs)

al igual que la función anterior existen deferentes formas de utilizar esta funcion, pero la más adecuada para este proyecto es la mencionada anteriormente. Si observamos esta función es conveniente ya que si se utilizan los parámetros adecuadamente escucharemos la funcion adecuadamente. A modo de ejemplo tenemos lo siguiente, es símbolo % es para tener comentarios.

n1 = 0: 1/ 11025 : 1 ; % vector con 11026 valores

n2 = 0: 1/ 22050 : 1 ; % vector con 22051 valores

y1 = sin (2 * π * 440 * n1); % vector y1 donde las muestras son evaluadas en 440 Hz.

y2 = sin (2 * π * 220 * n1); % vector y1 donde las muestras son evaluadas en 220 Hz.

sound(y1, 11025); % se escucha un sonido LA4 con una duracion de 1 segundo.

sound(y1, 22050); % se intenta escuchar un sonido LA4 pero la frecuencia no es la adecuada, la funcion sound reproduce el vector y1 con una frecuencia mayor, por lo tanto se reproducira el sonido mal y con una duracion menor, ya que la funcion sound busca 22050 muestars y solo encontro la mitad.

wavwrite( y1, 11025, “archivo.wav” ) % guarda como archivo WAV la serie de muestras que sabemos estan determinadas por una frecuencia de 440, almacenándolo en la ubicación del workspace como archivo.wav.

Una vez almacenado en disco y almacenado en el workspace es posible abrirlo y posteriormente editarlo con otro programa de edicion de archivos de audio WAV.

Es muy importante distinguir la frecuencia de la onda y la frecuencia de muestreo.

• La frecuencia de la onda esta asociada con una señal continua y con la frecuencia de un sonido en particular.

• La frecuencia de muestreo es una forma de tomar porciones de la señal continua convirtiéndola en discreta, es referida a la calidad con la que cuantificamos la señal y también tiene un peso en bits respecto a la misma.

Page 34: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

34

5.- Cuantificación digital

El proceso de cuantificación es uno de los pasos que se sigue para lograr la digitalización de una señal analógica.

Básicamente, la cuantificación lo que hace es convertir una sucesión de muestras de amplitud continua en una sucesión de valores discretos preestablecidos según el código utilizado.

Durante el proceso de cuantificación se mide el nivel de tensión de cada una de las muestras, obtenidas en el proceso de muestreo, y se les atribuye a un valor finito (discreto) de amplitud, seleccionado por aproximación dentro de un margen de niveles previamente fijado.

Los valores preestablecidos para ajustar la cuantificación se eligen en función de la propia resolución que utilice el código empleado durante la codificación. Si el nivel obtenido no coincide exactamente con ninguno, se toma como valor el inferior más próximo.

En este momento, la señal analógica (que puede tomar cualquier valor) se convierte en una señal digital, ya que los valores que están preestablecidos, son finitos. No obstante, todavía no se traduce al sistema binario. La señal ha quedado representada por un valor finito que durante la codificación (siguiente proceso de la conversión analógico digital) será cuando se transforme en una sucesión de ceros y unos.

Así pues, la señal digital que resulta tras la cuantificación es sensiblemente diferente a la señal eléctrica analógica que la originó, por lo que siempre va a existir una cierta diferencia entre ambas que es lo que se conoce como error de cuantificación que se produce cuando el valor real de la muestra no equivale a ninguno de los escalones disponibles para su aproximación y la distancia entre el valor real y el que se toma como aproximación es muy grande. Un error de cuantificación se convierte en un ruido cuando se reproduzca la señal tras el proceso de decodificación digital.

Page 35: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

35

6.- Teorema de muestreo de Nyquist-Shannon

Este teorema nos indica que tantas muestras es suficiente tomar para obtener de nuevo la señal original.

Función de interpolación g(t) para Fs=44100 muestras por segundo (estándar CD-Audio). Excepto para t=0, el intervalo entre pasos por cero (líneas verticales verdes) representa el intervalo entre muestras (~22,68 µs para este ejemplo).

El teorema de muestreo de Nyquist-Shannon, también conocido como teorema de muestreo de Whittaker-Nyquist-Kotelnikov-Shannon, criterio de Nyquist o teorema de Nyquist, es un teorema fundamental de la teoría de la información, de especial interés en las telecomunicaciones.

El teorema trata con el muestreo, que no debe ser confundido o asociado con la cuantificación. Dicho de otro modo, desde el punto de vista del teorema, las muestras discretas de una señal son valores exactos que no han sufrido redondeo o truncamiento alguno sobre una precisión determinada.

El teorema demuestra que la reconstrucción exacta de una señal periódica continua en banda base a partir de sus muestras es matemáticamente posible si “la señal está limitada en banda” y “la tasa de muestreo es superior al doble de su ancho de banda”.

Dicho de otro modo, la información completa de la señal analógica original que cumple el criterio anterior, está descrita por la serie total de muestras que resultaron del proceso de muestreo. No hay nada, por tanto, de la evolución de la señal entre muestras que no esté perfectamente definido por la serie total de muestras.

Si la frecuencia más alta contenida en una señal analógica )(tX a es BF =max y la señal

se muestrea a una tasa BFFs 22 max ≡> , entonces la señal original se puede recuperar

totalmente a partir de sus muestras.

Una vez grabado el sonido es necesario saber como tratar con este tipo de archivo por lo tanto estas definiciones serán de utilidad.

Page 36: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

36

7.- Primer acercamiento sobre trato de archivos Diferencias entre mono y estéreo. Cuando se ha grabado en mono cada muestra se graba de forma consecutiva y cuando se graba en estereo se almacena de forma alternada una muestra de cada canal.

Cálculos básicos sobre archivos de audio Modificación del volumen. Este cambio se logra al multiplicar todas las muestras por un factor, el cual, si resulta ser mayor que 1 entonces aumenta el volumen y si es menor a 1 y mayor que cero, entonces, disminuye este volumen. Suma de sonidos. Para poder realizar la suma de sonidos basta multiplicar por un factor menor a 1 cada sonido, de forma que la suma de los factores sea igual a la unidad. Desvanecer (Fade out) e Intensificar (Fade in). Para poder aplicar un desvanecimiento es necesario aplicar cambios al volumen de forma que al comienzo de esta aplicación el volumen sea del 100% y terminar en 0%. Dicho de otra forma, es multiplicar la primera muestra por un factor de 1 la siguiente por algo más pequeño que este factor y así sucesivamente hasta 0. Tal formula es la siguiente, observe como el primer valor vale 1 y el ultimo 0.

1_,..,2,1,0,_

_ −=−muestrasnumx

muestrasnum

xmuestrasnum

Para poder realizar una intensificación que resulta contrario a la formula anterior ya que el factor de multiplicidad se da desde 0 hasta 1.

1_,..,2,1,0,_

_ −= muestrasnumxmuestrasnum

muestrasnum

Eco. Resulta similar a la suma de sonidos pero aquí la suma se da con una parte del mismo archivo. Esta definición aunque no es exacta da una idea de cómo realizarla. Referencias Wikipedia.

Page 37: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

37

Cuarta parte “Fourier y armonicos”

1.- Introducción

Comprendidos estos conceptos, entonces el paso siguiente es el análisis de la señal correctamente muestreada, de forma que debemos tener herramientas para separar un sonido complejo (que es la suma de armónicos simples) en frecuencias simples de forma que pueda ser analizado.

Este análisis es realizado con el trabajo de Jean-Baptiste Joseph Fourier

Imagen de Wikipedia

Jean-Baptiste-Joseph Fourier (21 de marzo 1768 en Auxerre - 16 de mayo 1830 en París), matemático y físico francés conocido por sus trabajos sobre la descomposición de funciones periódicas en series trigonométricas convergentes llamadas Series de Fourier, método con el cual consiguió resolver la ecuación del calor. La transformada de Fourier recibe su nombre en su honor. Fue el primero en dar una explicación científica al efecto invernadero en un tratado. Se le dedicó un asteroide que lleva su nombre y que fue descubierto en 1992.

Page 38: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

38

La comparación de la coclea o caracol del oído interno con las series de Fourier es importante ya que desde el punto de vista acústico y matemático el trato del sonido es similar. Recordando la función de la coclea sabemos que dentro de esta reside el órgano Corti, que es un conjunto de células ciliadas o por así compararlas son un conjunto de pelillos cuales vibran a determinadas frecuencias simples y que juntas son la suma de la señal original. Matemáticamente la serie de Fourier realiza la misma función, descomponiendo la señal original en frecuencias simples.

Tal como se muestra en esta imagen, la suma de la dos primeras frecuencias dan por resultado la señal de la parte inferior o dicho de otra forma, la descomposición de la señal inferior da por resultado las dos frecuencias simples mostradas en la parte inferior.

Fourier desarrollo una teoria sobre conducción de calor, para la cual necesito las series trigonometricas que tienen unos coeficientes ingeniosamente determinados por el, los coeficientes de Fourier. Estas series son periodicas con periodo 2 π, aunque es posible modificarlo. Una funcion periodica esta definida de la siguiente forma: Sea f(t) definida para toda t > 0 y T > 0, f es periodica con periodo T. f(t + T) = f(t)

Page 39: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

39

2.- La serie de Fourier.

Sea la función f(t) una función periódica de periodo T, la cual se puede representar por medio de la serie trigonométrica de la siguiente forma:

∑∞

=++≈

10 ))()cos((

2

1)(

nnn t

T

nsenbt

T

naatf

ππ

na y nb son los llamados “coeficientes de Fourier” y que toman valores de acuerdo a

las siguientes formulas:

dttT

ntf

Ta

T

Tn )cos()(1 π∫−= , dtt

T

ntf

Tb

T

Tn )sin()(1 π∫−= dttf

Ta

T

To ∫−= )(1

Por la identidad de Euler, estas formulas pueden expresarse también en su forma compleja.

∑∞

−∞=

≈n

tT

ni

nectfπ

)( , t

T

niT

Tn etfT

cπ−

−∫= )(2

1

La serie de Fourier sirve para señales continuas y dado que estamos trabajando con muestras discretas, debemos utilizar otro formulismo adecuado para muestro interés, tal es el caso de la transformada discreta de Fourier.

Para facilitar el análisis de un sonido genérico debemos descomponerlo en el conjunto de armónicos simples que lo forman, ya que sus intensidades y frecuencias nos informan de las características del sonido original. 3.-Transformada discreta de Fourier

La trasformada de Fourier debe ser discreta para los fines ocupados en esta investigación de forma que se puedan obtener muestras puntuales de la señal original. De forma que TDF es la transformada discreta de Fourier. La descripción de la formula y los conceptos de esta se muestran a continuación.

N

nkjN

k

ekTmNNT

nF

∏−−

=∑=

21

0

)(1

n = 0,1,…, N-1

Page 40: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

40

N es el número de muestras a analizar (es un dato arbitrario). También conocido como resolución espectral. T es el periodo de muestreo (recordar que el inverso es la frecuencia f). También conocido como ancho de banda. n es el índice de la frecuencia y que tal valor es el que deseamos obtener m (kT) indica la muestra tomada en el instante kT (muestras discretas)

La expresión exponencial N

nkj

e∏

−2

representa un número complejo en coordenadas polares del siguiente tipo: θjer • = r* (cosθ+j*senθ), donde ‘r’ es el modulo y ‘θ’ el argumento, tal que al

compararlo con la expresión original r=1 y θ= N

nk∏2, por lo que:

N

nkj

e∏

−2

= cos

∏−N

kn2 + j * sen

∏−N

kn2

Lo cual indica que tenemos un numero complejo girando en el circulo unidad con una velocidad angular θ=2πn con saltos discretos k/N. Es importante destacar que la parte real del complejo representa la semejanza entre señal y el coseno, y que la parte imaginaria se refiere al seno. La función del sumador sirve como un comparador ya que al multiplicarlo por valores seno o coseno parecidos a la muestra original, el resultado resulta alto por la misma similitud de los datos. Con datos similares positivos el resultado se hace más positivo, lo mismo que con los negativos; pero si los datos no son parecidos al seno o coseno, entonces el resultado final el parecido a cero, por lo tanto no es tomado en cuenta. Este es un principio importante para comprender el funcionamiento básico de la transformada de Fourier. Dicho comparador es el modulo y es igual a

Page 41: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

41

22 ImRemod += 4.- La FFT En MatLab tenemos definida la función fft, que es la abreviación de la “Transformada Rápida de Fourier” en ingles Fast Fourier Transform. Esta función evalúa eficientemente la transformada discreta de Fourier TDF de orden O (n²) en un orden O(n log n) Tiene las siguientes definiciones en MatLab. FFT(X) es la TDF del vector X. Si X es una matriz la FFT evalúa cada columna. FFT(X, N) es el numero de N puntos evaluados en la FFT donde se agregan ceros si X es menor que N y es truncado si pasa lo contrario. El archivo espectro.m ejemplifica la utilización de esta función. Aquí se puede apreciar que el vector X tiene un tamaño de 24352 y N solamente 256 por lo que X quedo truncado. Se muestra la frecuencia de muestreo y el archivo de audio WAV seleccionado. El espectro mostrado indica las respectivas frecuencias base del archivo,

Page 42: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

42

5.- Los armónicos. Es interesante notar como los instrumentos al tocar una sola nota tienen un timbre distinto. Por ejemplo, podemos distinguir claramente un violín de una guitarra. Esto es debido a las distintas armonías que acompañan al sonido interpretado por el instrumento, ya que si tuviéramos la oportunidad de observar la vibración de la cuerda con lujo de detalle, esta tendría a su vez distintas frecuencias acompañadas que corresponden a estas armonías. Existen diferentes armonías y estas son obtenidas a partir de la frecuencia original de la siguiente manera: La primera armonía corresponde a la frecuencia de la nota fundamental. La segunda armonía corresponde al doble de la frecuencia fundamental. La tercera armonía corresponde al triple de la frecuencia fundamental. . . . La octava armonía corresponde a 8 veces la frecuencia fundamental. Etc. Ejemplo de las armonías de la frecuencia 55 Hz correspondiente a la nota LA1.

Nota Frecuencia Armónico Diagrama de cuerda vibrante

LA 1 f = 55 Hz fundamental LA 2 f = 110 Hz segunda E3 f = 165 Hz tercera LA 3 f = 220 Hz cuarta C# central f = 275 Hz quinta E central f = 330 Hz sexta aprox. G central f = 385 Hz séptima M A central f = 440 Hz octava Armonías de una cuerda vibrante

1/2

1/3

1/4

1/5

1/6

Page 43: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

43

Estas frecuencias forman una secuencia aritmética (55, 110, 165, 220, 275, 330, 385, 440) donde una constante es sumada a cada término. Esta constante corresponde a la frecuencia principal. De aquí que la siguiente afirmación sea importante. Las frecuencias de armónicos forman una secuencia aritmética. Estos armónicos tienen relación con la nota principal, al sonar de forma agradable al ser tocados al mismo tiempo o dicho de otra forma, no son disonantes. En la música un acorde es la combinación adecuada de notas diferentes para producir un solo sonido como la suma de estos. Estos armónicos forman un acorde mayor de la nota fundamental, en este caso tendríamos el acorde LA mayor que es formado por su tercera mayor y su quinta *. * Este documento no trata los diferentes acordes que se pueden formar, solo se menciona este acorde mayor, para tener una referencia adecuada de los armónicos. 6.- Armónicos en instrumentos.

Ahora que examinamos una cuerda toca el turno de examinar un tono de algún instrumento. Esta necesidad surge para explicar el hecho de comprender como es posible que dos instrumentos diferentes, por ejemplo una guitarra y una flauta, tienen timbres diferentes al tocar la misma nota con determinada frecuencia.

En MatLab podemos muestrear las presiones de la señal que previamente se había guardado con la ayuda de algunas funciones, tales como: La función wavread(“archivo.wav”), donde archivo.wav es el nombre del archivo de audio que deseamos abrir y que se encuentra en el workspace. Devuelve ciertos valores, pero para nuestro uso solamente es importante tomar en cuenta un retorno de la forma [y fs], donde ‘y’ es un vector columna que contiene todas las muestras de la señal y ‘fs’ es la frecuencia de muestreo. Esta forma es práctica para nuestros fines ya que son los únicos valores relevantes a considerar, al menos hasta ahora. El muestreo de las muestras discretas es logrado con la función Plot. Su definición se explica en el tutorial de funciones relevantes de MatLab que forma parte de este proyecto.

Page 44: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

44

A modo de ejemplo, la siguiente grafica representa una porción de un sonido de una guitarra tocando el tono LA4.

Figura obtenida con la función Plot de MatLab 7.4. Representa un tono LA4

Podemos alcanzar a apreciar intuitivamente como la señal es periódica. Aunque cuando ponemos más atención existen pequeñas variaciones importantes a considerar y que demuestran la existencia de armónicos presentes, así mismo como la calidad con la que fue grabado depende de muchos factores, donde los más relevantes a considerar son la tarjeta de audio con la que fue grabado el sonido, el algoritmo de captura con el que fue digitalizada la señal, las pequeñas imperfecciones de la cuerda, así mismo como factores externos tal como la presión del aire, la presión atmosférica e inclusive polvo y la corriente con la que se genero esta grabación. Estas pequeñas imperfecciones no son muy percibidles por el humano, a excepción de los armónicos presentes, tomando mas en cuenta a los altos armónicos.

Page 45: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

45

La siguiente figura muestra las presiones de 3 instrumentos, donde podemos observar el periodo de la figura y vemos que es aunque es periódica la señal esta presenta variaciones que corresponden a sus altos armónicos.

Estas altas armonías pueden ser vistas cuando el volumen de cada una es representado de la siguiente manera.

FLUTE

OBOE

VIOLIN

FLAUTA

OBOE

VIOLIN

Page 46: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

46

Estos datos son calculados por medio de la transformada discreta de Fourier y representan la porción en la que se encuentra cada alto armónico, donde la suma de cada porción de estos armónicos pueden formar de nuevo el sonido original. Se observa como cada sonido tiene diferentes porciones de armónicos y es aquí la razón de un timbre diferente para cada sonido. Referencias.

http://amath.colorado.edu/outreach/demos/music/MathMusic.pdf

Wikipedia

Page 47: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

47

Quinta parte “Filtros Digitales”

1.- Introducción. En términos generales un filtro en una caja negra que tiene un conjunto de entradas y salidas en forma de vector (para el caso de este proyecto) y que no necesariamente son del mismo tamaño. La caja negra realiza un procesamiento de la señal de entrada por lo que la salida depende de esta.

La imagen representa una señal de entrada cualquiera; la señal entra al filtro y se obtiene “la señal filtrada”. Para que se justifique el costo de un filtro la salida debe ser, de alguna manera, más útiles o interesantes que la entrada. Las 2 principales razones por las que debemos considerar un filtro son:

• Mejorar la calidad de la entrada. • El procesamiento o extracción de información a partir de la entrada.

En el primer caso, podemos imaginar que tenemos una grabación que realizamos con un micrófono de baja calidad como el de una computadora y por lo tanto tenemos señales indeseadas o comúnmente dicho “ruido”. El filtro entonces, tiene la función de dejar pasar únicamente las partes de la señal que deseemos o al menos la mayoría deseada para que el resultado de este filtraje sea la misma grabación pero con mejor calidad. El procesamiento de la señal es sumamente interesante y amplio. En lo personal antes de realizar este proyecto tuve la oportunidad de trabajar con un filtro enorme cuando

Page 48: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

48

tocaba mi guitarra eléctrica. Utilice un procesador de multi-efectos efector como el GNX-4

Procesador GNX-4 de digitech Imagen obtenida de http://www.digitech.com/

La función de este aparato es dar otro sonido al original. Las cuerdas de una guitarra en realidad son de metal y tienen un timbre clásico y reconocible. Al tener este aparato podemos realizar por ejemplo un eco al pellizcar a la cuerda o inclusive muchos ecos. Tiene muchos efectos que no tiene caso mencionar.

Del mismo modo podemos imaginar la forma del cuerpo de una guitarra acústica. ¿Cómo se escucharía el sonido de una cuerda si no tuviese esta caja? Este filtro es llamado filtro acústico.

“Con los filtros es posible modificar la señal de entrada en diversas formas”. Es importante mencionar que la salida depende del filtro a utilizar.

2.- Filtros analógicos y digitales.

Dada la naturaleza del filtro lo podemos clasificar como analógico o digital. Los filtros analógicos están basados en transistores y resistencias, mientras que los digitales son simulados por un programa de software.

La modificación de la salida depende de el tipo de filtro que se este manejando.

Como ejemplo de filtro de filtro analógico podemos pensar en el control de modulación de un estéreo no digital al tratar de sintonizar una frecuencia de radio, o bien, el ecualizador de este al tener una forma de ecualizar bajos, medios o agudos. Efectos incluidos en este radio también pueden considerarse como filtros, tales como reverberators, eco de dispositivo, desfasadotes, crossover e inclusive el altavoz. En este caso ya estamos hablando de filtros de audio.

Page 49: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

49

La diferencia principal entre los tipos de filtros analógicos con los digitales es que los analógicos funcionan por medio de señales continuas mientras que los digitales como es de esperar, tratan con un algoritmo que toma una secuencia de números de entrada (que es la señal de entrada) y produce una nueva secuencia (la señal filtrada) que no necesariamente es del mismo tamaño.

Cuando hablamos de filtros digitales las señales tratadas deben ya estar en el ordenador y en memoria de forma que sea posible tratar con ellas. Normalmente al hablar de de filtros digitales no referimos al procesamiento de audio.

Conforme el avance de la tecnología lo ha permitido, el uso de los filtros digitales ha sido cada vez más una mejor opción, dado que el costo de ellos se reduce a escribir cierto número de líneas sin costo en materiales electrónicos.

Por otro lado también existen los filtrados indeseables, por ejemplo cuando no podemos escuchar bien la señal de nuestro radio, ya sea por que tiene ruido o interferencia o inclusive hasta llega a chocar con otra señal. Una mala acústica por la habitación en que nos encontramos, entre otros.

En este proyecto y como es de esperarse, solamente trabajo con filtros digitales.

3.- Filtros recursivos y no recursivos

Un filtro no-recursivo es aquel cuya salida está calculada exclusivamente a partir de valores de entrada, donde Xi es el conjunto de las entradas con i <= n. Por lo tanto:

Yn = Xn + Xn-1 + Xn-2... + Xo

Mientras que uno recursivo es aquel que además de los valores de entrada emplea valores previos de salida, donde Yi es el conjunto de salidas con i <= n. Por lo tanto:

Yn-1, Yn-2,... ,Yo

La parte recursiva es interesante en estos cálculos ya que un dato procesado es vuelto a procesar, dependiendo del algoritmo. Literalmente la palabra recursivo quiere decir volver hacia atrás y se refiere a que cierta salida procesada es de nuevo procesada con el algoritmo.

Los filtros no-recursivos se conocen como filtro FIR (Respuesta al Impulso Finita) y los recursivos como filtros IIR (Respuesta al Impulso Infinita).

Al tratar con el valor de “n” debemos asumir que los sistemas son causales y que no depende de las entradas futuras. Además n esta relacionada con el tiempo y dado que no existe el tiempo negativo x(n)=0 para toda n<0;

Page 50: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

50

4.- Filtro digital FIR - Finite Impulse Response (Respuesta al Impulso Finita)

Es un tipo de filtro digital y para obtener la salida sólo se emplean valores de la entrada actuales. También se llaman filtros digitales no-recursivos.

Su expresión en el dominio discreto es:

y[n] = b0x[n] + b1x[n − 1] + b2x[n − 2] . . . , n = 0, 1, 2, . . . ,

El orden del filtro está dado por N, es decir, el número de coeficientes. También la salida puede ser expresada como la convolución de una señal de entrada x[n] con un filtro h[n]:

La estructura de un filtro FIR por tanto es la siguiente:

La cual puede verse reflejada en la aplicación de la transformada Z:

Se puede ver que es la misma entrada retardada cada vez más en el tiempo, multiplicada por diversos coeficientes y finalmente sumada al final.

5.- Filtro digital IIR - Infinite Impulse Response (Respuesta al Impulso Infinita)

Es un tipo de filtro digital. La salida será un número ilimitado de términos no nulos, es decir, que nunca volverá a un estado de reposo. Para obtener la salida se emplean valores de la entrada actual y anteriores, además, los valores de salida anteriores que son

Page 51: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

51

almacenados en memoria y realimentados a la entrada. También se llaman filtros digitales recursivos. Su expresión en el dominio discreto es:

El orden del filtro está dado por el máximo entre P y Q. Una de las posibles estructuras para un filtro IIR es la siguiente:

Se puede ver cómo la salida y(k) es introducida de nuevo en el sistema. La transformada Z del mismo es:

Existe un problema potencial con este denominador ya que si resulta ser cero puede causar inestabilidad en el sistema.

Las ventajas de los filtros IIR respecto a los FIR es que pueden conseguir una misma respuesta empleando un número de coeficientes en el filtro mucho menor, requiriendo un menor tiempo de cálculo. El inconveniente es, además de la inestabilidad ya comentada, la introducción de desfases en la señal, que pueden ser compensados pero a costa de añadir más coeficientes al filtro.

Page 52: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

52

6.- Transformada Z

En las matemáticas y procesamiento de señales, la Transformada Z convierte una señal que esté definida en el dominio del tiempo discreto (que es una secuencia de números reales) en una representación en el dominio de la frecuencia compleja.

La Transformada Zeta es una aplicación entre un espacio de Sucesiones (funciones discretas) y un espacio de Funciones Analíticas (desarrollables en serie de Laurent).

La importancia del modelo de la Transformada Zeta radica en que permite reducir Ecuaciones en Diferencias o ecuaciones recursivas con coeficiente constantes a Ecuaciones Algebraicas lineales.

Imagen obtenida de http://examenesutn.awardspace.com/examenes/Ansenalesysist/apuntes/TransformadaZ(UBA).pdf

La transformada Z unilateral de una señal definida n el dominio del tiempo discreto y n>0 es una función X(Z) tal que:

donde n es un entero y z es, en general, un número complejo de la forma

z = Aejω, donde A es el módulo de z, y ω es la frecuencia (o ángulo en radianes). Un conveniente de la transformada z es dado por el teorema de corrimiento.

)(][ zXznx ∆−↔∆−

Page 53: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

53

Por que dice que la línea de retardo de muestras en el dominio del tiempo corresponde a una multiplicación por z-∆ en el dominio de z. Por el teorema de corrimiento nosotros podemos fácilmente calcular la transformada z de una ecuación diferencial. Dada la siguiente ecuación diferencial de segundo grado.

]2[]1[]2[]1[][][ 21210 −−−−−+−+= nyanyanxbnxbnxbny

La transformada z puede ser inmediatamente escrita.

][][][][][][ 22

11

22

110 zYzazYzazXzbzXzbnXbnY −−−− −−++=

De esta expresión, podemos obtener la función de transferencia )(

)()(

zX

zYzH = del filtro.

22

11

22

110

1)(

)()( −−

−−

++++

==zaza

zbzbb

zX

zYzH

7.-Polos y ceros de la transformada Z Después de encontrar la transformada Z del sistema, uno puede usar la información del polinomio para representar la función gráficamente y así observar sus características. La transformada-z tendrá la siguiente estructura:

)(

)()(

zX

zYzH =

Los dos polinomios, Y(z) y X(z), nos dejan encontrar los polos y ceros de la transformada-z. Definición de ceros y polos. Ceros. 1. Valor(es) de z, donde Y(z) = 0. 2. Las frecuencias complejas que hacen que la ganancia de la función de transferencia del filtro sea cero. Polos. 1. Valor(es) de z donde X(z) = 0. 2. Las frecuencias complejas que hacen que la ganancia de la función de transferencia del filtro sea infinita. Por lo tanto los ceros y los polos son las raíces del polinomio del numerador y denominador respectivamente.

8.- El plano Z. Después de encontrar los polos y ceros de una trasformada Z, se pueden graficar en el plano-z. El plano-z es un plano complejo con ejes reales e imaginarios para la variable

Page 54: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

54

compleja de Z. La posición del plano complejo es dada por θire y el ángulo se da del lado positivo del eje real del plano y se escribe θ. Al graficar los polos y ceros, los polos son mostrados con "x" y los ceros con "0".

Imagen obtenida de http://cnx.org/content/m12966/latest/

Una de las motivaciones pora analizar los polos y ceros es porque la relación entre estos nos da una relación con la respuesta de la frecuencia del sistema. Determinando la posición de los polos y ceros podemos rápidamente determinar la respuesta de la frecuencia. La relación principal es la distancia en la que se encuentran los polos y ceros a la región del perímetro del radio. Estas propiedades resumen el comportamiento matemático del sistema al considerar que nos podemos acercar por el círculo unitario al rodearlo.

• Si es cercano a un cero, entonces la magnitud es pequeña. Si un cero esta sobre el circulo unitario, entonces la respuesta en frecuencia es cero en ese punto.

• Si es cercano a un polo, entonces la magnitud es grande. Si un polo está sobre el círculo unitario entonces la respuesta en frecuencia en ese punto es infinito.

Antes de continuar debemos poner a H(z) en términos de números complejos de la siguiente forma:

∑ ∑

∑ ∑

∑∞

=

=

=

=∞

=

=

++

−=

+=

1 1

0 0

1

0

)()cos(1

)()cos(

1)(

i iii

i iii

i

jwii

i

jwii

wisenbjwib

wisenajwia

eb

ea

wH

La respuesta en frecuencia de la función compleja w posee parte real e imaginaria, por lo que se puede separar en la respuesta de magnitud e incluso fase.

Page 55: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

55

Respuesta de la magnitud.

22 )(Im)(Re|)(| wHwHHz +=

Respuesta de la fase.

)(Re

)(Imtan)( 1

wH

wHw −=φ

Ejemplo.

wewH

zzH−

+=+=

1)(

1)( 1

La figura muestra el valor de “cero” obtenido. A variar ω aleatoriamente entre 0 y 2π podemos apreciar que cuando ω=0, la distancia al circulo unitario el la mas grande y conforme cambia comienza a decrecer. La siguiente figura muestra la respuesta en frecuencia a partir de este hecho, donde en ω=0 tenemos el valor mas grande y disminuye hacia cualquier lado.

Imagen obtenida de http://cnx.org/content/m10548/latest/ 9.- Trabajando con MatLab. MatLab es una poderosa herramienta computacional de cálculo y tiene definidas diversas funciones para filtros y aunque no podré analizar todas en detalle las mostradas aquí bastaran para un análisis intrínsecamente adecuado.

Page 56: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

56

9.1.- y = filter(b,a,X)

Esta función esta diseñada a partir del siguiente diagrama de bloques, donde los coeficientes están definidos en términos de la nomenclatura de MatLab, donde el primer elemento del vector b0 en MatLab representa la posición b(1) del vector. La función contempla los 2 tipos de filtros. Para un filtro FIR basta poner al componente recursivo como 1.

Esta función recibe 3 parámetros; el parámetro “b” y el parámetro “a” definen cada uno, un vector fila que contiene los coeficientes del numerador y denominador de función transferencia de la forma:

)(...1

...)(

22

11

22

110 zX

zaza

zbzbbzY

++++++

= −−

−−

Generalmente es común crear a cada vector como si estuviera inicialmente lleno solo con ceros para que posteriormente se inicialicen únicamente los coeficientes utilizados. Esto se logra por medio de la función zeros de MatLab. Por ejemplo si tengo y(n) = x(n) + d x(n – D), debo crearlo como. b = zeros(1, D+1) El primer argumento de la función zeros siempre debe ser 1 por que define el número de filas. El segundo argumento define el número de ceros que necesito. La llamada a la función regresa D+1 ceros, donde agregamos 1 de más ya que debo considerar a b0. Es importante considerar que aquí el valor “d” que es el coeficiente xD y debe tomar un valor constante, por lo tanto la llamada siguiente inicializa solo este valor.

Page 57: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

57

b(D+1) = 0.5; Además del primer valor b(1)= 1; Con esto solo este coeficiente toma el valor deseado, aunque pudo haber tomado cualquier otra constante. De igual forma para el vector “a”. El tercer coeficiente es el vector que contiene la señal original y que pasara por este filtro. La función regresa el vector resultante o mejor dicho “la señal filtrada”.

9.2.- b = fir1(n,Wn,ftype)

Esta función regresa los coeficientes de un filtro FIR. Aquí en realidad solamente debemos indicar a la función que deseamos para que nos regresen los coeficientes necesarios sin necesidad de ningún cálculo importante; en realidad esta función hace todo por nosotros de una forma muy apropiada. El argumento “n” especifica el número de coeficientes que necesito para el filtro. Este valor en realidad nos proporciona la calidad o discriminación del filtro ya que si suponemos que este valor sea muy pequeño, el número de coeficientes puede ser muy pequeño para definir lo necesario. Por lo contrario, si es muy grande, entonces será muy estricto. La función regresa n+1 coeficientes. * Gráficamente se observa mejor, solo que pospongo las graficas y comentarios hasta la función freqz. El valor Wn es un argumento sumamente importante por lo que recomiendo mucha atención al lector. Respecto al número de frecuencias muestreado, donde el máximo es fs/2. Tenemos una ventana en donde vamos a clasificar o discriminar las frecuencias. En este rango se encuentran todas las frecuencias, pero debo decidir en este filtro cuales pasan y cuales no. Wn toma solo valores entre 0 y 1, donde 1 corresponde a la frecuencia de Nyquist. Si Wn es un vector con varios elementos, Wn = [w1 w2w3 w4 w5 ... wn], este vector debe estar definido como 0 < w1 < w2,..., wn < 1. El argumento ftype define el tipo del filtro como:

Page 58: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

58

‘high’: un filtro que deja pasar frecuencias hasta Wn ‘stop’: un filtro que detiene frecuencias hasta Wn. Al momentio de graficar tenemos una frecuencia fs , por lo que el eje x tiene solamente fs/2 frecuencias posibles. Además es útil mencionar que el filtro tiene n +1 coeficientes. Lo que da cierta tendencia de crecimiento o decrecimiento a la grafica, por lo que si ese numero fuese mayor tendríamos una tendencia menor, pero si fuera muy grande, tendríamos un una tendencia muy cerrada y la grafica tendría una forma de un escalón. Dado que Wn es un vector fila es obvio que puede contener más de 1 elemento. La combinación resultante en el filtro en alternada entre cada par. Por ejemplo si tenemos Wn = [w1, w2, w3, w4], la llamada: h=fir1(n,Wn ], 'high') producirá un intercambio entre pasar y no dejar pasar algunas frecuencias. 0 < w < w1. No Pasara las frecuencias entre el porcentaje w1 < w < w2. Pasara las frecuencias entre el porcentaje w2 < w < w3. No Pasara las frecuencias entre el porcentaje w3 < w < w4. Pasara las frecuencias entre el porcentaje w4 < w < 1. No Pasara las frecuencias entre el porcentaje

9.3.- freqz

Esta función tiene el objetivo de proporcionar información del filtro. El primer uso de esta función es que proporciona la respuesta en magnitud y fase a partir vector de coeficientes propuesto. Dado un vector propuesto para un filtro FIR, elaborado por cualquier camino, su respuesta en frecuencia y fase es dada por la llamada.

freqz(h), donde h es el vector de coeficientes definido como por la funcion fir1:

La fase también brinda información, solo que es muy poco significante, dado que un movimiento en la fase es prácticamente insignificante. Recordemos que trabajamos con una función de trasferencia y que matemáticamente fue posible obtener la respuesta de la magnitud y de la fase. Ésta función grafica esta información. El segundo uso de esta función es regresar 2 valores que sirven de información para graficar como en los ejemplos de la función fir1. Tiene la forma. [H,f] = freqz (h,Y,X,fs);

Page 59: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

59

Argumentos de la función:

• h, es el vector de coeficientes del filtro FIR. • Y, es la escala del eje Y, donde el valor muestreado máximo es 1/Y. • X, es el número de valores a muestrear en grafica sobre el eje X. • fs, es la frecuencia de muestreo de la señal.

Note como en realidad es tan importante la frecuencia de muestreo, ya que si tenemos una serie de valores un filtro paso bajo a 25 % y un fs = 8000, solo pasaran frecuencias de 0 Hz a 1000 Hz, pero si la frecuencia fs fuese 4000, solo pasarían frecuencias inferiores a 500 Hz. Imagine que pasaría con una frecuencia de muestreo fs de 44100 o mayor. La función regresa valores sumamente interesantes. H, es un vector con números complejos que en realidad corresponde a la magnitud de la determinada frecuencia. La magnitud se obtiene elevando al cuadrado el número complejo. f, que corresponde a cada una de las frecuencias tratadas, pero con el limite impuesto por el numero de términos en el eje X.

9.4.- zplane(B,A)

Esta función grafica en el plano Z. Toma como argumento dos vectores que corresponden a los coeficientes del numerador y denominador de la función de transferencia. Tiene por objetivo graficar las raíces del numerador con un ‘o’ que representa un zero y las raíces del denominador con una ‘x’ que representa un polo. La grafica incluye el círculo de circunferencia. Recuerde que este plano es para dar una rápida interpretación del comportamiento del filtro observando los zeros y polos, aunque en mi forma de pensar, si utilizamos la función fir1 y llegamos a definir por ejemplo, 100 coeficientes, l grafica del plano Z será en realidad confusa.

h=fir1(60,[0.25], 'stop'); zplane(h,1); Observe como la grafica depende únicamente de valores del filtro ya que al momento de filtrar señales es un hecho importante.

Page 60: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

60

roots Esta función devuelve las raíces de un polinomio, solo que ¿Cómo definir polinomios en MatLab? La respuesta a esto con el siguiente ejemplo: Con el polinomio s3+5s2+8s+3=0, puede ser escrito como p=[1 5 8 0] y sus raíces calculadas con la función roots. Antes de calcularlo debemos saber que obtendremos 3 raíces con la posibilidad de obtener raíces complejas ya que el polinomio es de grado 3. >> p=[1 5 8 0]; >> roots(p) ans = -2.2328 + 0.7926i -2.2328 - 0.7926i -0.5344

conv

Sirve para calcular el producto de polinomios. Por ejemplo (x2+2)*(x2-2) >> p=[1 2]; >> conv(p,p) ans = 1 4 4

Estas funciones son de gran utilidad en el desarrollo de filtros de la parte siguiente donde en base a estos filtros se lograra tener efectos acústicos como eco o coros, o bien filtros de frecuencias. Bibliografia Introduccion a los filtros digitales. Autor: Jesus Barrios Romano. Universidad Autonoma Metropolitana. Digital Filters second Edition. Autor: R.W. Hamming Editorial: Prentice Hill Digital Signal Procesing Autor: John G. Proakis Editorial: Prentice Hill Referencias de Internet.

Page 61: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

61

http://examenesutn.awardspace.com/examenes/Ansenalesysist/apuntes/TransformadaZ(UBA).pdf http://es.wikipedia.org/wiki/Transformada_Z http://cnx.org/content/m12966/latest/ http://matematicas2007tecoaxaca.blogdiario.com/img/Curso_rapido_de_matlab_7.pdf

Page 62: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

62

Sexta parte “Aplicación de los filtros digitales y síntesis de efectos de sonido”

1.- Introducción. A lo largo de esta unidad se definen efectos de sonido que en lo particular mi han dejado sorprendido. Parece interesante como por medio de una ecuación diferencial o un filtro se puede lograr cosas tan interesantes. ¿Podrías imaginar que por medio de una ecuación diferencial se podría imitar el sonido de una cuerda o una percusión? ¿Podrías imaginar imitar el sonido de una campana? Se define también una correcta interpretación de un sonido real al ser físicamente ejecutado, esto es por medio de 4 pasos que simulan el comportamiento como un ataque, que es cuando pellizcamos la cuerda o tecleamos una tecla de un piano y entre otros pasos hasta un silencio. Efectos de sonido como vibrato, trémulo, eco y coros. 2.- Síntesis de efectos de sonido. Los sonidos pueden ser imitados por algoritmos o procedimientos en los que tratamos de dar semejanza a la realidad. 2.1.- Función adsr.

Para poder escuchar un sonido en MatLab basta con teclear: >> x=0:1/8192:1; >> y=sin(2*pi*440*x); >> sound(y)

Imagen plot (y)

Page 63: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

63

El sonido es muy artificial ya que en la vida real tiene otros sentido, por ejemplo ¿Qué pasa si pulso la cuerda con mas fuerza? ¿Cuánto tiempo dura el sonido? A fin de mejorar la calidad, hay un número de cosas que se pueden intentar. Si se varía el volumen de una nota determinada como una función de tiempo, como en la imagen mostrada, se puede simular una nota más realista. Cuando se pulsa una tecla sobre un teclado de piano o una cuerda de guitarra, el volumen sube desde cero al valor máximo en la porción de ataque de la nota. El volumen entonces decae a un valor intermedio, que se mantiene por un instante de tiempo. Este volumen posteriormente decaerá a cero si la tecla o cuerda se mantiene pulsada durante un período largo de tiempo, o se amortiguará cuando la tecla o cuerda se libera. La imagen mostrada representa este comportamiento del volumen. Esta función fue definida por Mark Bartsch.

out = adsr(alevel,times) La función adsr realiza la interpretación de cada una de las fases de desarrollo físico del movimiento. Attack .- El sonido crece de cero al valor máximo en la porción de ataque. Decay.- El sonido disminuye a una posición de equilibrio. Sustain.- El sonido se mantiene un determinado tiempo en esta posición constante. Release. El sonido comienza su etapa de perdida de energía por lo que tiene una tendencia a cero. El argumento alevel de la función describe el valor máximo de la magnitud de ataque, es decir que simula la magnitud del primer golpe. A partir de este dato

Page 64: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

64

inclusive también se describe la proporción en la que estará el valor slevel que corresponde a la magnitud de la fase sustain. Si alevel es estrictamente mayor que 1, los valores tomados para alevel y slevel son: slevel = 1/alevel; alevel = 1; De lo contrario solamente slevel tendrá una proporción descrita como: slevel = alevel*alevel; De forma que es como si el sonido se hubiera tocado con menor fuerza. El argumento times es un vector fila de 3 o 4 elementos en donde se encuentra definido el tiempo de cada fase, de la forma. Times = [attack, decay, sustain, release] Cada uno de los términos es multiplicado por fs, de forma que tengamos una relación proporcional a la frecuencia de muestreo, esto es de alguna forma similar a intentar dividir la frecuencia de muestreo en porciones significativas para cada fase.

Imagen que muestra los valores de cada fase además de la magnitud de alevel y slevel.

Al multiplicar el valor de cada fase por la frecuencia de muestreo fs, intentamos dividir una porción de tiempo, por lo que la elección de los valores de cada fase corresponde a un valor de tiempo, por la relación. attack = times(1) * srate; decay = times(2) * srate; sustain = times(3) * srate;

Page 65: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

65

release = times(4) * srate; Así, si time = [.1 .1 .7 .1], la suma de ellas dan 1, por lo tanto únicamente evaluamos un segundo de tiempo. Trate de comprender la relación en tiempo que tiene cada fase y piense que siempre, la fase sustain debe ser la mayor. La función linspace genera un vector con valores igualmente espaciados. Tan solo damos el punto inicial, punto final y el número de muestras. Por lo tanto lo siguiente define a toda la grafica. out = [linspace(0 , alevel , attack )'; linspace(alevel, slevel , decay )'; linspace(slevel, slevel , sustain )'; linspace(slevel, 0 , release )' ]; Por ejemplo. linspace(0 , alevel , attack )', crea un vector fila con attack muestras y con valor que van desde 0 hasta alevel. Al aplicar este vector resultante y multiplicarlo por la señal original obtenemos.

Señal original. 440 Hz Resultado de la evaluación de

adsr (1.2, [0.1 0.1 0.7 0.1]) Creación de la señal original x=0:1/8192:1-1/8192; y=sin(2*pi*440*x); Creación del vector adsr. ADSR =adsr(1.2,[.1,.1,.7,.1])'; Multiplicación de vectores para el resultado final. out=ADSR.*y;

Page 66: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

66

Plot del resultado. Al escuchar el sonido de este vector efectivamente se escucha mucho mas parecido a una tecla de un piano. La función adsr.m se anexa en la entrega de este proyecto.

2.2.- Suma de sonidos y beats

Los sonidos pueden ser sumados, únicamente es necesario pensar en un factor de multiplicación o promedio para que no aumente el volumen en una forma desproporcionada. Por ejemplo, si tenemos en MatLab. >> subplot(2,2,1); x=0:1/8000:0.5; y1=1*sin(2*pi*260.00*x); sound(y1);plot(x,y1); >> subplot(2,2,2); x=0:1/8000:0.5; y2=1*sin(2*pi*270.00*x); sound(y2);plot(x,y2); La suma puede verse como la multiplicación por un factor que es en realidad la media entre ambas frecuencias. >> subplot(2,2,3); x=0:1/8000:0.5; y3=0.5*y1+0.5*y2; sound(y3);plot(x,y3); Ahora que cuando dos tonos con frecuencias similares están tocados juntos, se producen un efecto de pulsaciones (en ingles beats). Necesitas escucharlo para comprenderlo, pero imagina que las frecuencias se solapan o entrelazan tratando de formar de alguna manera otra frecuencia.

Resultado de la evaluación del proceso de graficas por la función subplot. La ultima imagen muestra como se “enciman” las frecuencias. Lo que se alcanza a apreciar son los beats. Se escucha como se el sonido oscilara con una frecuencia muy baja.

Page 67: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

67

2.3.- Sonido estéreo en MatLab. Para poder escuchar un sonido estéreo con la función sound, es necesario generar una matriz Y de de dos columnas, cada una de ellas con N muestras de una señal. El comando sound(Y, fs) genera una señal estéreo que envía la primera columna por el canal derecho de audio y la segunda por el izquierdo.

3.- Simulación de instrumentos musicales utilizando señales moduladas en frecuencia Las señales con frecuencia modulada, tienen la expresión:

x(t) = A cos (ψ(t))

en particular un sintetizador de música utiliza señales de FM con Ψ(t) variando se manera senoidal:

x(t) = A(t) cos [2π fc t + I(t) cos(2π fm t + φm) + φc ]

donde A(t) es la variación de amplitud o envolvente que varía con el tiempo para conseguir efectos más realistas. Si se calcula la frecuencia instantánea se obtiene.

y tenemos que fc es la frecuencia que se obtendría sin modulación FM y se denomina frecuencia de la portadora. fm es la frecuencia de la modulación y expresa la rapidez de variación de la frecuencia instantánea. Los parámetros φm y φc son constantes arbitrarias, usualmente con valor φm = -π/2 y φc = 0. I(t) se denomina técnicamente índice de modulación del envolvente y se utiliza para variar el contenido en armónicos del sonido del instrumento. Cuando I(t) es pequeño se generan principalmente los armónicos con frecuencias bajas y cuando I(t) es grande se producen también los armónicos superiores. De esta manera se consigue que el contenido en armónicos varíe en con el tiempo. 3.1.- Sonido de una campana Particularizando los parámetros correspondientes a la generación de sonido de una campana, tenemos: Relación fc / fm = 1/2; por ejemplo fc = 110 Hz y fm = 220Hz. Envolventes A(t) e I(t) con decaimiento exponencial:

Page 68: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

68

con A(0) =1. La siguiente función en MatLab produce este sonido. function y = campana(Fc,Fm,I,Tao,dur) %campana = (Fc,Fm,I,Tao,dur) %Funcion que imita el sonido de una campana % %Fc frecuencia sin modulacion FM %Fm frecuencia de la modulacion %I parametro I(0) de la ecuacion de I(t) %Tao paramtro del exponente %dur duracion del sonido %trabaja por default a frecuencia de muestreo de 11 025 Hz frecMuestreo=11025; t= 0:1/frecMuestreo:dur; y=exp(-t/Tao).*cos(2*pi*Fc+I*exp(-t/Tao).*cos(2*pi* Fm*t+(-pi/2)+0)); Puedes probar con los siguientes valores. Caso fc(Hz) fm(Hz) I(0) τ(seg) dur (seg) 1 110 220 10 2 6 2 220 440 5 2 6 3 110 220 10 12 3 4 110 220 10 0.3 3 5 250 350 5 2 5 6 250 350 3 1 5 Y escuchar el vector resultante con sound. El efecto producido es el de una campana tan original que puede confundir al lector dado el efecto tan similar. 3.2.-Tremelo

Tremelo es la variación de la amplitud de un tono por una señal senoidal de frecuencia baja. En términos matemáticos:

x(t) = sin (2π fm t ) sin (2π fc t )

dónde fc es la frecuencia de la señal senoidal subyacente, o frecuencia de la portadora; fm es la frecuencia moduladora, con fm << fc ; La frecuencia de muestreo, fs, es tomada con fs > 2 fc para asegurar que se satisface el criterio de Nyquist.

Page 69: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

69

Como podemos observar la frecuencia principal fm, es descrita como cualquier frecuencia, solo que el segundo seno realiza un cambio en la magnitud de esta señal, digamos que la frecuencia fc afecta directamente la ganancia de la señal. Anteriormente teníamos A*sin(2*π* f* t), ahora el valor A cambia a lo largo del tiempo. El algoritmo que lo resuelve es el siguiente:

function y = tremelo(Fc, Fm , dur, frec) % %tremelo %Funcion que imita el sonido de tremelo % %Fc frecuencia sin modulacion FM %Fm frecuencia de la modulacion %dur duracion %trabaja por default a frecuencia de muestreo de 11 025 Hz t= 0:1/frec:dur; y = sin(2*pi*Fm*t).*sin(2*pi*Fc*t);

3.3.- Vibrato

Vibrato es la variación de la frecuencia del tono por una señal senoidal de frecuencia baja. En términos matemáticos:

x(t) = sin [2π fc t + m sin (2π fm t )]

dónde fc es la frecuencia de la señal senoidal subyacente, o frecuencia de la portadora; fm es la frecuencia moduladora, con fm << fc ; m es el índice de modulación. La frecuencia de muestreo, fs, es tomada con fs > 2 fc para asegurar que se satisface el criterio de Nyquist. NOTA: Variar la amplitud de una señal senoidal por alguna señal se denomina modulación de amplitud. Variar la frecuencia de una señal senoidal de acuerdo a otra señal se denomina modulación de frecuencia. En la radio de frecuencia modulada (FM), fc oscila desde 88.5 a 108.5 MHz, el máximo de fm es 15 kHz, y m = 5. En la radio de amplitud modulada (AM), fc está entre 530 y 1700 x 100 kHz y el máximo de fm es 5 kHz. Este es una de las razones por las que la música sobre una estación de radio FM suena mejor y la mayoría de las cadenas musicales usan FM. La radio AM lleva suficiente rango de las frecuencias para reproducir bien la voz humana, pero no es suficiente para la música porque la música contiene frecuencias sobre la gama perceptible desde 20 Hz a 20 kHz.

Page 70: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

70

4.- Aplicación de los filtros digitales. Los sonidos también pueden ser tratados por los filtros digitales, obteniendo diversas interpretaciones por medio de ecuaciones diferenciales. 4.1.- Algoritmo de la cuerda de Karplus-Strong. Plucked String.

¿Podría usted imaginar un algoritmo que simulara el sonido y comportamiento de una cuerda de guitarra? Este algoritmo debe considerar la forma aleatoria que tiene una cuerda normal. Ejemplo de ello es la siguiente muestra de una guitarra acústica tocando un tono de LA a 440 Hz.

El único hecho percibible es que tenemos un attack como en la función adsr, un pequeño decay más o menos proporcional al attack; además el sustain y release tienen una tendencia a cero. Es totalmente seguro que la magnitud de esta grafica cambie al ejecutar la cuerda por segunda ocasión. La construcción del algoritmo es mejor expresado por medio del siguiente diagrama de bloques. Imagen de http://cnx.org/content/m15490/latest/

Page 71: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

71

Hipotéticamente, en un principio el filtro esta vacío, posteriormente por medio de ruido blanco (White Noise), el filtro recibe entradas con las que puede trabajar. Inmediatamente después de pasar la sumatoria existen caminos que en realidad son copias de la señal original, el primero termina con la muestra y pasa por y(n), el segundo pasa por un bloque que define una transformada Z. Quiere decir que tenemos una ecuación recursiva, por lo tanto un filtro IIR. Posteriormente después de pasar por esta transformada Z el valor pasa por un filtro pasa-bajos o lowpass filter (LPF) el cual tan solo pasa frecuencias bajas por que en cada vuelta pierde frecuencias altas. Seguido también de un filtro all-pass filter (APF) que deja pasar a todas las frecuencias. La ecuación diferencial es la siguiente: y[n] = x[n] + y[n-N] + y[n-(N+1)] que corresponde a un filtro pasa bajos. Como podemos ver para calcular y[n] es necesario tener una entrada, pero también 2 valores que previamente se habían calculado, por lo tanto tenemos una función recursiva y forma parte de los filtros digitales IIR.

N=100; A=zeros(1, N+1+1); A(1)=1; A(N+1)=0.5; A(N+1+1)=0.5; freqz(1,A) Respuesta en frecuencia del filtro por medio de la función freqz. El valor +1 extra surge porque en MatLab los vectores están definidos para el primer elemento desde la posición a(1) y no desde a(0), inclusive este ultimo no existe.

fs=8000; [H,f]=freqz(A,1,256,fs); plot(f,abs(H)) Por medio de la función freqz, podemos apreciar como este filtro discrimina a las frecuencias altas o solo deja pasar a las frecuencias bajas. Por lo tanto es un filtro pasa bajos.

Es importante tomar en cuenta este valor N, el cual como podemos imaginar nos dice que tan lejos esta la recursividad (si se puede mencionar así), ya que si

Page 72: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

72

estamos evaluando una “n”, los resultados dependerán de un valor previamente calculado y se encuentra N elementos atrás en el vector. La forma de calcular este valor depende del tono que deseamos que tenga nuestra cuerda, por lo que debemos calcular el periodo de la señal en términos de la cantidad de muestras que debemos tomar. Además, este valor corresponde al valor de xN y xN+1. Si recordamos a lo largo de este proyecto, la frecuencia a estado en términos del tiempo ya que la hemos calculado en términos de Hz, por la cual tenemos una relación de repeticiones de ciclos de onda por segundo. Para calcular el periodo de la señal en términos del numero de muestras consecutivas debemos tomar en lugar de un segundo, el numero de muestras que tiene un segundo. Al tener esta cantidad es como si tuviéramos en realidad un segundo ya que si recordamos la frecuencia de muestreo nos da una relación de calidad que depende del número de muestras.

Por lo tanto es útil la siguiente comparación para recordar los conceptos tratados anteriormente y para saber como vamos a tratar a las señales. Si tenemos una frecuencia de muestreo de 8000, entonces tenemos 8000 muestras en un segundo. Si tenemos una frecuencia de muestreo de 11025, entonces tenemos 11025 muestras en un segundo. Si tenemos una frecuencia de muestreo de X, entonces tenemos X muestras en un segundo. Ahora entonces, si deseamos una frecuencia determinada, anteriormente dividíamos la frecuencia en un segundo y nos daba una relación del periodo en segundos, pero ahora al dividir la frecuencia entre el número de muestras, nos proporciona el periodo en número de muestras. El algoritmo trabaja con una frecuencia fs y con una frecuencia de la señal f, por lo que el tono de la señal es fs/f. De este número debe ser tomada solo su parte entera.

Diseño del algoritmo con la función filter.

Descrito lo anterior debemos considerar como debe ser diseñado el filtro a utilizar. Existe en MatLab una función especial para tratar con filtros que se llama filter (Descrita anteriormente). Utiliza 3 argumentos indispensables, el primero es el vector “b” que como se a descrito antes, el vector “b” sirve y da una relación solamente de los datos de entrada, es decir que no es recursivo, por lo que solo toma los datos de x(i). Al observar la ecuación diferencial, podemos observar que uno de sus elementos es un elemento del vector de entrada “x” y que es el primero, por lo que b=[1] solamente. El siguiente parámetro es el vector “a” y ya que los elementos de la recursión están definidos para el vector “a”, debemos observar cuales son los valores adecuados para configurar este vector.

Este filtro comienza con una ecuación de la forma:

Page 73: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

73

y(n) = b0x(n) + b1x(n-1) + …+ bqx(n-q) - a1y(n-1) - … - apy(n-p)

podemos observar que el vector “b” corresponde a los vectores de entrada y los valores del vector “a” corresponden a los valores de forma recursiva. Es importante considerar que las literales del vector “a” están negadas por lo que debemos invertir el coeficiente al signo adecuado. La llamada de la función es de la forma y = filter(B,A,x), donde:

• B = [b0 b1 … bq] • A = [1 a1 … ap].

A partir de la ecuación diferencial tratada debemos obtener los coeficientes para lo respectivos “y[n-N]”y “[n-(N+1)]”. Al definir el vector “a” como: a=zeros(1, N+1+1); Estamos definiendo un vector de N+1+1 ceros. Si definimos al vector “a” como: {a1, a2, a3,…,aN, aN+1,…,ap} podemos suponer que el primer valor es 1 de acuerdo a la ecuación diferencial que el elemento N+1 debe valer 0.5, lo mismo que el elemento N+1+1, por lo que solamente los coeficientes 1, N+1 y N+1+1 tendrán una función útil en la formula. Nota: El 1 extra es porque en MatLab los elementos comienzan en 1 no en 0. La definición en MatLab es la siguiente: a(1)=1; % primer elemento a(N+1) = -0.5; % Coeficiente N a(N+1+1) = -0.5; % Coeficiente N+1

El tercer valor del filtro es el vector de entrada que será filtrado. Lo curioso e importante de este filtro es que los primeros valores son una generación de números aleatorios

Imagen de http://www.knowledgerush.com/kr/encyclopedia/Karplus-Strong_algorithm/

Page 74: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

74

por lo que esta inicializado con ruido. La generación de números aleatorios debe ser definida con valores entre -1 y 1. la función rand de MatLab realiza genera números flotantes entre 0 y 1 , por lo al llamar a esta función como: x = 2*rand(1,N);

La cual generara N números aleatorios entre 0 y 2; recuerde que el valor N ahora es el periodo de la señal. Si seguido de esto calculamos: x = x - mean(x); Obtendremos lo deseado, ya que mean(x), nos proporciona el promedio de los valores internados, por lo que tenemos una correcta distribución de valores entre -1 y 1. Solo que hasta ahora tenemos únicamente un vector del tamaño del periodo, por lo que necesitamos rellenar con ceros hasta determinado momento. Una forma de hacer esto es poniendo un valor que resulte el número de iteraciones que realzara el filtro. Es importante que este valor sea mucho mayor que el periodo para que podamos apreciar las muestras de sonido. Las siguientes líneas realizan el cálculo en MatLab: y = [x zeros(1,-length(x)+iterations+1)]; El valor iteration nos da el total de iteraciones que hará el filtro; este valor se encuentra como parámetro de la función de forma que sea fácilmente cambiado. El resultado será que tengamos un vector de tamaño igual al número de iteraciones, pero que contiene muestras aleatorias de tamaño N en el principio del vector. La llama da final de a función filter es: signal = filter(1,a,y); El valor 1 corresponde como he mencionado, al vector b=[1]. Por ultimo su grafica y sound para poder escuchar el resultado. plot(signal), grid on, title( 'Simple 2 point KS Plucked String Algorithm' ) sound(signal, fs)

Llamada de la función con pluckedStringKS(440, 2000, 11025); Una frecuencia de 440, 2000 muestras o iteraciones y fs de 11025.

Page 75: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

75

Más sobre el periodo N. Este valor a su vez puede tener características relevantes al sonido ya que si tenemos por ejemplo una frecuencia de 440 Hz, tendremos un valor de N:

• N = 18.19 para fs = 8000. • N = 50.11 para fs = 22050.

El cual sigue teniendo el mismo tono, pero el segundo tiene más armonías. La forma de poder apreciar esto es por medio de la función freqz, que describe las características del filtro respecto a la magnitud y fase de cada frecuencia. La llamada freqz(signal, 1, 1024, fs); produce la siguiente grafica.

Respecto a la fase no hay mucho que decir a que es un corrimiento mínimo que no es indispensable tomar en cuenta; pero con la magnitud sí. La llamada generación de la grafica parte de tener 440 Hz con una frecuencia de muestreo de 22050, por que el algoritmo debe producir los siguientes datos de información: Actual delay : 50.114 Floored delay : 50 Frequency : 440 fs : 22050

lo interesante de esta grafica es que este filtro dejara pasar solamente a los armónicos de la señal, como múltiplos de 440 aproximadamente. Y bueno, como mencione fs es de 22050, pero que pasaría si fuese de 8000.

Se muestra l misma información pero con variaciones en la magnitud de cada frecuencia. Las frecuencias tratadas, dan por resultado los armónicos de la señal.

Page 76: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

76

El valor máximo de cada grafica es solamente la mitad de fs. Recordemos que por Nyquist que la frecuencia de muestreo máxima que deseamos insertar en la señal será solamente hasta la mitad de la frecuencia de muestreo. Por lo tanto no hay algunas frecuencias en la última señal de ejemplo. El resultado de esto es la señal debe ser más agudo que la primera pero solamente en el timbre. Es como si pellizcáramos una cuerda de una guitarra y la de una mandolina con la misma frecuencia. Amplitud de la señal La amplitud es especificada como el inicial Peak determinado. Como tenemos un

promedio o una forma 2

)1()( ++ nyny, el resultado progresivo de la evaluación de esta

formula tendrá por resultado la gradual disminución de la magnitud. Condiciones iniciales Al estar determinados los parámetros de la función de forma constante, el sonido se producirá la gran mayoría un sonido casi idéntico, ya que el tono y la amplitud inicial están determinados. El factor de error que es dado por los números aleatorios en realidad forma una ventaja al escuchar que nuestro sonido sí se parece demasiado a una cuerda real, ya que nosotros en realidad también pulsamos la cuerda de forma aleatoria considerando fuerza, medios de difusión o algún otro.

Referencia principal . Digital Synthesis of Plucked-String and Drum Timbres Author(s): Kevin Karplus and Alex Strong Source: Computer Music Journal, Vol. 7, No. 2, (Summer, 1983), pp. 43-55 Published by: The MIT Press Stable URL: http://www.jstor.org/stable/3680062

4.2.- 1 o mas ecos. Filtro FIR para un solo eco: Un solo eco es una versión retardada de una señal sobre sí misma. Se logra con un filtro FIR con una ecuación de diferencia de la forma:

y(n) = x(n) + b x(n – D)

donde b es un peso y D el retardo. La respuesta impulsional es: h(n) = δ(n) + b δ(n - D)

El objetivo de esta ecuación es repetir la señal de entrada algunos instantes determinados en el tiempo con el objetivo de simular un eco. Las limitaciones a considerar son la amplitud y el tiempo de retardo.

Page 77: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

77

La amplitud debido a que si repetimos la señal en un tiempo posterior, quiere decir que la vamos a sumar de alguna forma a la muestra original, por lo que esta debe tener un factor de ganancia significativo de forma que la señal no comience a escucharse más fuerte en determinada magnitud. Con un valor de 0.5 es suficiente. El retardo debemos tomar en cuenta un retardo prudente de forma que no sea tan pequeño y que no se escuche o de forma no tan grande para que aprecie como eco real. Este eco debe estar en un tiempo aproximado de 0.325 o el mínimo del tamaño del vector/3 y 0.5 de forma que el eco quede dentro del vector resultado. Por otro lado el vector b debe ser creado como un vector con solo ceros e inicializar únicamente los coeficientes que debemos ocupar, por lo que uno de ellos es b(1) = 1 que corresponde a x(n) de la formula y b(D+1) = 0.5 que corresponde al retardo x(n-D). Prueba grabar tu nombre o utilizar un archivo de audio para implementar este eco. En o personal grave mi nombre, que de ahora en llamare señal original.

La grafica del sonido origina que es mi nombre. Implementación. function [y fs] = eco() [x fs]=wavread( 'fabricio' ); soundsc(x, fs); D = round(min(0.325*fs, length(x)/3)); % calcular el retardo D B = zeros(1, D +1); B(1) = 1; B(D) = 0.5; % corresponde a b = 0.5 A = 1; y = filter(B,A,x); % y(i) = x(i) + b * x(i-D) para i = 1 hasta length(x) soundsc(y,fs)

La grafica de color rojo representa a la señal original y la verde en realidad representa a todo, aunque únicamente se han agregado valores a esta y que es el eco pero como puede ver es la misma señal pero disminuida en magnitud. Como está la grafica, lo verde es el eco agregado a la señal original.

Page 78: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

78

Tiempo en milisegundos del eco. Si suponemos que la distancia del eco vale D, es decir que tendríamos xD (n-D) en el filtro, entonces tenemos una relación de separación en función de las muestras tomadas. El tiempo de retardo corresponde a (D/fs)*1000. Filtro FIR para más ecos. Pensando el hecho real de que un eco es un rebote de la señal, al regresar esta tiene una ganancia inferior a la original, por lo tanto, si se diera el caso que estamos en una habitación donde es posible escuchar múltiples ecos, un segundo eco tendría una ganancia inferior. La relación de ganancia entre los ecos ocupa un factor de exponentes, donde al siguiente eco es b veces el anterior. Además para que se cumpla computacionalmente que un algoritmo tiene menor ganancia que el anterior, este eco “b” debe ser forzosamente 0 ≤ b < 1

El emisor recibe una porción de su propia voz, pero con una ganancia inferior.

Imagen de www.porque.es/por-que-se-produce-el-eco/ Sumando 3 ecos sucesivos da el siguiente filtro:

y(n) = x(n) + b x(n – D) + b2 x(n –2D) + b3 x(n – 3D)

En esta parte podemos apreciar mejor la relación que se tiene al incrementar un eco y que es proporcional al incrementar el exponente por cada eco extra. El factor de b se mantiene constante. Al cambiar el factor de b, la amplitud del eco se ve afectada ya que la ganancia de este factor que multiplica a cada miembro del eco se ve afectada. Si b es pequeño tenemos las mismas repeticiones pero se escuchan menos y si b es mayor, tenemos un eco mas pronunciado pero conserva las mismas repeticiones.

Page 79: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

79

La grafica junto con el eco. Aunque no sean notables los cambios podemos darnos cuenta que los ecos si son visibles.

Implementación. function [y fs] = ecos_3() [x fs]=wavread( 'fabricio' ); soundsc(x, fs); b=0.2; D = round(min(0.325*fs, length(x)/3)); % calcular el retardo D B = zeros(1, 3*D); B(1) = 1; B(1*D) = power(b,1); B(2*D) = power(b,2); B(3*D) = power(b,3); A = 1; y = filter(B,A,x); % y(i) = x(i) + b * x(i-D) para i = 1 hasta length(x) soundsc(y,fs) Un eco también puede ser representado por medio de un filtro IIR, solo que dado que es un filtro recursivo el numero de ecos depende del tamaño del vector a analizar. Por lo tanto se produce reverberación. 4.3.- Reverberación

Si la demora en el sistema de eco es suficientemente pequeña, no se pueden oír ecos distintos. Con unas modificaciones apropiadas, conseguimos en su lugar reverberación. La reverberación es la combinación de un sonido directo, un retorno rápido, y una cola de reverberación. En el palmoteo en una sala, el sonido directo es el palmoteo inicial. El retorno rápido sería el eco primario que se oiría. La cola de reverberación sería todos los otros ecos, excepto que serían lo suficientemente próximos para no ser distinguibles. El siguiente filtro IIR puede ser utilizado como un inicio para construir algoritmos más complicados de reverberación. Su ecuación de entrada/salida es:

y(n) = x(n) + a y(n – D)

Page 80: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

80

y el numero de ecos se puede ver infinitamente y reescribiendo la ecuación como.

y(n) = x(n) + a y(n – D) y(n-D) = x(n-D) + a y(n-2D) por lo tanto, la primer recursividad es: y(n) = x(n) + a (x(n-D) + a y(n-2D)) y(n) = x(n) + a x(n-D) + a2 y(n-D) sucesivamente comenzaran a surgir más ecos con cada recursión. Implementación

function [y fs] = ecos_IIR() [x fs]=wavread( 'fabricio' ); soundsc(x, fs); D = round(min(0.325*fs, length(x)/3)); % calcular el retardo D A = zeros(1, D); B = 1; A(1)=1; A(D)=-0.5; y = filter(B,A,x); % y(i) = x(i) + b * x(i-D) para i = 1 hasta length(x) soundsc(y,fs)

La grafica muestra el resultado de la recursión sobre la señal original, por lo que con una sola llamada principal y dada la recurrencia es así como se produce la repetición de la señal, la cual es muy similar a los ecos pero con un número de ecos ilimitado, hasta que termina la señal.

Page 81: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

81

4.4.- Coros Una de las maneras que los estudios usan para hacer un sonido de gente como una muchedumbre es el efecto de coro. Esta se hace agregado a la señal original varias versiones atenuadas y retardadas de la señal original. Se puede usar una ecuación de la forma:

y(n) = x(n) + b2 x(n-D1) + b3 x(n-D2) +…+ bN+1 x(n-DN) Como lo menciona el texto tenemos que formar de manera aleatoria valores enteros que indicaran que coeficiente será el que estará diferente de cero en el vector b. Se utiliza un filtro FIR debido a que solamente deseamos factores que repitan la señal sin saber cual será. Es como si tuviéramos un publico en frente de nosotros con la única tarea de repetir lo que pronunciamos de forma que es posible que alguien lo repita muy rápido o que alguien se atrase un poco, logrando con esta imprecisión el coro deseado. En al vida real pasa lo mismo, los coristas de una orquesta no están perfectamente sincronizados, pero eso es lo que le da el efecto interesante.

La grafica de la señal (roja) es mucho mas pequeña que la resultante (verde), debido a que tiene varias muestras de la misma en suma o acumuladas. Esto puede verse también con un grupo e coristas: Si canta uno solo y estamos muy lejos necesitaremos acercarnos mas par distinguir lo que dice, pero si aumentamos el número de coristas en un número a aleatorios escucharemos mejor lo que cantan y su volumen aumentara proporcionalmente al número de coristas.

Page 82: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

82

5.1.-Filtros. Los filtros tienen relación directa con las frecuencias de las señales. Podemos imaginar un ecualizador de un vehiculo que tiene 3 perillas la grave, media y aguda. Cada una de estas perillas es en realidad un filtro (analógico) con la capacidad de dejar pasar algunas frecuencias específicas o inclusive viéndolo de otro modo es un filtro que no deja pasar señales de determinada frecuencia. Las definiciones para filtros comúnmente utilizadas son: 5.1. -Filtro pasa-bajos. Este filtro deja pasar frecuencias bajas 5.2.-Filtro pasa-altos. Este filtro deja pasar frecuencias altas. 5.3-. Filtro pasa-banda. Este filtro define un rango de frecuentas y solo deja pasar a las que están comprendidas en la banda. 5.4.- Filtro rechaza-banda. Igual que la anterior, pero aquí no se deja pasar a las que están intermedias en la banda 6.- Ejemplo de filtro pasa-bajo. Dado que la señal de la voz tiene una frecuencia promedio entre 0 Hz y 3500 Hz, reduje la frecuencia de muestreo de mi archivo por medio del programa Cool Edit Pro V2.0.Este frecuencia bajo de 44100 Hz a 11025 Hz. Para poder ver que frecuencias están dentro de la señal original debemos obtener su espectro. El espectro de la señal original puede ser obtenido por medio de las siguientes líneas de código en MatLab. [x fs] = wavread( 'fabricioM' ); sound(x, fs); N=30000; v=fft(x,N); %calculamos el espectro (transformada rapida de fo urier) X=abs(v); fn = [0:fs/N:[(N/2)+1]*fs/N]; %definimos fn stem (fn,X(1:length(fn))); title( 'GRAFICA DEL ESPECTRO' ); xlabel( 'FRECUENCIA (Hz)' ); Ylabel( ' MAGNITUD ' );

Page 83: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

83

La imagen muestra el espectro de la señal original. La frecuencia de muestreo de esta señal es de 11025 por lo que tan solo se muestra la mitad de las frecuencias ya que la grafica es simétrica. La mayoría de las frecuencias se encuentran entre 0 Hz y 1000 Hz. La definición del filtro paso bajo será adecuado definirla con la función fir1, ya que esta y a partir de tan pocos parámetros regresa todos los coeficientes de un filtro FIR. h=fir1(60,[0.25], 'stop'); La respuesta en frecuencia del filtro es:

Este filtro deja pasar las frecuencias hasta el 25% de la frecuencia máxima Por lo que si la frecuencia fs es 8000, la frecuencia máxima posible que podemos muestrear es de 4000. Entonces el 25% de 4000 es 1000. Este filtro solo dejara pasar frecuencias inferiores a 1000 y las demás las cancelara. Si el sonido tiene muchas frecuencias diferentes, al aplicarle este filtro, el resultado será que se escuche mas grave porque ya no estarán las frecuentas agudas.

La señal original por definición puede ser filtrada de 2 formas; ya sea con la función filter o bien por medio de una convolución. Por medio de la función filter: x2=filter(h,1,x); Por medio de una convolución: X2=conv(h, x); El resultado tiene el mismo efecto. O bien. También podemos ver la respuesta que tendrá el filtro con las siguientes líneas de código. [H,f]=freqz(h,1,256,fs); plot(f,abs(H))

Page 84: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

84

Como podemos observar, existirá un cambio en las frecuencias superiores a 1000 Hz. El resultado de este filtrado lo podemos apreciar mejor al observar las frecuencias por medio de la obtención del espectro de X2. v=fft(x2,N); %calculamos el espectro (transformada rapida de fo urier) X=abs(v); fn = [0:fs/N:[(N/2)+1]*fs/N]; %definimos fn stem (fn,X(1:length(fn))); title( 'GRAFICA DEL ESPECTRO' ); xlabel( 'FRECUENCIA (Hz)' ); Ylabel( ' MAGNITUD ' );

Como podemos ver en este resultado, las frecuentas inferiores a 1000 Hz realmente están intactas, mientras que las que están sobre 1000 Hz tienen una disminución no tan considerable, aunque las frecuencias superiores a 1000 Hz, quedaron totalmente desvanecidas.

Page 85: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

85

El resultado de este filtro paso- bajo es el paso de frecuentas bajas y la eliminación o cancelación de frecuencias altas. Usted puede probar los demás filtros, únicamente hace falta cambiar el filtro, o bien consulte la opción de filtro en el GUI de este proyecto, es mucho más eficiente que insertar datos desde línea de comando. Bibliografía Introduccion a los filtros digitales. Autor: Jesus Barrios Romano. Universidad Autonoma Metropolitana. Digital Filters second Edition. Autor: R.W. Hamming Editorial: Prentice Hill Digital Signal Procesing Autor: John G. Proakis Editorial: Prentice Hill Referencias de Internet. http://cnx.org/content/m15490/latest/ http://www.knowledgerush.com/kr/encyclopedia/Karplus-Strong_algorithm/ www.porque.es/por-que-se-produce-el-eco/

Page 86: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

86

Conclusiones El avance de la tecnología abarca muchas de las áreas de interés común o social, como puede ser matemáticas, fotografía, arquitectura, música y entre muchas otras; este proyecto pretendió abarcar un área especial para mí y que es la música. Personalmente digo esto ya que en algún entonces tuve la oportunidad de ser músico para sostener mis estudios universitarios por alrededor de 4 años. Al tener oportunidad de enriquecer mis iodos con experiencia musical me doy cuenta que los filtros musicales perceptiblemente tienen aun deficiencias como puede ser mas grandemente, su perfección. En la realidad estas distinguibles imperfecciones hacen que un sonido sea más agradable, inclusive hasta los errores humanos dan vida a una canción, por ejemplo, al escuchar a tu grupo favorito en vivo se distingue mucho de la versión original o inclusive cuando un vocalista se oye cansado al avanzar la canción. Un defecto muy notable que pude apreciar en los filtros digitales es que el tiempo de evaluación de los valores es lento y esto es dado al tipo no específico de procesadores que tenemos en una PC de escritorio. Para crear un filtro digital debemos pensar en el tiempo de respuesta por lo que los procesadores deben ser muy rápidos y precisos. He tenido oportunidad de usar filtros analógicos en procesadores de efectos y me agradan las variaciones que puede proporcionar, aunque es obvio que grandes de estas variaciones también son creadas por mi guitarra eléctrica. Utilizo al mismo tiempo filtros digitales con procesadores específicos (DNA de digitech) y aun así son perceptibles retardos no deseados. Lo importante también es que quede totalmente impresionado por los resultados, por ejemplo, ¿como es posible que con alrededor de 30 líneas de código pudiésemos escuchar el sonido de una cuerda o de una campara? Me gusto mucho saber como funcionan algunos efectos como ecos, coros y filtrado de señales. Se que la evolución que yo espero de los filtros digitales vendrá no muy lejos y me gusta saber que estos filtros tendrán un precio muy inferior a los filtros analógicos. Hago notar también que en este proyecto solo se trato con el resultado esperado y no con la eficiencia de estos filtros, por lo que solo es un comentario personal Al mismo tiempo me gusta la idea de tener a futuro procesadores y filtros digitales menos pesados y eficientes. No dudo que los músicos tengan que llevar un ipod o un llavero para ejecutar una serie de ritmos de d.j. Agradezco enormemente al Doctor John Goddard Close su enorme paciencia y capacidad.

Page 87: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

87

Apéndice A

Manual técnico de la creación de un GUI en MatLab 7.4. Introducción. La necesidad de crear un ambiente amistoso cuando programamos es indispensable para un programador ya que si entregamos un excelente programa a la persona que no lo pidió y esta persona no tiene conocimientos de programación le resultara algo engorroso o no se sorprenderá de los resultados. En cambio, con un ambiente de ventanas y botones o elementos gráficos tendremos un mejor resultado en la presentación de estos resultados. Desarrollo para la crearon de GUI’s (Guide User Interface). Tecleando desde la línea de comando guide (Graphical User Interfase Development Environment) obtenemos otra ventana con el siguiente menú de opciones:

Las pestañas tienen funciones de:

Page 88: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

88

• Creación de un nuevo GUI • Abrir un nuevo GUI

La creación de un nuevo GUI tiene a su vez opciones a escoger, tal como

• Blank GUI (Default) • GUI with Uicontrols

• GUI with Axes and Menu

• Modal Question Dialog

Page 89: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

89

Cada una de estas opciones especifica un entorno que puede ser útil en algún momento dado. En este documento solo me enfoco en un archivo vacío creado por default o bien a modificación de un GUI creado de la misma forma. En la pestaña abrir existente GUI se guardan los GUI’s creados últimamente. A la vez cuenta con un buscador para especificar la dirección de GUI’s creados, para comenzar alguna especificación en su actualización. Al crear un GUI por default tenemos la siguiente ventana.

En la parte superior tenemos funciones u opciones comunes a cualquier programa como ayudas, herramientas, ediciones y opciones para el archivo como guardar, abrir o imprimir. Las funciones importantes son: Property Inspector. Existe en el menú “View” una opción que se llama

“Property Inspector” que también puede ser accedida desde los iconos superiores presionando el icono.

Esta opción es sumamente importante ya que establece las propiedades del objeto en cuestión. Por ejemplo cambiar el nombre del objeto, tamaño, color, su texto y entre muchos otros.

Page 90: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

90

Tiene la forma de la figura mostrada, aunque solo algunas propiedades son similares entre objetos, como la posición en el GUI, pero existen otras que solo son propias para cada objeto, por ejemplo en el objeto slider se tiene que configurar el numero de segmentos a avanzar por cada pulso o acción y es un atributo que es obvio no tendrá un botón o una etiqueta. Dentro de las funciones más importantes están:

Background Color: cambia el color de fondo del control. CallBack: es la propiedad mas importante del control, ya que le dice al control que hacer cuando este se active. Enable: Activa o desactiva el control. String: en el caso de de botones, cajas de texto, texto dinámico y pop-up menús; es el texto que muestra el control. Tag: otra de las propiedades importantes, ya que con este es posible regresar datos o identificar el control.

Align Objects: Existe en el menú “Tools” una opción que se llama “Align Objects”, que también puede ser accedida

desde los iconos superiores presionando el icono. Esta opción nos brinda una ventana que nos permite alinear los objetos que estén seleccionados al momento de llamar a esta función. Para seleccionar varios objetos al mismo tiempo debemos dejar presionado CTRL y seleccionar uno por uno. La ventaja que tiene esta función respecto al alineado manual es que los elementos tratados tendrán la proporción exacta, mientras que la manual en realidad tendrá deficiencias que serán notables cuando tengamos un número considerable de objetos.

Page 91: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

91

menú editor: Existe en el menú “Tools” una opción que se llama “menú editor”, que también puede ser accedida

desde los iconos superiores presionando el icono. Con esta función podemos crear una serie de menús o pestañas para nuestro GUI, cada una cuenta con propiedades como nombre, función a realizar y un acelerador, que es un acceso rápido por medio de una combinación de botones (CTRL + tecla de letra). Cuenta con opciones visuales, pero todo esto desde un modo grafico sin tener que programar nada. Run: Esta función se encuentra dentro del menú

Tools, pero también puede ser accedida presionando el icono.

Tal como su traducción, esta función ejecuta o corre el GUI. Sirve para tener una idea del funcionamiento real de nuestro GUI aunque debemos tener en cuenta que con cada llamada a la función, se guardan todos los cambios realizados hasta el momento, así que debemos pensar bien antes de ejecutarlo.

Definición de objetos o controles en MatLab. La serie de elementos insertados sobre la interfaz grafica tienen por nombre objetos controles. Los objetos o controles más importantes son:

Botón. Es un objeto que al ser pulsado ejecuta su acción asignada. Ejecuta las líneas de comando dentro del área que abarca la definición de función, en este caso, el botón.

Slider. Este objeto es una barra deslizante y tiene por objeto contener una serie de valores igualmente espaciados de forma que un usuario puede aumentar o disminuir un valor determinado pero hasta cierta posición minima y máxima.

Page 92: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

92

Radio Button. Objeto Enable/Disable, depende de la configuración es el valor que tiene como 1 o 0. Es un botón binario. Es adecuado para programas un selector de objetos como por ejemplo un objeto de ejes, es decir, que si selecciono el eje1, entonces el eje 2 no esta seleccionado, de igual forma al seleccionar el eje 2. De esta forma se da exclusividad a los objetos.

Check box. Al igual que el objeto anterior, este es un objeto binario, solo que es adecuado para seleccionar una serie de objetos, aunque a mi forma de ver sirve del mismo modo.

Edit text. Este objeto es una etiqueta que tiene un área para poder escribir e insertar datos. Este dato puede ser captado por el GUI para un posterior cálculo.

Static text. Objeto etiqueta de texto estático. Es un objeto que muestra información y no es posible alterarlo físicamente, por lo que depende de la lógica del programa la forma en la que se mostraran todos los datos.

Pop-up menú. Este objeto muestra al desplegarse una serie de cadenas numéricas o textuales las cuales contienen un valor implícita cada una de forma que al seleccionar una opción nuestro GUI inicializa alguna variable con este valor y lo podríamos ocupar.

Toggle button. Es un botón que se mantiene presionado con el primer clic; solamente pierde esta posiciona al pulsar de nuevo sobre este.

Axes. En un objeto que puede mostrar gráficamente los resultados de una serie de números, quizás 2 vectores del mismo tamaño o proporción.

Panel. Este objeto puede contener otros objetos, sirve adecuadamente para organizar zonas de objetos, por ejemplo zona de graficas, inserción de datos, etc.

Page 93: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

93

A modo de prueba y antes de crear objetos, guardare el GUI para examinar el contenido del o de los archivos creados. El nombre de este archivo de prueba será “Ejemplo”: El archivo tendrá la extensión .fig. Al momento de dar en guardar suceden varias cosas.

1. No se creo solo un archivo, en realidad fueron 2.

2. Se abre inmediatamente el archivo .m. La creación de estos 2 archivos corresponde a la versión de MatLab ya que en algunas versiones es suficiente con un archivo. El archivo .fig tiene información del GUI creado, en este momento solo tiene lo siguiente: MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Fri Jul 11 18:49:13 2008 El archivo .m que se abrió al guardar el GUI realmente contiene lo que vamos a utilizar. Cuenta con 73 líneas indispensables par la creación del GUI. Estas líneas están comentadas, así que sin los comentarios queda lo siguiente. function varargout = Ejemplo(varargin) gui_Singleton = 1; gui_State = struct( 'gui_Name' , mfilename, ... 'gui_Singleton' , gui_Singleton, ...

Page 94: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

94

'gui_OpeningFcn' , @Ejemplo_OpeningFcn, ... 'gui_OutputFcn' , @Ejemplo_OutputFcn, ... 'gui_LayoutFcn' , [] , ... 'gui_Callback' , []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end function Ejemplo_OpeningFcn(hObject, eventdata, handles, va rargin) handles.output = hObject; guidata(hObject, handles); function varargout = Ejemplo_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; Contienen información relevante para la creación de este GUI y son comunes a cualquier GUI creado. Creación de un botón. Para la creación de un botón debemos presionar el botón de “Push botón” en la parte izquierda, después seleccionar el área que tendrá el botón en el GUI, tal como muestra la figura siguiente. Al guardar el GUI nuevamente, el archivo “Ejemplo.m” ha cambiado teniendo ahora lo siguiente: % --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future v ersion of MATLAB % handles structure with handles and user data ( see GUIDATA) El orden en que agregamos los objetos repercute en las líneas creadas en el GUI en el mismo orden que fueron agregadas. Es importante tomar en cuenta que el archivo .fig también a sufrido cambios al momento de salvar, pero no debemos poner atención a esto ya que esta en código ascii y lo realmente importante esta en el archivo m. De forma que sea más comprensivo creare 2 botones más a modo de ejemplo de forma que al salvar tenemos lo siguiente:

Page 95: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

95

Como podemos apreciar cada botón tiene un espacio entre ellos, el cual es el código que ejecuta al presionarlo en el GUI. En un principio mencione la opción “Property Inspector” la cual modifica las propiedades del objeto seleccionado en un momento determinado por lo cual para cambiar las opciones del botón, tenemos que ir a este menú, donde tenemos algo como lo siguiente para el botón seleccionado:

Puede observarse las opciones de este botón. Algunas de estas opciones son: cambiar el color del botón, el tamaño, la posición, etc.; la opción String exhibe el texto que tendrá el botón, donde es importante tomar en cuenta el tamaño del mismo de forma que se pueda visualizar todo el texto que deseamos, por ejemplo: ACEPTAR. A su vez también este texto puede ser modificado en tamaño estilo y tipo de letra.

Page 96: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

96

Al presionar la opción RUN, tenemos al GUI tal y como se vera.

Presionando el icono tenemos la visualización de cómo esta quedando el GUI.

Podemos cambiar varias de las opciones de cada objeto o control como color, nombre o el texto mostrado en el GUI, entre otras.

Cambio de nombre de cada objeto que recae en el archivo .m del GUI.

Estos cambios al igual que los demás son realizados como propiedades de botón a partir del “Property Inspector”. La creación y modificación de los demás objetos es realizado de manera similar aunque con algunas diferencias que mostrare a su debido tiempo.

Page 97: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

97

Llamadas a Callbacks Al igual que las funciones en MatLab sus objetos son creados a partir de funciones. La creación del botón 1 por ejemplo tiene la siguiente definición function BOTON1_Callback(hObject, eventdata, handles), donde se aprecia el nombre que seleccionamos para el objeto y otro nombre denominado Callback. Este último es la llamada de la función para el botón 1. También se puede acceder desde la creación del GUI de la siguiente manera:

Al dar click derecho sobre el objeto nos da una lista de opciones entre ellas “View Callbacks”. Una vez ahí esta la opción Callback.

La ejecución de la función se ejecuta cada que presionamos el botón y al ser una función pues realza alguna actividad en común. Etiquetas “Edit text” y “Static Text” La creación y uso de etiquetas es muy similar a la creación de botones. Existen dos tipos de etiquetas y son las que se pueden editar de forma que el texto introducido en esta nos pueda ser de utilidad o bien un texto estático del cual solo podemos obtener información visual en el GUI. Aunque es importante mencionar que las ultimas etiquetas pueden cambiar su valor en una actualización que ocurre por algún evento generado, por ejemplo mostrar los segundos de un reloj conforme avanza en el tiempo, actualizar datos al presionar un botón, etc.

Esta figura representa la creación de etiquetas. Estas también pueden ser modificadas con la opción “property Insector”.

Page 98: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

98

Los datos insertados en el botón “Edit Text” pueden ser obtenidos por una variable de la siguiente manera: variable = get(handles.edit1, 'String' ); Lo que hace esta función es obtener el dato del objeto “Text Edit” con nombre edit1 capturando los datos escritos en ese momento y lo hace como un tipo String. En este caso el dato es capturado como String, pero si necesitamos que el valor sea capturado como un valor numérico debemos hacer un Cast a este tipo de la siguiente manea: variable = str2num( get(handles.edit1, 'String' ) ); Ahora si al variable es capturada del tipo numérico. Aplicación utilizando botones y etiquetas. Sigue los pasos descritos a continuación para lograr la siguiente interfaz grafica. 1.- A partir de la llamada de la función GUIDE cree un GUI por default

2.- Inserte un “Push Button”, un “Text Edit” y un “Static Text”. En un principio se vera así.

3.- Por medio de “Property Inspetor” cambie las propiedades de cada control u objeto. Edit Text – Cambie el texto a “Escriba un texto”. Static Text – Cambie el texto a “Aquí aparecerá el texto”. Push Button – Cambie el texto a Botón “Hola mundo”. 4.- Al dar clic en RUN saldrá un texto que nos indica que debemos salvar por lo que grabamos en la ruta deseada, además si cambiamos la dirección actual, nos indicara si deseamos cambiar el “Curren Director” damos en si y aparecerá lo siguiente.

Page 99: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

99

Aparece el nombre asignado en el titulo de la ventana de la aplicación, además de los parámetros establecidos para tal.

Aunque hasta este momento tiene buena apariencia el GUI, en realidad no hace nada, dado que no hemos asignado ninguna función a los controles. 5.- Para asignar una funcionalidad al control “Edit Text” valla al kayak de la función como se a descrito. En la zona de la función teclee el siguiente código. msg= get(hObject,'string')

set(handles.text1,'string',msg) La primer línea de código quiere decir que el objeto en el que estamos trabajando y que es el “Edit Text” deseamos obtener un control sobre el, en ingles descrito como handles Object (hObject) y que obtendremos su contenido como tipo String y que este resultado será almacenado por la variable recién creada msg. La segunda línea de código tiene propiedades de asignación. Primero obtenemos el control o mando de la variable a la cual se asignara la variable msg por medio de handles más el objeto a controlar, de modo que el objeto “Static Text” será mandado desde otro objeto por medio de la llamada handles.text1. Así la asignación de texto desde este objeto tendrá por resultado la asignación de la variable msg como tipo String. Ahora corra la aplicación teclee un texto, presione enter o pulse con el Mouse fuera del área del objeto “Text Edit”. Como pudo observar el texto que usted escribe se reescribe en el objeto “Static Text”. 6.- Para asignar una funcionalidad al botón, tendremos algo muy parecido, solo que aquí no podemos insertar texto, por lo que debemos insertar un texto desde otro objeto o bien tener un texto especial para pasarlo al objeto “Static Text”. Por otro lado esta asignación también será realizada por otro kayak pero ahora del botón. En el kayak del botón escriba lo siguiente. msg = 'Hola mundo'

set(handles.text1,'string',msg) El código es casi idéntico pero aquí asignamos a la variable msg un texto explicito para la función.

Page 100: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

100

Observe como la asignación es idéntica para los 2 objetos, tan solo obtuvimos el manejo o control de la variable un momento y cambiamos su texto desde otro objeto. Objetos de selección Pop-up menú. Este tipo de botones sirve para la selección de opciones que contiene o dicho de otra forma, se puede establecer 1 o más opciones a seleccionar de este botón, donde cada una puede realizar diferentes acciones.

Lo primero que debemos hacer es establecer los nombres de las acciones que deseamos que aparezcan en este menú. En la parte de “Property Inspector” en la opción String, como se muestra en la imagen tiene una especie de block para escribir. Al dar clic en este block nos abre una opción para escribir en la cual por cada renglón que escribamos aquí nos dará una opción en el GUI. He escrito 6 opciones, con el nombre opción 1, opción 2,…, hasta el 6 para poder apreciar los resultados.

Al ejecutar el GUI tenemos precisamente los resultados de este GUI.

Como se puede observar las opciones que he escrito quedan representadas en el GUI, pero a decir verdad ninguna de estas opciones realiza ninguna actividad, solamente se a desplegado una visualización de las posibles opciones funciones que podrá realizar este GUI.

Para agregar funcionalidades a este GUI debemos hacer lo siguiente, con la ayuda de un switch. En el área designada para este objeto codificamos lo siguiente: val = get(hObject, 'Value' ); switch val case 1 % --- Acción que realizara esta opción

Page 101: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

101

case 2 % --- Acción que realizara esta opción case 3 % --- Acción que realizara esta opción case 4 % --- Acción que realizara esta opción case 5 % --- Acción que realizara esta opción case 6 % --- Acción que realizara esta opción end Para cada una de las 6 opciones se establece lo que realizara cada uno de los case’s. Por ejemplo asignar un valor diferente a una variable global, cambiar el color a un objeto, etc. Aplicación Pop-up Menu. Ahora crearemos un GUI que utiliza Pop-up menu 1.- Igual que antes creamos un GUI por default insertamos un “Pop-up menu” y un “Static Text” 2.- Anexamos por medio de la función “Property Inspector” en la propiedad String: valor 1, valor 2, valor 3 y valor 4. La etiqueta puede quedar tan solo con el String Texto Al correr y asignar un nombre la aplicación queda como:

A pesar de la funcionalidad del objeto en realidad todavía no realiza ninguna acción.

3.- Para establecer acción debemos crear un kayak ahora sobre el objeto Pop-up Menu. Una vez ahí vasta con asignar:

val = get(hObject,'Value');

switch val

case 1

valor = 10;

case 2 valor = 20;

case 3

valor = 30;

case 4

Page 102: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

102

valor = 40;

end

set(handles.text1,'string',valor); Al ejecutar el GUI podemos ver que cada que asignemos un valor diferente sobre el Pop-up Menu el valor de la etiqueta cambiara al asignado. Además las líneas de código para la asignación sobre la variable de la etiqueta sigue siendo la misma. Observe como se relacionan los objetos y piense de qué forma podría obtener variables de los objetos, además de cómo ocupar estas variables en determinada situación. Barras deslizantes Slider Este tipo de objetos tiene por objetivo mostrar una serie de datos previamente establecidos. Lo datos tienen un principio y un fin, además de que se tiene que configurar la forma en la que se recorrerá a la izquierda o derecha, esto es, el numero de incremento que tendrá al recorrer la barra. Podemos obtener el valor de este objeto de manera similar a las demás aplicaciones y por medio de la llamada a su manejador o controlador, handles, desde su kayak. value = get(hObject,'value');

set(handles.edit1,'string',value); Al ejecutar el GUI una serie de valores entre 0 y 1 son mostrados en la etiqueta. Para que a la vez podamos insertar valores desde la etiqueta al slider debemos un kayak donde insertamos las siguientes líneas de código en su zona correspondiente: msg= get(hObject,'string');

set(handles.slider1,'value',str2num(msg) ) De esta forma el valor de la etiqueta recaerá sobre el slider. El rango de valores de este slider muy posiblemente no sea el más adecuado para nuestros propósitos por lo seria muy bueno saber como cambiar estos datos. Dentro de las propiedades del slider por medio de la función “Property Inspector” podemos modificar los parámetros de forma conveniente para nuestras necesidades. Propiedad Descripción. Max establece el valor máximo posible que podemos tener para la barra. Min establece el valor mínimo. SliderStep por medio de porcentaje establecemos la proporción de movimiento de

cada paso del slider. Tiene dos valores, 1 para las flechas de cada extremo (x) y el otro para mover el slider entre la barra y cualquier flecha de los extremos (y).

Page 103: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

103

Por ejemplo supongamos que se requiere un slider que maneje un valor de 0 a 1000 y al momento de presionar las flechas de los costados el valor varíe en una unidad y al presionar entre el bloque deslizante y una flecha de los costados, varíe 10 unidades. Para lograrlo debeos establecer las propiedades de la forma siguiente: Propiedad: “Max” Nuevo Valor: “1000” Propiedad: “SliderStep ! x” Nuevo Valor: “0.001” Propiedad: “SliderStep ! y” Nuevo Valor: “0.01” Note como los valores del slider se calculan por medio de porcentajes ya que “x” en realidad lo ponemos como una milésima y a “y” como una centésima. Estas funciones son las mas importantes que podemos considerar en un GUI diseñado por nosotros, pero es muy importante mostrar resultados en graficas. Para ello en MatLab utilizamos funciones como Plot o Stem, pero si en un GUI tenemos más de 1 grafica debemos seleccionarla primero de modo que solo así escojamos sobre que grafica se expondrán nuestros resultados. Aprovecho este ejemplo para mostrar el uso de los objetos “Radio button” y de los muy prácticos objetos “Panel”, además de objetos “Axes” que son objetos donde se puede graficar. 1.- Crear un GUI por default, agregar primero un panel, sobre esto 2 radio button, además de 3 botones y 2 Axes que tenga una apariencia similar a la imagen.

Dentro del panel tenemos organizados los radio button de forma que nuestro cuenta con distintas zonas bien definidas. Los botones definirán una función graficar solo los Axes. Cada Radio button, al ser exclusivos tendrán la tarea de seleccionar el Axes correspondiente.

2.- Configuración de los objeto “Radio Button”. Deben ser exclusivos entre ellos, ósea que solo 1 debe estar activo al mismo tiempo. Configuración de radiobutton1

axes(handles.axes1) %con esto selecciona el eje a utilizar.

set(hObject,'value',1);

Page 104: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

104

set(handles.radiobutton2,'value',0); Configuración de radioButton2 axes(handles.axes2) % cambio de eje set(hObject,'value',1);

set(handles.radiobutton1,'value',0); 3.- Configuración de botones. pushbutton1. newplot % Con esta línea se reinicialaza el axes x = 0:pi/100:2*pi; y = sin(x); y2 = sin(x-.25); y3 = sin(x-.5); plot(x,y,x,y2,x,y3) legend('sin(x)','sin(x-.25)','sin(x-.5)') xlabel('x = 0:2\pi') ylabel('Seno de x') title('Graficando Funciones Senoidales','FontSize',12) pushbutton2 newplot t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t) axis square; grid on pushbutton3 newplot t = 0:.01:2*pi; polar(t,sin(2*t).*cos(2*t),'--r')

Page 105: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

105

Resultado final. Observe como se grafica sobre el plano que hallamos escogido. Las funciones de los botones son mera representación simbólica de lo que se puede graficar, de usted depende el alcance de la grafica. Variables globales y locales. Dado que trabajamos con archivos que contienen un número considerable de funciones y necesitamos almacenar valores debemos definir variables adecuadas. Las variables locales se definen a lo largo de la definición de una función; por el contrario las variables globales pueden ser llamadas por cualquier función. Las variables locales se definen como cualquier variable, solo las variables globales van antecedidas por la palabra reservada global. Un caso típico de su uso es cuando utilizamos el objeto Pop-up Menu ya que si es resultado de la evaluación del switch es almacenado en una variable global, este resultado podrá ser llamado fácilmente por otra función. Por cada función que requiera la variable global, tendrá que definirla de nuevo anteponiendo la palabra global. En caso que no anteponga la palabra, esta variable será considerada como local a pesar del hecho de tener el mismo nombre. Mensajes. Debemos tener interacción con el usuario de la interfase, tal como pedirle que inserte el nombre de un archivo, el número de interacciones o incluso el término del programa, entre otros. A veces es necesario indicarle que termino X función y que es resultado es Y. En MatLab existen varias funciones de dialogo las mas relevantes son.

Page 106: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

106

msgbox Muestra un dialogo con el usuario las llamadas habituales son: msgbox( 'Este es un mensaje para el usuario' );

msgbox( 'Mesaje con titulo' , 'TITULO' ); Además se puede especificar un tipo específico con un icono 'none', 'error', 'help', 'warn', or 'custom', esto como tercer argumento. Que ya no indican ciertamente un mensaje como tal sino más bien una ayuda o alerta. El valor por default es ‘none’. inputdlg Muestra un dialogo para introducir datos. El dato introducido es

regresado por la función para que pueda ser asignado a otra variable. answer = inputdlg( 'introduce el dato' ); answer = inputdlg( 'introduce el dato' , 'TITULO' );

Existen más diálogos, pero estos son los más interesantes.

Page 107: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

107

Los menús. Para la creación de los menús se debe tener en cuenta que a estos tienen propiedades que o están por default o se puede modificar. Algunas de estas propiedades las presento con el siguiente ejemplo: salir = uimenu( 'Label' , 'Ejemplo' );

Hasta aquí nombramos el menú y tiene ahora una etiqueta con el nombre principal A partir de que fue creado este menú pueden agregarse submenus u opciones desplegables. uimenu(salir, 'Label' , 'Salir' , 'Callback' , 'close(gcf)' , ... 'Separator' , 'on' , 'Accelerator' , 'Q' );

Con esta instrucción se agrega la etiqueta Salir, con la función cerrar ventana, marcando una separación entre estos y con un acelerador que es un acceso rápido a esta opción y que se logra presionando CTRL + Q (en este caso fue Q).

Menús en funcionamiento.

Page 108: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

108

Bibliografía. Ayuda de MatLab 7.4. Comentarios La edición de cada una de los botones y la forma en la que están colocados depende del programador y de la lógica del programa.

Todas las imágenes fueron obtenidas por copia de la pantalla de la ejecución de MatLab 7.4 y editadas por Adobe PhotoShop cs2.

Page 109: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

109

Apéndice B

Mi primer GUI desde cero en MatLab 7.4. Introducción : Este GUI tan solo tiene por objetivo mostrar alguna funcionalidad algunos componentes. Para ello mostrare la creación de un GUI desde el comienzo. 1.- Para la creación de este GUI, desde la línea de comando mande llamar a la función guide para comenzar un nuevo y default GUI.

2.-En el área de trabajo agregue dos controles, un Edit Text y Uno static Text. 3.- Cambie el Texto por defecto del control Edit Text por: “Escriba Aquí”, modificando: Propiedad: “String” Nuevo Valor: “Escriba Aquí” 4.- Haga mas ancho el control. Coloque el mouse sobre uno de los rectángulos del control y estirelo. O También: Propiedad: “Position � Width” Nuevo Valor: “20”. 5.- Modifique es texto del control Static Text, A “<<Mensaje>>” y estirelo: Propiedad: “String” Nuevo Valor: “<<Mensaje>>” Propiedad: “Position � Width” Nuevo Valor: “20”. 6.- Ejecute su GUI.

Presione y como no se ha grabado la interfaz, aparecerá un dialogo avisándole que no lo ha gravado, gravelo con el nombre deseado y entonces se ejecutara el GUI. Recuerde que el nombre debe ir sin espacios y debe tener un tamaño inferior a 63 caracteres. Contemple su interfaz, deberá lucir similar a la siguiente figura:

Page 110: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

110

7.- Ahora Crearemos una función que al presionar Enter o una vez ya activo el control y presionemos fuera de el, se llame. Este evento invocará a la función “Callback”. Coloque el mouse sobre el control, presione el botón derecho, Expanda “View Callbacks” y escoja “Callback”. Entonces aparecerá la ventana de edición de archivos-M. Estará ya colocado en la línea de la función correspondiente al control. Puede verificar el nombre: function edit1_Callback(hObject, eventdata, handles) Escriba el siguiente código en su área correspondiente a este control: msg = get(hObject, 'string' ) set(handles.text1, 'string' ,msg) 8.- Ejecute el Programa y Escriba en el Edit Text: “Hola Mundo” y presione enter. Deberá tener el siguiente resultado.

9.- Tire un Control Panel en el área de trabajo, cambie su nombre a Panel 1. Acomode los objetos de tal manera que luzcan de la siguiente manera:

Page 111: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

111

10.- Agregue al Área de Trabajo un Panel, un Slider y un Edit Box. Ordénelos de la siguiente manera.

11.- Agreguemos código que al deslizar el slider, el valor de este se presente en el Edit Box, y valor del Edit Box se represente en el slider al presionar sobre el Edit Box el Botton derecho. Valla a la función de llamado “CallBack” del slider y escriba el siguiente código: value = get(hObject, 'value' ); set(handles.edit2, 'string' ,value); Vaya a la función de llamado “CallBack” del edit text y escriba el siguiente código: set(handles.slider1, 'value' ,str2num(get(hObject, 'string' ))) 12.- Ejecute la Figura. Y Realice pruebas con ella:

Page 112: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

112

13.- Supongamos que se requiere que el slider maneje un valor de 0 a 1000 y al momento de presionar las flechas de los costados el valor varié una unidad y al presionar entre el bloque deslizante y una flecha de los costados el valor varié 10 unidades. Para lograr estos efectos se requiere modificar las siguientes propiedades: Propiedad: “Max” Nuevo Valor: “1000” Propiedad: “SliderStep ! x” Nuevo Valor: “0.001” Propiedad: “SliderStep ! y” Nuevo Valor: “0.01” X indica el % de cambio al presionar las flechas. Y indica el % de cambio al presionar entre el bloque y la flecha de un costado. Nota: Los valores en SliderStep son valores que se calculan a partir del porcentaje de cambio, como en x el cambio es de una milésima se indico el valor 0.001 y el cambio de y es de un centésima se indico el valor de 0.01. 14.- Agregue un Control Push Botton, y modifique la siguiente propiedad. Propiedad: “String” Nuevo Valor: “Lema UAM” Propiedad: “Position ! Width” Nuevo Valor: “15” 15.- Escriba en la función de llamado Callback del Push Botton, el siguiente código: Warndlg ('Casa abierta al tiempo..!','Lema de la UAM') 16.- Ejecute la GUI. Y se mostrara un dialogo de aviso con el lema de la UAM.

17.- Introduzca en el área de trabajo un Panel y un Toggle Button, modifique los siguientes atributos de los controles: Control: togglebutton1 Propiedad: “String” Nuevo Valor: “Habilitar Boton” Propiedad: “Position � Width” Nuevo Valor: “20” Control: Panel Propiedad: “Title” Nuevo Valor: “Panel 3”

Page 113: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

113

Control: pushbutton1 Propiedad: “Enable” Nuevo Valor: “off” 18.- Escriba el siguiente código en la función Callback del control togglebutton1. if get(h,'value') == 1

set(handles.pushbutton1,'enable','on') else

set(handles.pushbutton1,'enable','off') end El objetivo de este código es habilitar o deshabilitar el control pushbutton1 dependiendo del estado de togglebutton1. 19.- Ejecute la figura y verifique su funcionamiento. observe como se desactiva la opción del Push Button y no es posible ejecutar su funcionalidad. 20.- Agregue un Checkbox y un Panel, y programemos el checkbox para cuando este marcado pinte el color de fondo. Modifique las propiedades del checkbox: Propiedad: “String” Nuevo Valor: “Verde el Fondo” Propiedad: “Position � Width” Nuevo Valor: “20” Modifique las propiedades del Panel: Propiedad: “Title” Nuevo Valor: “Panel 4” Los elementos deben estar ordenados de la siguiente manera.

Page 114: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

114

21.- Escribamos el siguiente código en la función de llamado Callback del control Checkbox1: 22.- Ejecute la figura y verifique que funcione.

23.- Ahora utilizaremos el control Popup Menu, Inserte un control Popup, Static Text y un Panel. Cambie los atributos de los siguientes objetos: Control: text2 Propiedad: “String” Nuevo Valor: “Color del Fondo de la Pantalla” * Propiedad: “Position ! Width” Nuevo Valor: “20”

Page 115: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

115

*Escriba este valor en dos líneas con ayuda del editor de String del Property Inspector. Control: popupmenu1 Propiedad: “String” Nuevo Valor: Amarrillo Morado Cielo Rojo Verde Azul Blanco Negro Ordene los controles para que luzcan de esta manera:

24.- En el Callback del Popup menú escriba lo siguiente: color = { 'y' ; 'm' ; 'c' ; 'r' ; 'g' ; 'b' ; 'w' ; 'k' }; whitebg(char(color(get(hObject, 'value' )))) 25.- Ejecute la figura. Y verifique que funcione

Page 116: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

116

26.- Hará una lista de números seleccionables a través de 3 Radios Buttons, donde cada Radio desplegara un conteo diferente el Listbox. 27.- Inserte en el área de trabajo un Panel, un Listbox, un Static Text y 3 Radio Button. Modifique los siguientes atributos: Control: text3 Propiedad: “String” Nuevo Valor: “Contando..” Control: radiobutton1 Propiedad: “String” Nuevo Valor: “1 al 10” Propiedad: “Value” Nuevo Valor: “1” Control: radiobutton2 Propiedad: “String” Nuevo Valor: “100 al 200” Control: radiobutton3 Propiedad: “String” Nuevo Valor: “5 en 5 al 50”

Page 117: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

117

Nota: Es importante tomar en cuenta que se tiene que controlar manualmente la exclusividad de cada uno de los Radio Button, es decir, que al seleccionar uno de estos se debe también cancelar en esa parte la actividad de los demás, de forma que solo quede uno activo, o bien, la forma en la que convenga. Por lo tanto será necesario agregar el siguiente código a las funciones callback del los tres radio botton. Control: radiobutton1 Función: Callback serie = 1:1:10; set(handles.listbox1,'string',serie) set(handles.radiobutton1,'value',1) set(handles.radiobutton2,'value',0) set(handles.radiobutton3,'value',0) Control: radiobutton2 Función: Callback serie = 100:1:200; set(handles.listbox1,'string',serie) set(handles.radiobutton1,'value',0) set(handles.radiobutton2,'value',1) set(handles.radiobutton3,'value',0) Control: radiobutton3 Función: Callback serie = 0:5:50; set(handles.listbox1,'string',serie) set(handles.radiobutton1,'value',0) set(handles.radiobutton2,'value',0) set(handles.radiobutton3,'value',1) 28.- Ejecute la figura. Y verifique que funcione. 29.- Notara que cuando empieza la GUI no tiene datos en el listbox. Para dar este efecto será necesario agregar código a la función de llamado CreateFcn del ListBox de esta manera lo inicializaremos. serie = 1:1:10; set(hObject,'string',serie)

Page 118: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

118

30.- Ejecute la figura. Y en esta ocasión si tendrá datos iniciales.

La imagen anterior muestra algunas de las funcionalidades básicas de un GUI, espero que esto le pueda servir de guía para la creación los suyos, aunque por ultimo anexo un menú el cual tiene la tarea de cerrar adecuadamente la aplicación.

Al presionar el botón se abre ahora un editor de menús. Debemos modificar los siguientes parámetros. El primer menú etiquetado será la pestaña principal de hay se obtienen sub derivados que es lo que desplegara este menú al presionarlo. El Atributo Label tendrá por nombre “Menu”. Al crear esta primer etiqueta ya tendremos acceso a la creación de submenús. Creamos uno y damos ahora en el atributo Label el nombre de “Salir”. El valor de “Accelerator” es una letra con la cual al presionar CTRL+”letra” obtenemos un acceso rápido a la aplicación u opción. Además de poner nombre y acceso rápido también podemos dar una funcionalidad. En este caso tal funcionalidad tiene por nombre: delete(gcf).

Page 119: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

119

Guarde los cambios y observe el resultado final. GUI final.

Page 120: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

120

Bibliografía. Ayuda de MatLab 7.4. Comentarios La edición de cada una de los botones y la forma en la que están colocados depende del programador y de la lógica del programa.

Todas las imágenes fueron obtenidas por copia de la pantalla de la ejecución de MatLab 7.4 y editadas por Adobe PhotoShop cs2.

Page 121: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

121

Apéndice C Interfaz grafica de usuario GENERADOR DE SONIDOS.

Esta interfaz se encuentra anexa a este proyecto en un archivo. Debe ejecutar el archivo principal.m para iniciar la funcionalidad de la misma.

Page 122: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

122

Introducción. La creciente utilización de elementos y conocimientos realizados en MatLab queda resumido de alguna manera en este GUI. El hecho de representarlo visualmente sirve de manera adecuada para generalizar los avances realizados a lo largo de este proyecto. Se da una descripción de cada ventana donde se explica el funcionamiento de cada una de ellas. Para cualquier duda consulte la ayuda de cada ventana.

Interfaz de usuario GENERADOR DE SONIDOS. Esta interfaz cuenta con una ventana principal que despliega lo siguiente.

Titulo de la ventana, 1 imagen de nuestra casa de estudios y un menú de pestañas con opciones a escoger de las diferentes funcionalidades realizadas en este GUI.

La primera pestaña contiene 3 opciones: Teclado, frecuencias y salir, donde Teclado es una ventana como la siguiente: Ventana teclado

Ventana de Teclado (ALT+T). Muestra diversas entras, es importante inicializar la tasa de muestreo y la duración o tiempo de las notas de serán tocadas por la simulación de teclado.

Page 123: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

123

Una vez inicializadas estas entradas es ahora posible teclear en los botones que simulan ser teclas de un teclado real.

Las frecuencias de las notas musicales de este teclado nota frecuencia (Hz) C o Do (C medio) 261.63 C#, Db 277.18 = 261.63*2(1/12) D o Re 293.66 D#, Fb 311.13 E o Mi 329.63 F o Fa 349.23 F#, Gb 369.99 G o Sol 392.00 G#, Ab 415.30 A o La 440.00 A#, Bb 466.16 B o Si 493.88 C o Do 523.25 Es importante mencionar que aunque es posible modificar la tasa de muestreo en cualquier instante, no es recomendable ya que al escuchar los sonidos con el botón "escuchar" tendrá sonidos con diferente frecuencia y esto provocara que la función sound de MatLab cambie los sonidos por la interpretación dada, ya sea alargándolos y bajando el tono o acortándolos y subiendo el tono. Lo recomendado es fijar desde un principio este valor y evitar ambigüedades. También es bueno experimentar que pasaría se este valor cambiara de forma que te pueda ayudar en entender la interpretación de esta funcionalidad. El tiempo de la nota puede ser cambiado en cualquier momento y tiene una interpretación con nombre musicales como: Redonda = 4 segundos Blanca = 2 segundos Negra = 1 segundo Corchea = 0.5 segundos Semicorchea = 0.25 segundos Se especifica una duración constante de tiempo aunque en realidad estas notas trabajan tomando una porción de una nota de BIT (la negra), donde existe un valor extra que es los Bits por minuto (BPM) y que especifica cuantas de estas notas se tocaran en un minuto. Redonda = 4 Negras Blanca = 2 Negras Negra = 1 Negra Corchea = ½ Negra Semicorchea = ¼ Negra Que es lo mismo al proyecto si tomamos 60 Negras por minuto

Page 124: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

124

Con los botones a la izquierda de nombre “Escuchar mono” y “Escuchar estereo” es posible escuchar la secuencia de tonos que hayas tocado o si ya te sabes una canción toca la secuencia para que la conviertas en una melodía. El primer botón ejecuta la canción como lo indica (en mono aural) y que es exactamente la canción que tu tocaste, pero so tocas el otro botón entonces se ejecutar la misma canción pero en esta ocasión será en sonido estereo, donde en un lado de la bocina se escuchara tu canción tal cual y del otro lado la misma canción pero una octava más arriba (una octava hacia arriba es justo el doble de la frecuencia). Para grabar esta melodía debes ponerle un nombre primero y después presionar el botón “Record”. Es importante mencionar que solo se graba lo que se toco con el último botón con el que escuchaste la melodía, o sea, en mono o en estereo, el programa indica como se grabo por medio de un mensaje. Para cargar una grabación. Esta funcionalidad sirve para cargar archivos que se hayan guardado como mono y que hallan sido creados con esta misma funcionalidad. Para proteger esto, los archivos mono se guardan en otra carpeta con el nombre de Mezclas. Una vez especificado el nombre del archivo que se debe de cargar y que obviamente exista, se presiona el botón “Cargar grabación”. Esta carga se puede escuchar con el botón “Escuchar” que esta del lado derecho. Debes borrar la canción del teclado con el botón “Reiniciar grabación” y crear una diferente, esto con el fin de que no se ejecute lo mismo al momento de escuchar la mezcla que se escucha con el botón “Escuchar mezcla”. La mezcla puede también ser guardada con el nombre que desees. Ventana Frecuencias.

Ventana Frecuencias (ALT+F). Grafica la frecuencia indicada y ejecuta su sonido.

Page 125: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

125

Tal como puedes observar esta funcionalidad cuenta con campos que se pueden llenar o modificar. El campo de frecuencia tal como se indica, recibe determinada cantidad de Hz. Viene un valor por default de 440. Ya que se inicializo la tasa de muestreo es posible escuchar la frecuencia dada en este campo con el botón “Sonido” Una vez escuchado también es posible graficar la frecuencia, determinando que cantidad de puntos serán mostrados en la grafica de forma que se tiene que escoger el valor inicial y final de la grafica, esto con el fin poder observar los detalles de esta frecuencia. Aunque no es necesario e puesto un valor que representanta de forma explicita cada muestra con respecto a la tasa de muestreo, esto con el fin de mostrar más detalles de la grafica. Al grabar ka frecuencia se guarda como “tono.wav”.

El siguiente menú es de efectos. Este menú trabaja con efectos tales como imitar una campana, tremelo y vibrato. Y otra función que donde se afecta a los sonidos grabados con tremelo, vibrato y una funcionalidad extra que toca el efecto al revés. Ventana campana.

Ventana campana (ALT+C) Esta funcionalidad imita el sonido de una campana.

Page 126: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

126

Para ejecutar el efecto de una campana se utiliza la siguiente función matemática:

x(t) = A(t) cos [2π fc t + I(t) cos(2π fm t + φm) + φc ] donde A(t) es la variación de amplitud o envolvente que varía con el tiempo para conseguir efectos más realistas. fc es la frecuencia que se obtendría sin modulación FM y se denomina frecuencia de la portadora. fm es la frecuencia de la modulación y expresa la rapidez de variación de la frecuencia instantánea. Los parámetros φm y φc son constantes arbitrarias, usualmente con valor φm = -π/2 y φc = 0. I(t) se denomina técnicamente índice de modulación del envolvente y se utiliza para variar el contenido en armónicos del sonido del instrumento. Cuando I(t) es pequeño se generan principalmente los armónicos con frecuencias bajas y cuando I(t) es grande se producen también los armónicos superiores. De esta manera se consigue que el contenido en armónicos varíe en con el tiempo. Envolventes A(t) e I(t) con decaimiento exponencial:

con A(0) =1. La tabla que aparece a continuación muestra algunos ejemplos para generar algunos sonidos de una campana.

Caso fc(Hz) fm(Hz) I(0) τ(seg) dur (seg) 1 110 220 10 2 6 2 220 440 5 2 6 3 110 220 10 12 3 4 110 220 10 0.3 3 5 250 350 5 2 5 6 250 350 3 1 5

Para generar un sonido, basta con que el usuario introduzca los valores correspondientes a cada uno de los valores y posteriormente reproducir el sonido con el botón “REPRODUCIR”, esta opción también cuenta con el grabado de la señal con el botón “GRABAR”. Y graba la campana escuchada como campana.wav. El botón “DEFAULT” es un reinicio de datos a los originales de forma que si el usuario inserto datos no adecuados presione este, para volver a un estado estable. Ventana v_tremelo

Ventana v_tremelo (ALT+T) Esta funcionalidad ejecuta el efecto de tremelo, lo graba y muestra su grafica.

Page 127: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

127

Tremelo es la variación de la amplitud de un tono por una señal senoidal de frecuencia baja. En términos matemáticos:

x(t) = sin (2π fm t ) sin (2π fc t ) dónde fc es la frecuencia de la señal senoidal subyacente, o frecuencia de la portadora; fm es la frecuencia moduladora, con fm << fc ; La frecuencia de muestreo, fs, es tomada con fs > 2 fc para asegurar que se satisface el criterio de Nyquist. Como podemos observar en la ventana v_tremelo, el usuario debe de escoger los valores para la Duración, Fs, Fm y Fc y presionar el Botón REPRODUCIR para escuchar el efecto, si lo desea puede GRABAR el sonido. La funcionalidad graba el sonido como tremelo.wav.

Ventana v_vibrato

Ventana v_vibrato (ALT+V) Muestra la pantalla para generar el efecto de Vibrato los campos que se usan son similares a la pantalla Tremelo, a excepción que se incorpora el índice de modulación.

Vibrato es la variación de la frecuencia del tono por una señal senoidal de frecuencia baja. En términos matemáticos:

x(t) = sin [2π fc t + m sin (2π fm t )]

Page 128: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

128

Ventana efectos.

Ventana efectos (ALT+S) En esta funcionalidad trabajamos directamente con archivos creados anteriormente y se pueden aplicar los efectos mostrados.

El primer paso en la utilización de esta ventana es la selección del sonido con el que trabajaremos. Una vez hecho esto debemos escuchar el sonido de forma que se cargue en la aplicación. Después que lo hemos escuchado es posible aplicar los efectos descritos en los botones tal como: vibrato tremelo voltear. Se puede realizar la grabación de estos efectos, donde solo se graba lo ultimo que se toco y con los nombres vibrato.wav, tremelo.wav y revez.wav. No se graba la grabación original porque ya esta grabada. Al momento de pulsar la tecla de efecto se grafican las muestras y se observan los cambios que realiza cada aplicación. Alternativamente cambia los valores de Fm y m pero vuelve a leer la parte de tremelo y vibrato que esta en la parte superior de este documento.

Page 129: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

129

El menú graficas. Contiene las opciones espectro y sumaTonos. La ventana espectro.

Ventana espectro (ALT+E) Evalúa por medio de fft el espectro de la señal

Se debe seleccionar el archivo previamente grabado y un valor para n de forma que la aplicación quede inicializada. Una vez inicializada presionamos el botón “GRAFICAR” con lo cual la aplicación mostrara el espectro de sonido. La aplicación mostrada automáticamente el número de puntos del vector de sonido y el número de tasa de muestreo. También al pulsar el botón “VALOR MAXIMO” se muestra el valor máximo y corresponde a la frecuencia más significativa.

Page 130: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

130

Ejemplo de la ejecución de la ventana espectro. Se observa el número de puntos del vector, la tasa de muestreo y el espectro . Sonido = beethoven.wav. N = 32768

Ventana sumaTonos:

Ventana sumaTonos (ALT+G) Esta ventana trabaja con una suma de 4 posibles frecuencias, mostrando el resultado

Esta función grafica independientemente 4 posibles frecuencias y calcula la suma de estas en la grafica inferior. Al mismo tiempo es posible escuchar cada sonido de forma individual o la mezcla de todos. Lo primero que debemos hacer es escoger una tasa de muestreo. Después debemos insertar en el campo correspondiente la frecuencia en Hz necesaria que deseamos graficar. Esta funcionalidad grafica las frecuencias de forma separada y la suma en la parte inferior. Si por alguna razón no se requiere alguna frecuencia solo se debe poner un 0. Se puede escuchar cada sonido de forma individual o la mezcla de sonidos. Se puede grabar solo la mezcla con el nombre que se desee.

Page 131: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

131

Se puede seleccionar el punto inicial y final de la grafica de forma que se puedan apreciar los detalles.

Ejemplo de la ejecución de la ventana sumaTonos.

Además, como elementos finales tenemos la opción de filtros dentro de la ventana de Efectos.

Esta opcion tiene efectos de filtrado paso- bajo, paso-alto, pasa-banda y rechaza-banda. Es importante decir que deemos seleccionar el sonido que deseamos escuchar para posteriormente esucharlo y ahora si filtrarlo.

Page 132: Proyecto terminal Alumno: Sánchez García Angel Fabricio ...148.206.53.233/tesiuami/UAMI14562.pdf · Alumno: Sánchez García Angel Fabricio Profesor: John Goddard Close Efectos

132

La primera grafica muestra las frecuencias de la señal original de forma que el filtro esta en el centro y ademas el resultado del proceso de filtrado esta en la ultima grafica. Se puede apreciar claramente como se pierden frecuenicas graves dado que aquí pulse sobre un filtro pasa bajos. Dentro del menu frecuentas tenemos una opcion llamada Series de Fouier. Esta opcion calcula por la respectiva aproximación de Fourier y la representa gráficamente. Ademas se pueden escuchar las muestras de la señal original y de la aproximación, de forma que no solo tenemos una aproximación visual, sino también auditiva.

Este GUI fue elaborado con MatLab 7.4