sábado, 24 de mayo de 2008

Diseño del Sistema

A continuación se muestra como quedaría el sistema tras el error que como ya se dijo encontramos en el diseño inicial de nuestro modulador. Aunque la mayor parte del sistema permanece inalterada (el cambio fue principalmente en el bloque de modulador) aprovechamos para detallar más el sistema completo y hacer una breve descripción de cada uno de sus bloques así como una mayor indagación con otros diagramas de apoyo para explicar con mayor claridad cada una de las partes.

En primer lugar vamos a mostrar el diseño general del sistema, mostrando en él los bloques más importantes así como la interconexión entre ellos. Hacer notar que el sistema es completamente síncrono y que por esta razón obviamos la presencia del reloj (clk) en los bloques.



Los bloques que podemos observar son los siguientes:
  • Modulador.
  • Calcula entradas modulador.
  • Interfaz teclado.
  • ROM instrumentos.
  • ROM envolventes.
  • Unidad control.
  • Modulador amplitud.
  • Controlador códec

Modulador



Este bloque es el pilar base de nuestro sistema y junto a la interfaz del teclado y el códec de audio forman la práctica básica. Como se dijo en el último post, tras mucho tiempo de pruebas sin éxito, tuvimos que rehacer todo este bloque, al comprender mal lo que había que pasarle al DDS. Este es el diseño definitivo del modulador:




Vemos que la estructura interna del bloque es distinta, sin embargo, la interfaz del bloque no cambió respecto al diseño inicial:
  • Entradas:
      • fc: 15 bits sin signo.
      • fm: 15 bits sin signo.
      • beta: 8 bits sin signo de los cuales los 4 menos significativos son decimales.
      • señal: 8 bits decimales más un bit de signo.
  • Salida:
      • salida: 9 bits con signo que representan ya nuestra señal modulada.
Los multiplicadores y el sumador son síncronos. El bloque de "Mover frecuencias negativas" es un bloque cuya función sólo va a servir en caso de tener a nuestro sistema funcionando como sintetizador. La misión de este bloque es la de generar las "Reflected Side frecuencies" (de las que se habló en el último post) básicamente lo que se hace, es que a aquellas frecuencias que llegan a este bloque como negativas, las hacemos aparecer en el espectro positivo con la fase invertida.



Calcula entradas modulador

Este bloque es el encargado de obtener los parámetros de entrada del modulador, tanto para el caso de que nuestro sistema esté funcionando como modulador, como para el caso en el que esté funcionando como sintetizador. Para ello tendrá que hacer los cálculos oportunos para cada una de las situaciones y después hacer una multiplexación de las dos posibles salidas hacia las entradas del modulador. Aquí observamos el diagrama de este bloque, el cual pasaremos a comentar justo a continuación:



A continuación mostramos las dimensiones de las distintas señales de la interfaz del bloque:
  • Entradas:
      • Instrumento: 2 bits sin signos que determinan el instrumento seleccionado en modo sintetizador.
      • Sintetizador: 1 bit determina el modo de funcionamiento (modulador o sintetizador).
      • fc teclado: 15 bits sin signo.
      • m/c: 8 bits sin signo de los cuales 7 representan decimales.
      • beta teclado: 8 bits sin signo de los cuales 4 representan decimales.
      • max_I: 8 bits sin signo de los cuales 4 representan decimales.
      • I(t): 8 bits decimales sin signo.
      • señal codec: 8 bits decimales más un bit de signo.
  • Salida:
      • fc: 15 bits sin signo.
      • fm: 15 bits sin signo
      • beta: 8 bits sin signo de los cuales 4 representan decimales.
      • señal: 8 bits decimales más un bit de signo.
Queremos resaltar un pequeño detalle de la señal instrumento antes de que os pueda resultar extraño en la descripción del resto de bloques. La dimension del instrumento que capturamos del teclado es de 15 bits, sin embargo realmente se pueden diferenciar los dos primeros bits de instrumento que nos indican el instrumento en concreto que vamos a sintetizar, mientras que los 13 siguiente nos indican la dirección de memoria a partir de la cual se encuentran las muestras de dicho instrumento.


Interfaz teclado

Bloque que nos permite obtener la tecla pulsada en un teclado PS/2 e interpretarla según los intereses de nuestro sistema y el modo de funcionamiento. En una publicación posterior se explicará con más detalle el modo de uso de dicho teclado y las teclas útiles para nuestro sistema.
De este bloque sale la señal instrumento con sus 15 bits como se comentó antes y la señal sintetizador que indica si nuestro sistema está trabajando como modulador o como sintetizador.

Esta interfaz como se comentó en el último post está basada en la interfaz disponible en la web de logica programable del Departamento de Tecnología Electrónica de la Universidad de Vigo.


ROM instrumentos

Se trata de una memoria ROM que consta únicamente de cuatro registros, uno para cada uno de los instrumentos que sintetiza nuestro sistema: trompeta, fagot, campana y tambor. Cada uno de estos registros consta de 46 bits y como se podía apreciar en el esquema principal cada uno de ellos está formado por cuatro campos distintos:

-> m/c: nos permite conocer la relación entre fm y fc del instrumento.
-> max_I: es el máximo valor que adquiere la beta para el instrumento.
-> duración: es la longitud en muestras de cada una de las notas del instrumento.
-> repetición: es el número de veces que se repite cada una de las muestras. Como se comentó ya con anterioridad, esto se hace para ahorrar espacio evitando guardar muestras casi iguales.


ROM envolventes

Memoria ROM en la cual se almacenan todas las muestras de los cuatro instrumentos. Cada una de las muestras es de 8 bits.


Unidad de control

Máquina de estados cuya misión es la de mantener un puntero a la ROM de envolventes apuntando en cada instante a la dirección que corresponda atendiendo a la duración, y a la repetición de las muestras de cada uno de los instrumentos. Una explicación más exhaustiva de dicha máquina de estados se podrá obtener en la documentación del proyecto.


Modulador Amplitud

Este bloque es el encargado de modular en amplitud la señal una vez modulada en frecuencia. Esto sólo es necesario en caso de estar sintetizando, con lo que si estamos trabajando en modo modulador no tendremos que modular la amplitud. El diagrama de este bloque es el siguiente:




Podemos apreciar que en caso de estar funcionando nuestro sistema como modulador la señal se ve multiplicada por un 1. Este bloque incluye un retardo que nos va a permitir sincronizar la muestra de la memoria que usaremos para modular la amplitud, con la muestra de la señal modulada en frecuencia correspondiente.


Controlador codec

Este bloque nos permite trabajar con la entrada y salida de audio, está basado en un modelo de xilinx. Como entrada podemos utilizar todo tipo de audio, sin embargo, nosotros usamos por regla general un generador de señales que nos permite hacer pruebas más concretas y de lo cual se puede saber si los resultados obtenidos son correctos. Por otra parte, la salida de audio, en caso de estar funcionando el sistema como modulador, va conectada a un osciloscopio con el fin de ver exactamente las señales moduladas, sin embargo, cuando el sistema esté funcionando como modulador es preferible conectarle un altavoz, o unos cascos.

No hay comentarios: