Visita mi canal de youtube

domingo, 16 de julio de 2017

Proyecto: Grabadora de voz digital


Nuestro proyecto es una grabadora de voz digital con capacidades de distorsión que almacena múltiples pistas en una tarjeta de memoria DataFlash.

Programamos un microcontrolador Atmel Mega32 para probar un micrófono y almacenar las muestras en una fuente de memoria externa. Le damos al usuario la opción de grabar varias pistas y reproducir cualquier pista en cualquier momento. La interfaz de usuario se muestra claramente en una pantalla LCD. Como característica interesante añadimos la posibilidad de cambiar la frecuencia de la voz de uno. Esto lo añadimos para crear un efecto interesante. Elegimos este proyecto porque utilizó y amplió muchos de los temas enseñados en ECE 476. También involucró las muchas disciplinas dentro de la ingeniería eléctrica, incluyendo la programación de sistemas embebidos, el diseño analógico, y el procesamiento de señal digital.
Diseño de alto nivel

Fundamentos y Fuentes de Idea del Proyecto

Nos intrigó este proyecto porque incorporó tantas áreas de ingeniería eléctrica. Además, el proceso de pensamiento que utilizamos para llegar a la idea involucrada pensando en artículos de electrónica del hogar que podríamos utilizar el microcontrolador para crear. Varios artículos parecían simplistas (por ejemplo un reloj de alarma), y otros que sentíamos no eran objetivos realistas (como una impresora). Un contestador digital me vino a la mente. Parecía tener un nivel apropiado de complejidad, y eso es lo que modelamos nuestro proyecto después. Para simular a alguien hablando por teléfono, tuvimos un circuito de micrófono. Teníamos memoria externa para permitirnos almacenar más datos. Entonces, teníamos funcionalidad de pista, para simular varios mensajes. Añadimos distorsión de voz como una función divertida.

Matemáticas de fondo

La matemática principal gira alrededor de la frecuencia de Nyquist. Un hecho establecido es que la frecuencia más alta de la voz humana es 4000Hz. Con el fin de obtener todos los componentes de Fourier de una señal de período, se debe tomar una muestra a dos veces la frecuencia más alta. Así que en este caso, probamos a 8kHz. Todas las demás matemáticas involucradas en este proyecto, se dedicó a diseñar filtros con las frecuencias de corte apropiadas, y código para mantener esta tasa de muestreo.


 La espina dorsal de este proyecto es el micrófono y el circuito que lo acompaña. Sin esto, no podríamos probar de forma realista los otros componentes del diseño. Después de esta parte trabajada, implementamos código para ejecutar DataFlash. Esto era necesario, ya que para grabar cualquier cantidad significativa de sonido, necesitábamos conectar una fuente de memoria externa. Para conseguir realmente una salida exacta, también tuvimos que agregar un circuito de DAC. Hemos probado un PWM y un DAC, y un DAC demostró ser más preciso en ser capaz de reproducir la voz humana. Finalmente agregamos una interfaz de usuario, distorsión de voz, y la capacidad de grabar y reproducir varias pistas.

Compensaciones de hardware y software

Hicimos compromisos para que nuestro proyecto llegara a un estado en el que pudiera demostrarse. La primera es la decisión de utilizar DataFlash sobre una tarjeta digital segura. Pasamos muchas horas en el laboratorio tratando de conseguir SD para trabajar. Sin embargo, después de darnos cuenta de que existe la posibilidad de que no lo consigamos trabajando a tiempo, tomamos la decisión de iniciar la implementación de DataFlash. Parte de la razón SD fue tan difícil fue la falta de cualquier amortiguador. Esto hizo que el tiempo fuera más sensible.


Program and Hardware Design
Microphone Circuit
            We started out our project by designing a filter and amplifier for the microphone. The following diagram shows our design.





Este circuito se puede dividir en cuatro partes, micrófono, filtro de paso alto, amplificador de 3 etapas y un filtro de paso bajo para facilitar la comprensión. A diferencia de las versiones comunes de 3 pines (vcc, gnd y salida), nuestro micrófono barato (número de modelo: MD9745APZ-F) tenía dos pines uno para tierra y otro para salida. Puesto que no había vcc tuvimos que tirar de la salida usando un resistor de 2.2K a la vcc de 5V para proporcionar corriente para el micrófono. El micrófono tenía una respuesta de frecuencia constante de 100 Hz y un corte de 3db de frecuencia superior en torno a 6 Hz. Esto fue más que suficiente para nuestra grabadora de voz, ya que la voz humana estaba en el rango de 150Hz a 4kHz. La respuesta de frecuencia del micrófono se indica a continuación.




La siguiente etapa es el filtro de paso alto RC de primera orden y está construido por un condensador de 1uF (C1) y un resistir R2 de 1kΩ en serie. El corte de frecuencia de este filtro de paso alto es de alrededor de 160 Hz, que está cerca del límite inferior del espectro de voz humana. La frecuencia de base de la voz humana es de alrededor de 400Hz. Este filtro corta el ruido 60Hz de los equipos electrónicos circundantes mientras que pasa en voz humana. También corta de DC para darnos una señal pura. En la siguiente parte del circuito esta señal se amplifica utilizando tres amplificadores no inversores idénticos. Estos amplificadores se construyen usando LMC7111 opamps. Estamos ejecutando estos opamps utilizando fuentes de alimentación + 5V y tierra en lugar de +/- 5V de voltaje de alimentación. La razón de esto es que sólo podemos probar de 0 a 5V usando el ADC mega32.

La ganancia está fijada por R2 y R5 (R5 / R2) para la primera etapa y R6 y R7 para la segunda etapa (R7 / R6) y R8 y R9 para la tercera etapa (R9 / R8). Los resistores conectados a v + del opamp son para offset. Esto se hace para asegurar que la señal de salida final esté centrada en 2.5V que representará la señal 0V en ADC.

            La tercera parte del circuito es un filtro de paso simple RC de primer orden que está hecho de R10 (12KΩ) y C2 (4.7nF). La frecuencia de corte de este filtro es 2821Hz que está por encima de la voz humana común de 2000Hz. La frecuencia de Nyquist para 2821hz es 5642 que es manera debajo de la frecuencia de muestreo de 8Kz. Por lo tanto, este filtro reduce aliasing.

            El siguiente paso en nuestro proyecto fue escribir código para el Mega32 ADC. Esto era muy simple y se parecía mucho a los viejos proyectos de laboratorio. Puesto que sólo estábamos planeando probar en 8bits por muestra que sólo leemos en el registro de ADCH. Se lee desde ADCH en timer0 interrupción que disparó a 8kHz, nuestra frecuencia de muestreo. Para probar esto almacenamos estos valores en eeprom y los emitimos a los LEDs en STK500. Sólo pudimos almacenar ª de segundo en eeprom.

Interfaz DataFlash:

            Algunas de las placas STK500 en el laboratorio tenía un 2Mb DataFlash incrustado en él. Utilizamos el protocolo de interfaz periférica serie (SPI) para hablar de este DataFlash. Consta de 1024 páginas de memoria principal, con 264bytes por página. También tenía dos, 264bytes de amortiguación. Los códigos de operación deben enviarse al DataFlash a través del modo SPI para enviar o recibir datos del Dataflash. Un mensaje se envía en el siguiente formato: código de operación de 8 bits, dirección de 24 bits, (8 o 32) bits de datos.

            El hecho de que DataFlash tuviera dos búferes era muy útil para nosotros, ya que nuestros datos eran muy sensibles al tiempo. Se tardó más de un período de muestra para escribir una página entera del búfer a la memoria y viceversa para la lectura. Así que tuvimos que alternar entre tampones cuando estábamos de muestreo y reproducir. Eso es cuando probamos que escribimos nuestras muestras en un búfer mientras que el otro búfer estaba siendo escrito en la memoria y viceversa. Esto permitió un sonido más suave en lugar de un ruido de recorte cuando sólo se utilizó un búfer.

