Afinador Digital de Instrumento

From Qi-Hardware
Jump to: navigation, search

Integrantes del grupo de trabajo:
Carlos Manuel Romero Rojas .9
Leonardo Muñoz Muñoz 1.0
Ingeniería Electrónica
Universidad Nacional de Colombia Sede Bogotá

Contents

[edit] Calificación

Porcentaje Presentación 20% Informe 30% Funcionamiento 50%
1 Entrega 10% 0.5 0.5 0.5
2 Entrega 30% 1.7 1.7 1.7
3 Entrega 20% 3 4 4
4 Entrega 40% 4 4 4

[edit] PROYECTO ELECTRÓNICA DIGITAL 2:

Un afinador que tendrá un micrófono para obtener el sonido del instrumento, ese sonido será muestreado para ser procesado por el dispositivo, lo cual debe hacerse en tiempo real. El afinador analizará el sonido a nivel de frecuencia para así poder determinar la correcta afinación del instrumento. tambien contará con una interfaz de usuario compuesta por una pantalla LCD y un teclado matricial, en donde el usuario podrá seleccionar si desea afinar con base en una nota real o si desea seleccionar la configuracion para un instrumento determinado.



[edit] ESPECIFICACIONES


TEMPORALES:
el afinador funcionará en tiempo real; recibirá una señal de audio durante cierto tiempo (aún por definir) entregada por el usuario y casi instantáneamente imprimirá en pantalla la afinación.


ELÉCTRICAS:
el micrófono mediante el cual se realizará la entrada de la señal de sonido nos proporcionará una onda del orden de decenas de milivoltios, por tanto será necesario implementar un amplificador de audio (digital o análogo) que interactuará con los demás dispositivos.


FÍSICAS:
el dispositivo será elaborado con un tamaño poco más grande al de la tarjeta SIE, deberá incluir el micrófono, el preamplificador, etc. estos últimos dispositivos irán ubicados en una terjeta "hija" cuyo tamaño tentativo será aproximadamente de 6cm x 4cm


FUNCIONALES:
El afinador como dispositivo contendré las siguientes secciones:


  • TECLADO MATRICIAL: tendrá 16 teclas con el objetivo de crear la comunicación usuario-afinador (se emplearán 16 teclas puest necesitamos como mínimo 12 para "acaparar" las notas musicales en su totalidad).
  • CONVERSOR ANÁLOGO.DIGITAL A/D: Recibe la señal análoga proveniente del micrófono y la transforma en una señal digital.
  • MEMORIA ROM: almacena datos de programacion del dispositivo (solo lectura).
  • MEMORIA RAM: en esta se almacenará de forma temporal la señal de audio antes de ser procesada por el módulo de FFT, y luego recibirá la información proveniente del blóque FFT la cual será leida por el procesador.
  • FFT (Fast Fourier Transform): toma la señal digital para operarla y regresar datos de frecuencia a la RAM.
  • CONTROLADOR DE TECLADO MATRICIAL: recibe datos del teclado los cuales codifíca antes de enviarlos al procesador.
  • CONTROLADOR DE PANTALLA: recibe los datos del sistema y los decodifica antes de ser enviados a la pantalla para poder ser visualizados por el usuario.
  • LCD: Será el dispositivo mediante el cual se visualizarán los datos de afinación en lenguaje entendible para el usuario



[edit] DIAGRAMA DE FLUJO DE FUNCIONAMIENTO DEL DISPOSITIVO:



diagrama de flujo del dispositivo


El usuario deberá tomar una de 2 opciones al iniciar a manipular el afinador: escojer un instrumento específico (que puede o no tener una afinación especial) o elegir la opción de "nota real" en la que se imprimirá la afinación del instrumento del usuario respecto a el registro de un piano común. Sea cual sea la elección existirá un lapso durante el cual el usuario tocará y el dispositivo se encargara por medio de la FFT de discrminar frecuencias a fin de obtener el tono respectivo e indicar si corresponde a alguno de los armónicos de las 12 notas existentes. Si la persona escoje la primera opción (el afinador podría tener una lista con algunos de los instrumentos más comunes) el dispositivo empleará una relación mediante la cual se determinará la correcta afinación del instrumento y de acuerdo a ella se mostrarán los resultados en pantalla. Con la opción de "nota real" el proceso será más sencillo: se recibirá el sonido y simplemente se determinará su tono (frecuencia) mediante FFT para finalmente imprimir en pantalla













[edit] DIAGRAMA DE BLOQUES


Diagrama de bolques general.jpg


[edit] DIRECCIONES DE MEMORIA



LCD 0XF0040000
registro de configuración 0XF0040040
registro de control 0XF0040048


TECLADO MATRICIAL 0XF0030000
registro de salida 0XF0031048
registro de barrido 0XF0031068
registro de accionamiento 0XF0031088


ADC 0XF0032000
Para este módulo se emplearán las siguientes divisones de memoria:
0XF0032008 reg CS / 1 bit
0XF0032010 reg DI / 1 bit
0XF0032060 reg dato_ADC / 10 bits
0XF0032068 reg ADC_buf_end / 1bit
0XF0032070 EOC / 1 bit
0XF0032090 reg [3:0]contfig=0
0XF00320B0 reg [3:0]contdat=0
0XF00320F4 reg [5:0]posmem=0
0XF00334F4 reg [9:0] fun [63:0]
0XF0033544 reg [9:0] dats=0
0XF0033564 reg [3:0]conf=0
0XF0033584 reg [3:0]counter=0


FFT 0XF0020000
Para este módulo se emplearán las siguientes divisones de memoria:
0XF0023200 reg [63:0] akr
0XF0023400 reg [63:0] aki
0XF0023430 reg [5:0]addr1
0XF0023490 reg [11:0]cont
0XF0023498 reg clk_fft=1'b0
0XF0024898 reg [9:0] f [31:0]
0XF0025C98 wire signed [31:0] wni[7:0]
0XF0027098 wire signed [31:0] wnr[7:0]
0XF00274E8 reg [5:0] counter_mem



[edit] ESQUEMÁTICO

esquemático del circuito implementado en la terjeta hija















[edit] TARJETA HIJA


A continuación se muestra la tarjeta que se conectará a SIE por USB y una prueba realizada en el laboratorio. Tomando el generador de señales a 50 mVp se puede apreciar la amplificación de la onda para que no sobrepase los 3 volts en la amplificación






[edit] PERIFÉRICOS:


A continuación se mostrarán las entradas y salidas para cada períferico, junto con los registros pertinentes





El registro de control tiene el valor de RS para determinar si la entrada del periférico es de "configuración" o de "datos"; si Rs=1, entonces tenemos la entrada de los datos que se mostrarán em pantalla y si RS=0 entonces se dispondrá el LCD para ser configurado. Ahora bien, la entrada se maneja mediante un registro de 8 bits, denominado "de configuración o de dato" y que ingresa al periférico en paralelo.








Dado que el Teclado se compone de 4 filas y 4 columnas, tenemos un registro de 4 bits que se encarga de hacer el barrido a alta frecuencia para las 4 filas (o las 4 columnas, siendo 4 el número de bits); tiene siempre 3 ceros y un "uno" que se irá moviendo de fila en fila. Cuando se oprime una tecla, se realiza una conexión entre filas y columnas, generando a la salida de estas últimas un valor de 1 si en el barrido existe un 1 para la fila correspondiente, si no hay un "uno" no existe problema debido a que el barrido es realizado a alta frecuencia. Los valores en DAT1 del registro de accionamiento equivalen a los 4 bits de salida en las columnas cuando se orpime un botón. Finalmente, para la salida del periférico se tendrá un bit de interrupciones, y 2 pares de 4 bits que indicarán la "coordenada" del botón pulsado; estos últimos 8 tendrán que ser decodificados.





CONTROLADOR ADC:




