Mostrando entradas con la etiqueta modulador FM. Mostrar todas las entradas
Mostrando entradas con la etiqueta modulador FM. Mostrar todas las entradas

sábado, 24 de mayo de 2008

Actualización (¡por fin!)

En primer lugar, sentimos no haber actualizado el blog, pero es que realmente poco había que actualizar. Estas semanas han estado llenas de pruebas sin éxito del sistema. Hemos tenido que cambiar por completo el diseño inicial del modulador, ya que estaba mal planteado (en un post posterior pondremos el diseño definitivo del sistema completo) ya que en un principio creimos que al DDS se le pasaba la fase instantánea (a una entrada llamada "phase accumulator"), pero no, se le pasa la frecuencia instantánea, con lo que tuvimos que modificar los cálculos como se verá en el diseño definitivo.

A nivel interfaces de usuario, hemos reutilizado dos modelos vhdl disponibles en internet:
  • Para el teclado PS/2, la interfaz disponible en la web de logica programable del Departamento de Tecnología Electrónica de la Universidad de Vigo.
  • Para trabajar con el codec de audio AC97, extrajimos un modelo VHDL de uno de los modelos de ejemplo (concretamente el XUPV2P Demonstration Design) que hay disponibles en la web de Xilinx, para la placa de desarrollo que usamos (la XUPV2P). En el ejemplo se extrae audio de la entrada de línea, se procesa por un banco de filtros y se saca por una pantalla VGA su espectro, además de sacar la señal procesada por la salida pre-amplificada de la placa. Nosotros cogimos la parte de audio que extrae el canal izquierdo de la entrada Line In y lo saca por el canal izquierdo de la salida Amp Out.
Nuestro sistema trabaja finalmente a 48 KHz (coincide con la frecuencia de muestreo, pero no pasa nada ya que el retardo que introduce nuestro sistema, al carecer de filtros es de unos pocos ciclos, imperceptible para el ser humano), reloj que extraemos del reloj HW del codec que incorpora la placa, a partir de un divisor por 256.

A nivel pruebas realizadas, hemos comprobado que la interfaz para el codec de audio funciona y se adapta a nuestros requerimientos. Usar el codec también para la salida, va a limitar nuestro sistema, ya que la salida apenas llega a los 20 Khz, por lo que la frecuencia central de la modulación tendrá que ser inferior (algo que no ocurre en los sistemas reales de FM, pero como nuestro propósito final es el hacer un sintetizador de audio, consideramos irrelevante esta limitación).

Una vez cambiado el diseño del modulador, decidimos probarlo por separado, primero le conectamos un DDS a frecuencia fija, es decir un tono (que se generaba dentro del sistema, por lo que no usabamos la entrada de audio), con valores fijos para los parámetros de FM, y tras varias horas de pequeñas modificaciones, ajustes de cableado -esto nos da muchos problemas- y ajustes de los parámetros de los DDS, conseguimos que funcionase (en otro post explicaremos como comprobamos que el sistema es correcto). Luego quitamos el generador de seno a frecuencia fija y usamos la entrada de audio. A ella conectamos un generador de funciones, y tras algunos problemas de ajuste del cableado, conseguimos que funcionase también. Aquí tuvimos ciertos problemas, ya que la interfaz de audio proporciona muestras PCM de 16 bits y nosotros sólo usamos 8 bits + 1 de signo, y tras algunas pruebas decidimos quedarnos con los 9 bits más significativos (8 + el de signo). Todo esto fue la semana pasada.

Tras conseguir el primer objetivo, le añadimos la interfaz del teclado, para poder variar los parámetros de la modulación. Otra vez problemas con el cableado, lo que nos llevo a muchos engaños y a volver a repetir las pruebas del teclado, porque veiamos el ruido que entrada por el codec modulado y nos engañaba ya que salía un pico centrado en una frecuencia distinta a la central. Finalmente, tras varias horas conseguimos solucionarlo.

Una vez conseguida la práctica básica introdujimos en el sistema todo lo necesario (tras los debidos cambios en el diseño) para poner en marcha el sintetizador FM. Ampliamos la interfaz del teclado para poder usarlo como un teclado de 2 octavas y poder elegir instrumento, añadimos los bloques necesarios para las nuevas operaciones (multiplicadores, retardos, una unidad de control...) y usando un script de matlab diseñamos la memoria que contiene las envolventes de amplitud e índice de modulación de los instrumentos:
En la figura, si nos fijamos una de las envolventes dura 15 segundos (la exponencial, que se corresponde al instrumento campana), eso ocuparía 15 s * 48000 muestras / segundo = 720000 muestras x 8 bits/muestra = 5760 Kbits, lo cual excedería por completo las limitaciones de memoria de la FPGA. Para solucionarlo, lo que hacemos es simplemente guardar una muestra de cada X muestras (en función del pendiente máxima de la función y aprovechando que la resolución esta limitada por los 8 bits) y repetirla, con lo que ahorramos mucha memoria, en el caso del ejemplo la reducimos hasta aproximadamente 8 Kbits.

La carga del sistema ha crecido mucho con la incorporación de todos estos circuitos, y estamos ocupando casi el 40% de los recursos de la FPGA, las primeras pruebas han arrojado unos sonidos nada parecidos a los prometidos por Chowning. Esto nos ha llevado a ponernos otra vez delante del diseño y del artículo de Chowning, y hemos llegado a la conclusión de que hay que modificar el modulador FM original, para poder producir lo que el llama "Reflected Side frecuencies", que son aquellas componentes que salen en el espectro audible al emitir sinusoides de frecuencia negativa (el espectro negativo no tiene sentido fisico, pero al implementarlo, por aliasing las frecuencias del espectro negativo se ven reflejadas con fase invertida en el espectro positivo y audible), que son las que dan la riqueza a los sonidos FM. Para que se de la necesidad de emitir este tipo de señales se tiene que cumplir que la frecuencia de la moduladora sea mas grande que la de la portada (en términos generales, no es la condición exacta, ya que influyen otros parámetros como el índice de modulación o la propia amplitud de la señal, pero es para que se entienda -en la documentación final pondremos una explicación más concreta-). Esto nunca se daría en una modulación, cuyo objetivo es la comunicación, porque en esos casos el aliasing es claramente un problema. Pero en síntesis donde lo que importa es lo bien que suene, la distorsión y el ruido suelen ser buenos. Por esta razón debemos modificar el modulador original para que funcione en ese caso... ¡Y a cruzar las orejas!

domingo, 9 de marzo de 2008

Especificaciones iniciales

Introducción:
Este proyecto tiene como fin último el desarrollo de un sistema capaz de modular en frecuencia (FM) cualquier señal que introduzcamos a su entrada.

Especificaciones:
Hacer notar que algunas de las restricciones que se irán especificando van a depender de la placa de desarrollo y la fpga que se empleen.

Se pide diseñar un sistema digital totalmente síncrono, que trabaje con una señal de reloj global CLK de 50 MHz. Si es necesario utilizar otras señales de reloj de menor frecuencia, éstas se obtendrán a partir de la señal principal. El sistema debe ser optimizado para su implementación mediante FPGAs. La frecuencia de reloj ya supone una limitación física para nuestro circuito de modulación, puesto que sólo vamos a poder generar, como máximo, señales a una frecuencia que sea la mitad que la de reloj (Principio de Nyquist). Si tenemos en cuenta que la banda comercial de FM está comprendida entre 88 y 108 Mhz, vemos la imposibilidad de llegar a estas frecuencias.

Sin embargo, si imponemos que la entrada de nuestro modulador sea siempre de audio nos va a servir; el audio llega hasta los 20Khz, y considerando que para la modulación necesitamos una señal portadora que tenga una frecuencia bastante superior, podemos considerar que 20Mhz es suficiente. Además, en la síntesis de audio la limitación del reloj no es un problema puesto que se modula con frecuencias más bajas (las audibles).