DAC:

            Otra parte principal de nuestro proyecto es el convertidor D / A de 8 bits (DAC) usando la Red de Resistencias de Ladder. A continuación se muestra un diagrama. Utilizamos más exacta 10K y 20K resister inmersiones para construir, ya que la precisión era muy importante. Nos pusimos muy cerca de la división 20mv por un cambio en poco. Condujimos la salida del DAC a través de un filtro de paso alto para suavizar la señal y un filtro de paso bajo para reducir el timbre de 60Hz.

Interfaz de usuario y opciones de LCD:

            O la grabadora de voz fue controlada en el programa por una máquina de estado. Cuando butter0 es empujado cambiamos el estado al modo de grabación cuando grabamos en una pista. Grabamos mientras se pulsa el botón o nos quedamos sin memoria. El lcd mostrará cuántas pistas ha escrito hasta ahora. Botón1 se presiona una vez para reproducir la pista actual y se presiona de nuevo para detener. Mientras no esté jugando, puede presionar el botón 2 para bajar o el botón 3 para moverse hacia arriba en la lista de pistas. La pista actual siempre se mostrará en la pantalla LCD. Al presionar Button2 o Butten3 durante la reproducción, puede cambiar la frecuencia de reproducción y obtener una voz más fresca y profunda o Chipmunk como la voz de alto tono.

Cosas que casi funcionaban:

            Intentamos interconectar el microcontrolador con una tarjeta SD usando el modo SPI, pero fallamos ya que los pines de nuestro solo titular de la tarjeta SD se rompieron. Al final de la dura muerte del portador pudimos inicializar y leer muchos sectores. Pero el tiempo de lectura / escritura entre sectores era inaceptablemente grande. Requirió un retraso de 1ms al enviar o recuperar un sector. Intentamos hacer esto sin bloqueo pero poniéndolo fuera de la interrupción del temporizador 0 donde estaba el muestreo y la reproducción, pero no logró leer sectores de esta manera.

            Otra cosa que hemos intentado es la modulación adaptativa del código de pulso diferencial (ADPCM) y el muestreo descendente para obtener una menor velocidad de bits. Los resultados de estos experimentos fueron bastante decepcionantes debido al alto ruido. ADPCM almacena la diferencia codificada entre la muestra actual y la muestra anterior codificada y la reproduce descodificando el número de 4 bits usando un tamaño de paso adaptable. Nuestra implementación de esto no fue correcta, ya que generamos grandes cantidades de ruido. Si no hubiéramos gastado un alto porcentaje de nuestro tiempo en la implementación de tarjetas SD, ADPCM podría haber sido una buena adición.

Probamos varios otros algoritmos más simples, pero los niveles de ruido no les valió implementar. Estos incluyen el almacenamiento de la media de cada dos pulsos. Esto creó un efecto manchado, por lo que añadimos código que agudizó los picos. Sin embargo, el ruido era bastante alto. También intentamos reproducir al doble de la velocidad que grabamos. El propósito de esto fue generar más muestras. Otro método que probamos fue truncamiento de la parte inferior de cuatro bits, por lo que dos muestras podrían ser almacenar por byte. Estas son sólo cosas generales que hemos intentado. Cambiamos los diferentes umbrales que utilizamos. También probamos varias combinaciones al mismo tiempo. Sin embargo, ninguno de estos métodos produjo una señal suficientemente limpia para grabar. Así nos quedamos con la frecuencia de muestreo original, y muestras de 8 bits.

Referencias: Los archivos Dataflash.c y Dataflash.h que usamos para la comunicación en modo SPI con DataFlash nos fueron señalados por nuestro TA Chethan Pandarinath.
Resultados

Velocidad y tiempo de diseño

            El tiempo fue un aspecto muy importante de nuestro diseño, ya que tenemos que reproducir la muestra a la misma frecuencia que usted lo lee. A pesar de que tuvimos algunos problemas con la escritura de muestras de búfer y de memoria intermedia a la memoria dentro de un período de muestra rápidamente lo arregló mediante la edición del archivo dataflash.c para ignorar la comprobación de errores y acelerar así el proceso. Puesto que los almacenadores intermediarios estaban situados dentro del chip no estaba bloqueando para escribir del almacenador intermediario a la memoria desemejante de la tarjeta del SD que no tenía ningunos en amortiguadores de la viruta.