El ADC se encargará de la conversión de la señal analógica a Digital mediante un muestreo de la misma. Se puede implementar en 2 modos: microprocesador y DSP; para el proyecto emplearemos el primero dado que es más simple que el segundo. Utilizaremos un registro de configuración con un bit de CHIP-SELECT que nos permitirá según los flancos que presente, activar o desactivar las entradas para procesar la señal. Además tendremos un bit de inv clock que nos ayudará a invertir el reloj y así proporcionar "más" tiempo (claro que no es estríctamente necesario). De la misma manera manejaremos un registro de control que contendrá un bit FS (frame synchronization input) útil en el modo DSP, pero conectado permanentemente a VCC en el modo de microprcesador que emplearemos. Otro bit que se utilizará será el Sampling/conversion start control CSTART que nos permitirá mediante sus flancos determinar el inicio del muestreo (flanco de bajada, por ello el estado de "bajo" ns dirá la duración del ciclo de muestreo) y el de la conversión (flanco de subida). Si por algún motivo CSTART no se usa se debe conectar a VCC. Finalmente tenemos un bit que nos permitirá determinar cuando acaba la conversión A/D y los datos quedan listos para ser transferidos, este será el EOC (también almacenado en el registro de control) y se activa en el décimo ciclo de reloj pasando de nivel alto a bajo (para el modo microprocesador), posteriormente regresará a mivel alto para indicar el final de la conversión. Se usará un registro de 4 bits seriales denominado DATA_IN y que representa parte de la configuración del periférico. los 4 bits nos permiten escojer entre otras cosas la señal analógica que se ha de convertir (son 8 entradas y con 4 bits es sufiente) además de tener funciones reservadas para las últimas 2 combinaciones de 4 bits. DATA_IN empleará los primeros 4 ciclos de reloj para registrar los datos que ingresa de manera serial (un bit por ciclo) basándose en el flanco de subida del reloj (si inv clock está en nivel alto o, en el flanco de bajada si inv clock está en nivel bajo). Finalmente tendremos un registro de salida DATA_OUT también serial que al inicio estará en alta-impedancia y que después de el flanco de bajada de CHIP-SELECT actuará. Este registro es el que guardará eñ valor binario resultante de la conversión A/D. Cuando CHIP-SELECT lo desactiva pasa a estar en alta impedancia y cuando el flanco de bajadoa de CS lo activa recupera los bits de salida uno por uno, ciclo por ciclo. A continuación se presenta el módulo en verilog para el control y recepción de datos del ADC en modo microprocesador con su simulacion en icarusverilog y GTKWAVE:
Simulando.png




MODULO FFT:



El periférico FFT realizará la transforada rápida de fourier de una señal digital obtenida del ADC. Dado que este último entrega los datos de manera serial, se planea la implementación de un buffer; así lograríamos guardar los 10 bits de salida del ADC (toma el nombre de "fx" para dar a entender que es la función de entrada de la transformada)en un solo registro y entregarlos en paralelo a la FFT para su tratamiento. El algoritmo de esta transformada consiste a grandes rasgos en descomponer la sumatoria de la ecuación de síntesis en adiciones mucho más simples que corresponden a DFT más sencillas y así facilitar y mejorar la rapidez del proceso. Controlaremos el flujo de datos de la FFT mediante un reloj que se sincronizará al ADC y al buffer para ir tratando la información a medida que sale del ADC. si es necesario se trabajará a mayores frecuencias. La salida de este periférico será un registro de aproximadamente 32 bits para garantizar que puedan cubrir números en decimal muy grandes y que equivaldrían a los coeficientes de la serie de fourier. En software se planea realizar la comparación de las frecuencias, tomando en cuenta que el número total de coeficientes de fourier nos indica que tantos componentes en fercuencia tiene la señal y el mayor de ellos nos dará el tono que buscamos para el instrumento. A continuación se presenta la simulación del módulo en verilog para una FFT de 8 puntos:



Simulacion8puntosfft.png



las entradas del módulo se definieron dentro de una memoria que no se puede visualizar en gtkwave, sin embargo, tomamos como entradas los peores valores que el ADC estaría en capacidad de entregar, es decir 1023*1000 (en decimal) para cada una; así el resultado debería ser todos los coeficientes de fourier igual a cero excepto el primero, que sería igual a la suma de todos los puntos de entrada


[edit] Desarrollo báse para la implementación de la FFT

