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 |
"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 .
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
:
Mediante la velocidad de muestra :
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
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
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.
ResponderEliminarMuy buen trabajo, muchas gracias por compartir
ResponderEliminar