Está en la página 1de 10

PRÁCTICAS DE LABORATORIO PARA PROCESAMIENTO DIGITAL DE SEÑAL

Por

EDUARDO AVENDAÑO FERNÁNDEZ

UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA


ESCUELA DE INGENIERÍA ELECTRÓNICA
FACULTAD SECCIONAL SOGAMOSO
2019
1. Introducción

La board FM4 de Cypress (FM4-176L-S6E2CC-ETH Pioneer Kit) es una plataforma de desarrollo


de bajo costo para implementar aplicaciones en tiempo real. Incorpora un procesador Cortex-
M4 ARM a 200 MHz con unidad de punto flotante de precisión fija. El procesamiento en tiempo
real de señales de audio está habilitado por un códec de audio WM8731 incluido en la tarjeta
de desarrollo, que conecta a las interfaces periféricas I2C (control) e I2S (datos) del procesador
ARM. El ambiente integrado de desarrollo MDK-ARM habilita al software escrito en C para ser
compilado, enlazado, y descargado para ejecutarse en la tarjeta Cypress FM4.
A través de este ejercicio logrará familiarizarse con el hardware de desarrollo y las herramientas
de desarrollo.

Fig. 1. Kit de Desarrollo Cypress FM4-176L-S6E2CC-ETH.

2. Diagrama de bloques de un sistema de procesamiento digital de señal (DSP)

Un sistema básico DSP, apropiado para aplicaciones de procesamiento de señales de audio


frecuencia en tiempo real, se muestra en la figura 2. El hardware de Cypress FM4 mostrado en
la figura 1, implementa este diagrama de bloques.

Filtro Procesador Digital de Filtro de


Antialias ADC Señal (DSP) DAC Reconstrucción
(AAF)

Fig. 2. Diagrama de bloques de un sistema DSP básico.

El procesador encargado del procesamiento digital de señal es el microcontrolador ARM Cortex-


M4. El filtro anti-alias, conversor analógico a digital (ADC), conversor digital a analógico (DAC), y
funcionalidad del filtro de reconstrucción son proporcionados por el códec Wolfson WA8731.
Esta combinación de componentes asegura adecuar apropiadamente las entradas y salidas
analógicas. Apropiado, quiere decir, que la señal analógica puede ser reconstruida
correctamente desde sus muestras siempre y cuando se satisfaga el teorema de Nyquist. La
calidad de la reconstrucción es una función de numerosos parámetros, tal que el ancho de bit
de los convertidores ADC y DAC (las implementaciones usarán muestras de 16 bits del códec
UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 2
WM8731). Esto implica decir que, con este número de muestras, el hardware de la tarjeta
Cypress FM4 proporciona una alta calidad en las E/S analógicas.

3. Ambiente de desarrollo (IDE) e instalación

Para instalar el programa, ejecute mdk51v959.exe, luego de clic en next. Luego, seleccione la
caja I agree to all terms of the preceding License Agreement, y de clic en next. Deje por defecto
la ruta que proporciona el software (C:\Keil_v5 y C:\Keil_v5\ARM\PACK), y de clic en Next.
Ingrese los datos que le piden y de clic en Next, se iniciará la instalación del paquete.

Durante la instalación se le preguntará si desea instalar software o drivers adicionales para el


dispositivo. Si aparece la ventana de la figura 3, de clic en Install.

Fig. 3. Instalación de software del dispositivo.

Finalmente, terminará y se ejecutará la aplicación para instalar paquetes en línea adicionales.


En ese caso, simplemente de clic en YES para los paquetes que pueda considerar útiles, o en No
para continuar con otros paquetes. Y deberá ver una barra de avance en la parte inferior. I esta
ventana del instalador de paquetes no aparece, deberá ejecutarla desde el menú Project.
Tomará varios minutos instalar los paquetes necesarios para ejecutar apropiadamente el
software. Cuando termine, la ventana de Pack Installer debería listar los paquetes como “Up to
date” actualizados, cierre la ventana. Luego de la instalación termine, ejecute el programa Keil
uVision 5. Si aparece un diálogo de bienvenida de clic en OK.

Los paquetes a instalar o actualizar necesarios deben ser:

• Keil::ARM Compiler
• Keil::MDK-Middleware
• Keil::FM4 DFP
• ARM::CMSIS

Luego ejecute en orden los ejecutables de las carpetas Keil C51 v9.59, Keil MDK-ARM 5.24a y
Keil MDK-ARM 5.25 uVision 5. Finalmente, quedará instalado el software, ejecute en modo
administrador uVision y desde File->License Management copie el Computer ID (CID), y ejecute
el crack y pegue el CID donde se le indica para generar una nueva licencia. Luego adicionelo a la
lista y quedará configurado y listo para usar sin restricciones.
UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 3
Fig. 4. Configuración de licencia

4. Conexión e instalación de la Board Cypress FM4

La board Cypress FM4 se conecta al host PC vía un cable USB usando una herramienta de
programación y depuración CMSIS. Conecte el cable USB al conector CN2 en la tarjeta FM4 y
conecte el otro extremo a su PC. Permita que Windows termine de instalar los drivers de su
tarjeta.

5. Ejemplo de programa – Entrada y salida analógica

El DSP equivalente al programa hola mundo consiste en copiar muestras de entrada leídas
desde el ADC al DAC. El código fuente en lenguaje C para tal programa se lista en la figura 4.
Este programa sirve como una plantilla para otros programas basados en el mismo modelo de
procesamiento en tiempo real basado en manejo de interrupciones.
El código fuente en C loop_intr.c se que muestra en la figura 5, funciona como sigue:
La función main(), hace un llamado a la función de inicialización audio_init(). Esta función
configura las interrupciones de entrada salida del códec WM8731 que muestrearán la señal de
entrada análoga e interrumpe el procesador a la frecuencia de muestreo determinada por el
parámetro pasado a la función. En ese caso, el parámetro hz48000 configura una frecuencia de
muestreo a 48 kHz. El parámetro mic_in especifica que la entrada al ADC del códec WM8731
vendrá de la entrada del micrófono (Conector CN11) de la board Cypress FM4. Cambiar este
parámetro a line_in especifica la entrada de audio del nivel de línea (Conector CN6) en la tarjeta
Cypress FM4. El parámetro intr e I2S HANDLER especifica que se usará la entrada/salida basada
en interrupción (opuesto a consulta basada en acceso directo a memoria - DMA), y es el
nombre de la interrupción. Como resultado, cada vez que una interrupción ocurre, la rutina del
servicio de interrupción I2S HANDLER será llamada. Exactamente una interrupción ocurrirá por
periodo de muestreo. Los dos canales de audio, el canal izquierdo y derecho son procesados en
el mismo llamado a ISR.

UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 4


También en la función main(), la función gpio_set_mode() es llamada para configurar pines de
entrada salida de propósito general como una salida. Este pin será usado para mediciones de
temporización de la interrupción. Siguiendo las inicializaciones, la función main() ingresa a un
loop while() infinito, que no hace nada pero que espera por la interrupción.

Al inicio de la ISR I2S HANDLER, el valor del pin GPIO es proporcioando un cambio en cada
instante que ocurre una interrupción. Dentro de I2S_HANDLER(), la función i2s_rx() retorna la
muestra de entrada actual leída desde el periférico I2S. El dato contenido en la variable
audio_IN (un entero con signo de 32 bits, declarado en audio.h) está compuesto de 16 bits para
el canal derecho y 16 bits para el canal izquierdo.

Para procesar cada canal independientemente, los canales son separados en las líneas 12 y 13.
Puesto que este ejemplo es un simple bucle de audio (es decir, lee muestras desde el ADC que
se copian al DAC), las muestras del canal derecho e izquierdo son empaquetadas en la variable
audio_OUT (un entero con signo de 32 bits, declarado en audio.h) y son enviadas de regreso al
periférico I2S usando la función i2s_tx().

6. Construyendo y ejecutando programas

Los siguientes pasos servirán como guía a través del proceso de construcción y ejecución de
programas para DSP usando lenguaje C en la tarjeta Cypress FM4.

1. Descargue el archive LabDSP1.zip del aula virtual. Descomprímalo a una carpeta de su