El principio base de la FFT es la transformada discreta de Fourier o DFT, que se presenta a continuación:
FormulaDFT.jpg
Tomando esta última expresión, podemos realizar una partición en la sumatoria y obtener 2 nuevas que nos calculen cada una la mitad de los datos (la primera obtendrá los pares y la segunda los impares)
FormulaDFT1.jpg
Para encontrar una FFT de mayor cantidad de puntos podemos aplicar el mismo procedimiento que se ve antes en cada sumatoria (podemos hacer 2r=m y 2r+1=h); así, después de un poco de álgebra llegamos a una expresión cuya cantidad de sumatorias será N/2 y que ocasiona un “corrimiento” en el tiempo de la señal de entrada.
FormulaDFT2.jpg
FormulaDFT3.jpg
Si nos devolvemos de las sustituciones hechas (2r=m y 2r+1=h) obtendremos la FFT de 8 puntos:
FormulaDFT4.jpg
El misterio de este procedimiento es llegar a una DFT mediante la descomposición de la sumatoria en N/2 DFT’s de 2 puntos. Si miramos la FFT de 4 puntos y la obtenida de 8 podemos notar un patrón de ciertos datos que crecen dentro de la sumatoria. Ahora bien, si miramos el argumento de la función de entrada, notaremos que esta sufre un escalamiento dado por N/2 y un corrimiento en el tiempo que crece de uno en uno a medida que aumentan las sumatorias. El Wn (o conocido como twiddle factor) presenta en su exponente el mismo “escalamiento” y corrimiento que apreciamos en el argumento de la función de entrada. Los límites de la sumatoria siempre tendrán que indicar 2 sumas para cumplir con el objetivo de la FFT. Tomando en cuenta lo anterior, podemos describir fácilmente una FFT mediante la siguiente expresión:
FormulaDFT5.jpg
Cada dígito de “n” representa la sumatoria que se esté realizando. Si tuviéramos una FFT de 256 puntos tendríamos en total de 128 sumatorias (0<=n<=127 ) de 2 puntos cada una. El procedimiento descrito nos permite realizar ciertas simplificaciones, en especial el cálculo de los “twiddle factors”; dado que Wn es una exponencial compleja, se van a presentar valores con periodo 2*pi. Esto nos reducirá la cantidad de cálculos (de senos y cosenos en las sumatorias) a 2N (Nsin+Ncosin)


FormulaDFT6.jpg


el algoritmo mediante el cual se implementó este módulo se denomina de "diezmado en el tiempo" y se representa mediante una serie de esquemas y gráficos denominados "mariposas":

Mariposa8puntos.png

estos aprovechan la periodicidad de los factores "wn" para reducir el número de multiplicaciones; las flechas que apuntan hacia arriba implican la suma de los componentes y si apuntan hacia abajo se realiza una sustracción. la implementación en hardware se realizó pensando en 3 etapas que se determinan según log2(N), siendo N=8. Se manejaron los coeficientes por medio de pares de registros, un reg para la parte real y otro para la imaginaria, así cada operación se realiza prácticamente 2 veces (una para la parte real y otra para la imaginaria). igualmente, se implementaron 3 funciones: una para la suma otra para la resta y otra para la multiplicación usando las 3, un bit se signo.




[edit] TAREAS

HARDWARE

  • conversión de la señal analógica de entrada a digital
  • amplificación del sonido para que su magnitud sea tratable digitalmente
  • desarrollo de la FFT para obtener la frecuencia y/o tono
  • compresión de la señal digital en un formato de sonido determinado
  • obtención de la elección del usuario mediante teclado
  • muestra de información final en el LCD

SOFTWARE

  • Definición del tono a partir de la frecuencia de sonido lograda mediante las tareas hardware descritas anteriormente. Es decir, la elección de la nota a mostrar en el LCD.





[edit] CRONOGRAMA DE ACTIVIDADES

A continuación se presenta un plan de trabajo con estimacion de tiempo aproximada para cada tarea que hemos considerado principal en el desarrollo del proyecto.


[edit] PCB de Tarjeta Hija

A continuacion se presenta el esquematico y PCB de la tarjeta Hija para la SIE donde se encuentra un pre-amplificador de audio y el arreglo para pa conexion de la pantalla LCD 16x2.


[edit] ANÁLISIS DE COSTOS

COSTOS.jpg

Personal tools
Namespaces
Variants
Actions
Navigation
interactive
Toolbox
Print/export