El sistema tiene que contar con dos modos de funcionamiento: sintetizador FM monofónico de audio y modulador FM de una señal externa. Para esto, el circuito constará con una entrada de selección de modo y las siguiente entradas que serán utilizadas dependiendo del modo.

Modulador:
  • Entrada de audio digital: entrada donde se introducirá la señal de audio muestreada que posteriormente será modulada (señal moduladora).
  • Índice de modulación.
  • Frecuencia central de salida: frecuencia de la señal portadora.

Sintetizador:
  • Nota: entrada con la que seleccionaremos la nota que queremos reproducir. Serán 12bits cada uno de los cuales indicará que la tecla de una nota está pulsada. Estas notas tendrán prioridades unas frente a otras puesto que sólo se permitirá que suene una nota de cada vez (sera un sintetizador monofónico). En caso de que no haya ningún bit activo la salida será silencio, una señal con amplitud cero.
  • Octava: entrada con la octava a la que pertenece la nota que queremos reproducir.
  • Instrumento: entrada que nos permitirá seleccionar que instrumento vamos a sintetizar. Las distintas opciones de instrumentos que se podrán seleccionar se verán una vez diseñado el sistema, probando con diferentes parámetros.

Este sistema tendrá como única salida la señal de audio digital -señal ya modulada. Esta salida será convertida a una señal analógica con un convertidor digital-analógico que nos permitirá introducir dicha señal a un osciloscopio o bien a un altavoz.

lunes, 3 de marzo de 2008

Primeras Indagaciones

A lo largo de toda esta semana hemos ido recopilando información sobre el proyecto planteado (principalmente de Internet, pero también de algún libro). Aquí mostramos los resultados de la búsqueda que nos parecieron más interesantes (y esperemos útiles):

En primer lugar, consultando apuntes de otras asignaturas, así como el Communication Systems de Bruce Carlson et al, establecimos una idea general de en que consistia la FM y sobre todo de que parametros se veian implicados en ella. Esto queda plasmado en diversas hojas de notas, que no vamos a replicar aquí, así que recomendamos al lector eche un vistazo -nosotros también lo echamos- a la Wikipedia (Una introducción a la modulación en frecuencia). Un poco más centrados en el asunto encontramos un par de enlaces interesantes más enfocados a la aplicación en concreto que deseamos hacer:


A partir de estas y otras fuentes, dedujimos que probablemente necesitemos implementar un VCO digital (un NCO - numeric controlled oscillator). Nos encontramos ante dos opciones: el implementarlo directamente (se reduce a un problema de síntesis de ondas senoidales, de la cual encontramos algunas pistas en diversos foros, webs y grupos de noticias) o bien usar un IPCore (en nuestro caso encontramos el DDS 5.0 de Xilinx). Estuvimos echando un vistazo a la documentacion sobre el DDS (Direct Digital Synthesizer) y nos puede resultar muy útil, ya que nos sirve para generar onda senoidales y como NCO, aunque tendremos que estudiar bien la forma de ponerle los parámetros para que se ajusten a los de la modulación.

También nos hemos ido informando acerca de la ampliación de hacer un sintetizador, y sobre ello hay una gran cantidad de información y hemos seleccionado los siguientes links:


Suponemos que a medida que avancemos en el proyecto, necesitaremos más recursos como estos, y los iremos mencionando en este blog.

Presentación

Hola, somos Fernando Fernández-Valdés y Víctor J. Calvo, alumnos de la ETSI Telecomunicación de la Universidad de Vigo. El presente blog sirve como documentación (y diario) de nuestro proyecto realizado para la asignatura Laboratorio de Sistemas Digitales Programables 2. La idea inicial consiste en implementar en una FPGA un sistema modulador de FM (frecuencia modulada).