elección. Esto creará la carpeta LabDSP1, explore el folder.
2. Abra el proyecto DSP LiB en Vision 5 dando doble clic en su ícono dentro de la carpeta
LabDSP1. Inmediatamente le preguntara si es necesario instalar algún paquete
adicional, para lo cual deberá darle clic en Install como se muestra en la figura 6.
3.

Fig. 5. Estructura del proyecto y código fuente para bucle

UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 5


Debería observar la estructura del proyecto como se muestra en la figura 5 parte izquierda.
Nota: Si se le pregunta instalar algún paquete perdido, elija instalar el paquete y espere
hasta que se realice el procedimiento antes de proceder.

Fig. 6. Instalación adicional de paquetes para ejecutar el código.

4. Construya el proyecto seleccionando Build target del menú Project o dando clic en el
botón de la barra de herramientas Build. El proyecto debería construirse sin errores.
5. Conecte usando un cable USB la board Cypress FM4 al host PC.
6. Conecte los audífonos y micrófono en los sockets correspondientes en la board FM4,
como se muestra en la figura 7.
7. Conmute al depurador dando clic en el botón de la barra de herramientas Start/Stop
Debug Session. Al hacerlo se descargará automáticamente el código ejecutable en la
memoria flash del procesador ARM.
8. Una vez el depurador de Windows haya aparecido, de clic en el botón de la barra de
herramientas Run.

Importante: Nunca descarge y ejecute el software a la tarjeta sin los audífonos conectado a sus
oidos. El amplificador del audífono en la board tiene una alta ganancia y podría dañarle sus
oídos. Cuando pruebe software, lleve lentamente los audífonos a sus oídos.

9. Una vez el programa esté corriendo, debería ser capaz de escuchar sonidos capturados
por el micrófono en los auriculares. Dependiendo de las características del micrófono y
auriculares, el sonido podría ser fuerte o suave. Si no puede oír nada, intente soplar
gentilmente el micrófono.
10. Puede salir del depurador dando clic en el botón de la barra de herramientas Start/Stop
Debug Session. No es estrictamente necesario iniciar una sesión de depuración (Debug)
UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 6
cada vez que quiera probar un programa. En lugar de ello, luego de construir (build)
satisfactoriamente, puede dar clic en el botón de la barra de herramientas Download o
presionar F8.

7. Verificación de la tasa de muestreo

Como se describió anteriormente, un pin GPIO puede ser usado como un indicador por el
tiempo de ejecución del programa en tiempo real.
En el caso del loop intr.c, los valores de los pines GPIO es conmutada cada vez que ocurra una
interrupción (línea 9):

gpio_toggle(P10);

Puesto que la interrupción debería ocurrir una vez por periodo de muestreo, la señal esperada
en el pin P10 es una onda cuadrada de frecuencia 24 kHz (tasa de muestreo de 48 kHz). Conecte
una terminal del osciloscopio al pin seleccionado sobre la board FM4 para confirmar la forma
de onda a la salida. Observe que las conexiones GPIO son rotuladas al lado inferior de la board
FM4. El pin GPIO puede ajustarse en (HIGH-ALTO) o reset (LOW-BAJO) usando declaraciones de
programa.

gpio_set(P10, HIGH);

gpio_set(P10, LOW);

Nota: cuando se usa boards FM4 PURPURA, especifique y use el pin P10. Cuando se use las
boards FM4 AZULES, especifique y use el pin P15. Las ubicaciones de los pines son marcadas en
el lado inferior de las boards FM4.

Fig. 7. Conexiones de audio en la board Cypress FM4.

UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 7


8. Adicionando un retardo

El programa listado en la figura 8, muestra una modificación simple del audio que pasa a través
de un programa en el cuál muestras retrasadas del canal izquierdo son sumadas a la salida del
canal de audio izquierdo actual.

Fig. 8. Listado de instrucciones del programa delay_intr.c

La lista de instrucciones de programa implementa el diagrama de bloques de la figura 9. Este


