domingo, 11 de marzo de 2012

Interfaz de Procesamiento de Datos

los datos generados por los instrumentos serán enviados a la computadora mediante comunicación serial , Para luego ser procesados en labview y así, generar los sonidos correspondientes .La interfaz en labview estará delimitada por dos procesos : Adquisición de datos y Reproducción de sonidos a partir de los datos

Adquisición de datos : 







Se usa los drivers VISA para recibir los datos serial . ajustando  los baudios de transmisión, cantidad de bits ,bits de paridad etc  . Para este caso se transmite a 115200 baudios 8 bits sin bit de paridad por lo que la configuración de visa se puede usar la de por defecto y solo cambiar la velocidad de transmisión y escoger por cual puerto se esta transmitiendo .

Como protocolo simple de practica se usa " 0xF0--Dato1---Dato2--0xFE " por lo que se hace un ciclo de espera del primer byte que seria 0xF0 . una vez obtenido este valor se sale del siclo while realizado para leer los 3 bytes siguientes . De los 3 bytes se espera que el ultimo sea 0xFE asi se procede a graficar los datos ( usado como muestra que se esta recibiendo bien la información ) y teniendo la adquisición esperada.

Procesamiento de datos y reproducción de sonido: Los datos obtenidos por lo general serán referentes a la nota que se quiere tocar y en el caso del theremin el volumen de esta, que controlaran los datos de un .wav del sonido esperado. Por lo que primero se realizaron pruebas de un sintetizador .

Construcción del sintetizador : 


Se comenzó primero que la reproducción de un tono continuo en labview


Diagrama Completo 
Configuración de la tarjeta de sonido

Reproducción de la onda

Se configura la tarjeta de sonido para que opere a cierta cantidad de muestras por segundo que se dividen en 4 para colocarlos que la tarjeta opere de esta forma . A su vez se le aplica el formato del sonido que seria la tasa de muestreo( sample rate)   los canales del sonido y el numero de bits por muestreo . Una vez ya configurada la tarjeta se usa el vi de generador de ondas senoidales del labview que requiere que se le envié la tasa de sampling a la que se esta trabajando para generar la onda y la frecuencia de forma normalizada a partir de la tasa de muestreo . Una vez ya configurado el generado , este envia datos a la tarjeta de sonido para que se escriban y se reproduzcan , generando el sonido de un tono que, dentro de una estructura de while como la que se tiene reproduce continuamente 

"Superado el sonido continuo , ahora a realizar sonidos con un .wav y modifiar la frecuencia para generar distintos tonos " 

Apertura de un .wav en labview :




De izquierda a derecha : los tres primeros iconos son usados para genererar un enlace de dodne esta el .wav a abrir , asi no se esta colocando cada vez que se quiera usar el proyecto . Esto genera un path que va   al subvi (cajita con signo de pregunta) y que transmite la información del .wav usado ,es decir,tasa de muestreo , nuemero de  muestras asi como numero de bits por muestra . de acá se extrae del cluster de información creado mediante un "unbundle by name " la tasa de muestreo que se pasa de un double a un int para asi tener las muestras que necesita la tarjeta de sonido y reproducir . Al mismo tiempo se abre el archivo .wav y con el subvi de "sound file read" pasando previamente por el vi de "sound file read format" , se obtienen los datos que se quiere reproducir en un cluster que contiene los dos canales por lo que se des-indexa y se saca la información de un canal y ya se tiene la data a transmitir . configurando la tarjeta de sonido como se hizo con la onda continua y escribiendo la data obtenida del .wav en la tarjeta de sonido se logra la reproducción del .wav     


Ideas de sintetizacion : 

   
Mediante Modulacion SSB ( Single side band ) :


una vez ya obtenido el sonido a reproducir lo que faltaría seria escalarlo en el tono que se desee( Como se tiene una lira no se necesita mantener el sonido sino que sera como la pulsacion de una tecla y el theremin son ondas senoidales variando en frecuencia por lo que no se piensa en el sostenido para estos instrumentos pese a que el theremin es un sonido sostenido pero se puede realizar con el generador de ondas )  . Escalar un tono seria mover en frecuencia un tono base a la frecuencia requerida . Si se hace una modulación de banda lateral se obtendria el escalado del sonido

Modulacion SSB :

http://cnx.org/content/m15467/latest/


Ahora bien, la modulacion SSb se necesita transformar en hilbert el tono a modular por una via y modularlo con un seno . de la misma manera modularlo con un Coseno y luego sumar ambas señales y se obtiene la señal modulada en SSB . Esto en labview se tendría que hacer , o todo en el dominio del tiempo o todo en el dominio de la frecuencia por lo que se pensó en una modulacion DSB y luego aplicar un filtro pasa alto o pasa banda con frecuencia de corte en la portadora .


Boceto  de la SSB

En labview :






Se agarran los datos de audio obtenidos del .wav y se multiplican por una onda senoidal y luego se pasan por un filtro pasabanda y asi se obtiene la señal de salida modulada SSB (se hace lo del boceto) ,se tienen espectros de cada señal en cada una de las etapas para ir viendo el proceso

Subvi de filtro :


Se usa un filtro de respuesta de pulsos finitos FIR con uan ventana de tipo Hamming y se le aplica un numero de coeficientes igual a 1000 ( a partir de 300 queda bien ) . Con una cantidad alta de coeficientes el filtro se aproxima mucho a un filtro ideal . El subvi consta de el generador de coeficientes del filtro fir y luego la modalidad de uso que en este caso seria cascada . De esta forma se tiene un buen filtrado de cualquier señal.Para el caso de filtro de SSB la frecuencia de corte debe ser la misma que la de la portadora proporcionando un filtro movible y generando el efecto de la SSB  esperado . La frecuencia de muestreo debe ser la mitad de la del .wav

Subvi Generador de espectros para graficacion :
Para ir viendo los cambios en frecuencia se uso este Vi , así al conectar con indicador tipo onda se tiene el espectro ya escalado de la señal



Puesta en marcha de la SSB :


Se realizo la corrida del sistema y funciono correctamente , el sonido se escalo como se deseaba pero, a medida que se aumentaba la frecuencia a la que se quería escalar la señal de salida se iba atenuando , al punto que se perdia del todo . Se pararon las pruebas por esta via y se comenzaron a realizar variaciones de tono mediante la velocidad de muestras . El problema se cree que puede estar en la forma de los filtros uqe hacen que la onda se atenue . con mayor manejo de labview y haciendo un filtro ideal con un string de valores 8 tipo como si fuese Matlab ) puede que se acomode el desperfecto y pueda funcionar
Señal modulada 10Hz Efecto tremolo y espectro correcto 




señal escalada con mas frecuencia , se comienza a atenuar la salida 

:
escalando con 500Hz mas ,ya el espectro casi se pierde 


Mediante la velocidad de muestra :



Aplicando la apertura del .wav y luego modificando su velocidad de muestreo se acelera o se desacelera el sonido que, para intervalos pequeños es similar a escuchar que el sonido varia en frecuencia por lo que es una buena aproximación y que sera usada para generar las variaciones de sonido de la lira . El theremin se realizara mediante ondas senoidales pero con una cantidad de muestras pequeñas así se aproxima a lo que seria una variación de frecuencia real de este instrumento 


2 comentarios:

  1. Hey pongan un contador de visitas! y cambien el título del blog para que los puedan conseguir en Google. Algo así como "Proyecto: instrumentos musicales electrónicos", y lo que tienen en el título ahora lo ponen en la descripción.

    ResponderEliminar
  2. Muy buen trabajo, muchas gracias por compartir

    ResponderEliminar