Exactitud

            Mientras que el muestreo en las frecuencias más altas por encima de 12kHz la velocidad de reproducción fue ligeramente más rápido que la frecuencia de grabación (Esto no era un problema a 8kHz). Esto se puede ajustar mediante un valor diferente OCR0 más grande para la interrupción de reproducción. Utilizamos este fenómeno a nuestro favor para tener una característica fresca para reproducir a frecuencias más rápidas o más lentas al cambiar OCR0 mientras se reproduce pulsando un botón.

            Para nuestra lógica de reproducción, primero teníamos un DAC con salida PWM de las muestras y lo pasamos a través de un filtro chebyshev para generar la señal de reproducción para el altavoz del televisor. Esta señal no era tan precisa. Terminamos usando una red de escalera de resistencia DAC que era mucho más clara y precisa que la PWM DAC.

            Siempre que probamos un nuevo esquema como ADPCM o diferentes variaciones de Down Sampling usamos nuestros oídos para medir la exactitud del sonido y escogimos el mejor.

La seguridad

            La seguridad no era una gran preocupación para este proyecto ya que no teníamos nada que se conectara al cuerpo humano y el voltaje máximo que usábamos era de +5V. Usted puede incluso lamerlo y tanto usted como el producto seguirá funcionando. No se recomienda para niños menores de 4 años ya que pueden comer el micrófono y ahogarse y posteriormente morir.

Interferencia

            La única interferencia que tuvimos fue el ruido de 60Hz. Protegíamos nuestro circuito con una lámina metálica puesta a tierra y usamos un filtro de paso alto para reducir sus efectos. El ruido ambiental en la habitación era también un problema que no podíamos hacer nada.

Usabilidad

            Nuestra grabadora de voz era un dispositivo muy simple. Tiene una pantalla LCD que muestra la pista que está escribiendo o jugando. Hay cuatro botones simples uno para la grabación, uno para jugar y los otros dos para navegar por las pistas. Los dos botones que se usan para navegar por la pista también se usan para hacer efectos geniales durante la reproducción y sólo funcionarán durante la reproducción para que no haya ninguna confusión. Cualquiera que haya operado un contestador automático podría operar nuestro dispositivo.
Conclusión

El producto final cumplió con nuestras expectativas básicas. Pudimos grabar sonido, reproducirlo y distorsionarlo. Si nos pidieran hacer este proyecto de nuevo, definitivamente no pasaríamos tanto tiempo en conseguir la tarjeta SD trabajando. Pasar tanto tiempo en esa parte nos impidió intentar ideas nuevas e interesantes, como un algoritmo DSP para almacenar el sonido en la memoria.

Para este proyecto examinamos varios controladores para que la memoria externa funcione. Al final modificamos el código de Terje Frostad. No había ningún problema con esto, ya que había publicado en línea con este propósito explícito de ayudar a las personas a utilizar DataFlash.



Se siguieron todas las consideraciones éticas. El código de ética pertinente de IEEE apunta:

3. Ser honesto y realista en declarar las reclamaciones o estimaciones basadas en los datos disponibles;

   Toda la información relativa a este proyecto es exacta.

4. rechazar el soborno en todas sus formas;

   No aceptamos ningún soborno durante el curso de este proyecto.

5. mejorar la comprensión de la tecnología, su aplicación apropiada y su potencial

    Consecuencias;

    Este proyecto nos brindó una gran experiencia en proyectos y nos enseñó la aplicación

    Hardware particular

7. buscar, aceptar y ofrecer críticas honestas sobre el trabajo técnico, reconocer y

    Corregir errores y acreditar adecuadamente las contribuciones de otros;

    Hemos dado crédito donde se debe el crédito.

10. ayudar a sus colegas y compañeros de trabajo en su desarrollo profesional y apoyar

      Siguiendo este código de ética.

      Ofrecíamos ayuda a cualquiera que lo pidiera.









0 comentarios:

Publicar un comentario