ejemplo ilustra una ventaja clave del DSP, el procesamiento digital permite una variedad de los
efectos de audio para ser implementados rápidamente y fácilmente a través de modificaciones
de software.
La línea de retardo es implementada un arreglo de buffer para almacenar muestras tal como
son leídas del ADC. Una vez el arreglo esté completo el programa sobre escribe las muestras de
entrada almacenadas más viejas con las muestras más nuevas o actuales, la muestra de
entrada. Antes de sobre escribir la muestra de entrada almacenada más vieja en el buffer, esa
muestra es recuperada y adicionada a la muestra de entrada actual y a la salida del DAC. La
longitud del retardo es determinada por el valor de la constante DELAY_BUF_SIZE. El programa
maneja un arreglo con longitud 24000, correspondiente a un 24000(1/48000)=0.5 segundos
de retardo.
El archivo fuente delay_intr.c está incluido en la carpeta LabDSP1\src. Puede guardar en otra
carpeta y reemplazar el archivo loop_intr.c con delay_intr.c haciendo lo siguiente:

UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 8


1. De clic en src de la ventana de proyecto Keil, elija Add Existing Files (adicione archivos
existentes) a Group src (grupo fuente) , y luego navegue y seleccione el archivo
delay_intr.c.
2. De clic en loop_intr.c en la ventana del proyecto Keil y elija Remove File (Remover
archivo).

Entrada del canal izquierdo Salida del canal izquierdo

Retardo
G

Figura 9. Diagrama de bloques del retardo en el canal de audio izquierdo.

Construya el proyecto y decarguelo a la board FM4. Experimente con el retardo, ponga


atención a las diferencias entre los canales de audio izquierdo y derecho.

9. Creando un eco

El efecto de eco puede ser introducido a través de una red de realimentación en el


procesamiento. El programa echo_intr.c, mostrado en la figura 10, implementa tal efecto en el
canal de audio izquierdo. Estudie el ejemplo cuidadosamente.

Construya el proyecto y descárguelo a la board FM4. Experimente con diferentes valores de los
parámetros DELAY_BUF_SIZE y GAIN.

Pregunta 1: Dibuje el diagrama de bloques del sistema implementado por echo_intr.c.

Pregunta 2: Qué podría suceder si el valor de ganancia (Gain - G) fuera mayor o igual a 1?

Pregunta 3: Dibuje y grafique en el dominio del tiempo mostrando lo que piense que debería
obtener en la respuesta al impulso para el caso de una ganancia de 0.6?

Comentarios, sugerencias, y ayudas para usar la board Cypress FM4

Observe en la función main() que los programas de muestra usualmente toman audio del
puerto \mic_in. Cambielo a \line_in para usar el puerto de entrada de línea. Esto es apropiado
para recibir música de un reproductor de audio o de un generador de funciones. Desenergize
los micrófonos operando a voltajes mucho menores que los dispositivos de nivel de línea.

La línea en el Jack de la board FM4 debería solamente recibir un voltaje máximo de 894 mV pico
a pico; este es el nivel de audio de línea del consumidor. Se debe monitorear cualquier señal

UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 9


que ponga en el Jack usando un osciloscopio, ajustar el nivel de señal antes de conectarla en el
Jack de entrada de línea.

Fig. 10. Lista de instrucciones del programa echo_intr.c

No conecte nada diferente a un micrófono en la entrada MIC de la board FM4.


La board FM4 usa un conductor de audio estándar de 3 conductores de 3.5 mm (1/8 pulgada).
Algunos auriculares específicos tienen una entrada de micrófono y uno o dos canales de salida y
podrían comportarse exactamente igual sobre el auricular de salida de la board FM4.

Referencias

[1] FM4-176L-S6E2CC-ETH - ARM Cortex-M4 MCU Starter Kit Guide, March 26 2015.
[2] ARM University Worldwide Education Program. ARM-based Digital Signal Processing Lab-in-
a-Box, 2014.
[3] Esta guía esta basada en El Laboratorio de DSP en tiempo real recuperado de internet de la
url: https://faculty-web.msoe.edu/prust/EE3221/RTDSP_Lab1.pdf. Reconozco todos los
derechos de los autores creadores que aunque se apoyan en el programa de educación mundial
de universidad ARM, acá se hace una adecuación y traducción para aplicarlo en el curso de DSP.

UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 10

También podría gustarte