Capítulo 5. Pruebas y...

35
Capítulo 5. Pruebas y resultados. 97 Capítulo 5. Pruebas y resultados. En este capítulo se muestran las pruebas realizadas en cada una de las etapas del desarrollo del reverberador, con el fin de comprobar su funcionamiento. 5.1. Módulo uMMC. La primera prueba realizada fue la de lectura y escritura de datos almacenados en una tarjeta SD mediante el módulo de transmisión serial uMMC, por lo que fue necesario llevar a cabo la configuración de la velocidad de transmisión, enviando comandos que cambian los valores del registro de configuración. Para poder llevar a cabo la comunicación entre el puerto serial de la PC y el módulo, se utilizó el cable convertidor de USB a serial USB-SER y el módulo de comunicación serial PMODRS232, el cual se encarga de convertir el voltaje de los niveles lógicos al voltaje RS232 que va de -3 a -12 Volts para un uno lógico y de +3 a +12 Volts para un cero. Figura 5.1. Módulo PMODRS232 de Xilinx.

Transcript of Capítulo 5. Pruebas y...

  • Capítulo 5. Pruebas y resultados.

    97

    Capítulo 5. Pruebas y resultados.

    En este capítulo se muestran las pruebas realizadas en cada una de las etapas del

    desarrollo del reverberador, con el fin de comprobar su funcionamiento.

    5.1. Módulo uMMC.

    La primera prueba realizada fue la de lectura y escritura de datos almacenados en

    una tarjeta SD mediante el módulo de transmisión serial uMMC, por lo que fue necesario

    llevar a cabo la configuración de la velocidad de transmisión, enviando comandos que

    cambian los valores del registro de configuración.

    Para poder llevar a cabo la comunicación entre el puerto serial de la PC y el

    módulo, se utilizó el cable convertidor de USB a serial USB-SER y el módulo de

    comunicación serial PMODRS232, el cual se encarga de convertir el voltaje de los

    niveles lógicos al voltaje RS232 que va de -3 a -12 Volts para un uno lógico y de +3 a

    +12 Volts para un cero.

    Figura 5.1. Módulo PMODRS232 de Xilinx.

  • Capítulo 5. Pruebas y resultados.

    98

    Como se muestra en la tabla 5.1, el uMMC se encuentra configurado por defecto a

    la tasa de transmisión de 9600 bps y para cambiar este valor, se envía el comando con la

    siguiente sintaxis:

    S n [nuevo valor]

    Donde S indica el comando settings y n el registro que se desea cambiar, en este

    caso se selecciona el cero y posteriormente el valor 3 para 57600 bps, como se muestra en

    la figura.

    Tabla 5.1. Tabla del registro de configuración [18].

    Figura 5.2. Configuración de la tasa de transmisión.

  • Capítulo 5. Pruebas y resultados.

    99

    Después de haber configurado la tasa requerida, se realizó la prueba de lectura de

    un byte del archivo “1.WAV” que se encuentra almacenado en la memoria SD, utilizando

    los comandos especificados en el capítulo 4, como se muestra en la siguiente figura:

    Figura 5.3. Lectura de un byte del archivo 1.WAV.

    En la figura anterior se aprecia la lectura de los primeros bytes del encabezado del

    archivo de audio, los cuales indican que se trata de un archivo de audio con formato

    RIFF.

    Una vez que se comprobó el correcto funcionamiento de la lectura de la tarjeta SD

    mediante el módulo de comunicación serial uMMC, se realizaron las pruebas de

    transmisión y recepción de la interfaz SD programada en el FPGA.

  • Capítulo 5. Pruebas y resultados.

    100

    5.2. Transmisión y recepción serial.

    Como se especificó en el capítulo anterior, los comandos enviados al módulo serial

    son transmitidos por el transmisor incluido en la interfaz SD.

    La simulación de la transmisión de los comandos se muestra en la siguiente figura:

    Figura 5.4. Envío del primer comando hacia el uMMC.

    Aplicando como estímulo el valor 0x3E en la señal data_rd, es posible simular la

    recepción del carácter “>” con el cual el uMMC indica que se encuentra listo para recibir

    los comandos. De este modo, se dará inicio al envío de los comandos que se encuentran

    almacenados en la memoria ROM.

    Cada uno de los datos a enviar cuenta con un bit de inicio y un bit de paro, de lo

    contrario el uMMC no detectará un nuevo byte y responderá con un mensaje de error.

  • Capítulo 5. Pruebas y resultados.

    101

    El valor “1” es aplicado en la señal sel_impulso, la cual simula la selección de la

    respuesta al impulso elegida con los interruptores tipo slide de la tarjeta Nexys y así se

    enviará el número correspondiente.

    Posteriormente se llevo a cabo una prueba de transmisión del FPGA hacia una PC

    utilizando la HyperTerminal de Windows, con el fin de comprobar que la transmisión se

    efectúe correctamente.

    Figura 5.5. Transmisión de bytes mediante el FPGA.

    Para probar la recepción serial, primero se realizó una simulación en la cual se

    inicia el procedimiento al detectar un bit de inicio. Al mismo tiempo el reloj de recepción

    será reiniciado con el fin de que se encuentre sincronizado y no llegue a ocurrir algún

    defasamiento y se obtenga un byte erróneo.

  • Capítulo 5. Pruebas y resultados.

    102

    Figura 5.6. Bit de inicio de la recepción serial.

    Un contador se encarga de llevar la cuenta de los ciclos de reloj para el muestreo de

    cada bit que sea recibido. Cuando se encuentra a la mitad de la cuenta captura el valor en

    un registro de corrimiento y después de repetir el procedimiento 8 veces, el byte

    recopilado es desplegado en la señal de salida data, como se explicó anteriormente.

    Figura 5.7. Recepción de un byte.

    Al igual que en la transmisión, se hizo una prueba sintetizándolo en el FPGA y se

    enviaron caracteres desde la HyperTerminal de Windows para comprobar la correcta

    recepción de cada byte.

  • Capítulo 5. Pruebas y resultados.

    103

    Figura 5.8. Recepción de bytes en el FPGA.

    En la figura anterior se muestra el valor ASCII desplegado en los leds de cada uno

    de los caracteres enviados manualmente hacia el FPGA. Cabe mencionar que las primeras

    pruebas se llevaron a cabo usando una tasa de transmisión de 115200 bps, sin embargo,

    ocurrían defasamientos en los datos recibidos, por lo que se redujo la tasa a 57600 bps.

    Una vez que se hicieron pruebas de transmisión y recepción haciendo uso de la

    interfaz programada en el FPGA, se llevaron a cabo las pruebas de lectura del archivo de

    la respuesta al impulso, es decir, el envío de comandos y la recepción de los bytes que

    conforman la información de las muestras de audio.

    5.3. Lectura del archivo de la respuesta al impulso.

    El algoritmo a seguir para realizar la lectura completa del archivo y almacenarlo en

    la memoria RAM fue el siguiente:

  • Capítulo 5. Pruebas y resultados.

    104

    Figura 5.9. Diagrama de flujo de la lectura de archivo de la respuesta al impulso.

    Una vez que la lectura de un byte fue probada, el siguiente paso a realizar fue la

    simulación de la lectura del tamaño de archivo contenido en el encabezado del archivo de

    audio WAV.

  • Capítulo 5. Pruebas y resultados.

    105

    La entidad encargada de obtener el tamaño del archivo captura un byte cada vez que

    detecta un nuevo dato mediante la señal nuevo y éste es copiado a un registro temporal.

    De esta manera, el tamaño de archivo será almacenado y enviado a un contador de bytes

    que se encarga de hacer una comparación de dicho valor con la cuenta según se vayan

    recibiendo, de tal manera que interrumpa automáticamente la lectura de la respuesta al

    impulso cuando se ha llegado al final del archivo.

    Figura 5.10. Simulación de la captura del tamaño de un archivo de 50KB (CAA7h).

    A continuación se muestra en la siguiente figura un ciclo de lectura simulado en la

    HyperTerminal. En este caso se envía manualmente hacia el FPGA el carácter “>”

    simulando la respuesta del módulo de comunicación serial. De esta forma, se aprecia la

    lectura de cada una de las muestras que serán almacenadas en la memoria RAM externa

    que se encuentra en la tarjeta Nexys.

  • Capítulo 5. Pruebas y resultados.

    106

    Figura 5.11. Lectura de archivo mostrada en HyperTerminal de Windows.

    Como se explicó en el capítulo anterior, los bytes recibidos son concatenados en

    palabras de 16 bits, para posteriormente ser escritas en las localidades de memoria RAM

    de la tarjeta Nexys.

    5.3.1. Ciclos de lectura y escritura en memoria RAM.

    Para llevar a cabo las operaciones de la memoria RAM se implementó un

    controlador de lectura/escritura de acuerdo con el diagrama de tiempos de la misma, con

    el fin de facilitar la lectura de la respuesta al impulso, ya que su tiempo de acceso es

    menor que el de la comunicación serial.

    En la siguiente figura se muestra la simulación del ciclo de escritura, en el cual se

    activan las señales de control ce_ram, adv, dw, up, wr_ram y clk_out, como se especifica

    en el diagrama de tiempos del capítulo 4.

  • Capítulo 5. Pruebas y resultados.

    107

    Figura 5.12. Simulación del ciclo de escritura de la memoria RAM.

    Cada vez que una nueva palabra es recibida, ésta es escrita en la localidad de

    memoria RAM que indiquen la dirección denotada por la salida address_ram, la cual será

    incrementada por el controlador hasta llegar al final del archivo.

    La señal enable se encargará de controlar el buffer bidireccional el cual habilita la

    lectura o escritura del bus de datos de la memoria RAM.

    Para comprobar lo anterior, se realizó la prueba de enviar datos a través de la

    HyperTerminal con el fin de recibirlos por la interfaz SD y posteriormente escribirlos en

    la memoria RAM. Después realizar una lectura desplegándolos en los leds de la tarjeta

    Nexys.

  • Capítulo 5. Pruebas y resultados.

    108

    Por tal motivo fue necesario también hacer la prueba de la lectura de los datos, cuya

    simulación se muestra en la siguiente figura:

    Figura 5.13. Simulación del ciclo de lectura de la memoria RAM.

    En este caso, cada ciclo de lectura dura 120 ns y la señal oe será activada para

    habilitar los datos en el bus de la memoria. La señal enable permanece activa en nivel alto

    con el fin de establecer la dirección de los datos de la memoria RAM hacia el FPGA.

    Con ayuda de los interruptores de la tarjeta Nexys, se especificó la dirección que se

    requiere leer, las cuales son sólo las primeras 128 debido a que se trata de 7 interruptores.

    El interruptor restante se utilizó para seleccionar entre el dato escrito y la dirección

    actual desplegados en los leds.

  • Capítulo 5. Pruebas y resultados.

    109

    Figura 5.14. Palabra escrita en memoria RAM enviada desde HyperTerminal.

    En la figura anterior se muestra el último dato recibido y escrito en memoria. El

    dato en ASCII 0x32 de la imagen superior equivale al número 2 en decimal y la imagen

    inferior equivale a la dirección de memoria en que fue almacenado que en este caso fue la

    0x03.

    5.4. Conversión digital a analógica.

    Una vez que se comprobó de manera sencilla la lectura y escritura de datos en la

    memoria RAM después de recibir muestras de manera serial, se llevó a cabo la prueba de

    escribir el archivo completo de la respuesta al impulso en la memoria RAM y

    posteriormente leerlo para comprobar que no existan errores. Sin embargo, para poder

    observar esto, es necesario hacer uso de un osciloscopio, por lo que se necesita

    transformar la información de las muestras digitales a un voltaje analógico haciendo uso

    del convertidor analógico a digital.

  • Capítulo 5. Pruebas y resultados.

    110

    Figura 5.15. Módulo PMODDA2 y PMODAMP1 conectados a la tarjeta Nexys.

    La entidad de control de dicho proceso primero almacena 1024 muestras en un

    buffer para transmitirlas de manera serial al módulo externo DAC que se encuentra

    conectado a la tarjeta Nexys. La señal wr_sb habilita la escritura y la señal next_address

    incrementa la dirección del bloque de memoria RAM.

    Figura 5.16. Simulación del ciclo de conversión digital a analógica.

  • Capítulo 5. Pruebas y resultados.

    111

    Cuando el buffer se encuentra lleno, la señal de lectura es activada y se comienza a

    leer el contenido almacenado en el mismo.

    Como se especificó en el capítulo anterior, la conversión da inicio con la señal sync

    en nivel bajo y se omiten 4 ciclos de reloj de los 16 que se necesitan para convertir la

    palabra digital a voltaje analógico.

    Antes de enviar el dato al DAC, es necesario convertir de complemento a 2 a

    binario, por lo que se suma un offset de 0x800, debido a que el DAC no reconoce el

    formato con signos y solo decodifica datos con valores que van de 0 a 4095.

    La primera prueba realizada con el convertidor digital a analógico fue la de leer un

    archivo de audio WAV que contiene una señal senoidal muestreada a 1 KHz.

    En la siguiente figura, se muestra dicha señal utilizando el programa de edición de

    audio Reaper.

    Figura 5.17. Señal senoidal a 1 KHz.

  • Capítulo 5. Pruebas y resultados.

    112

    Se implementó un programa de prueba en el que se almacenan los datos de la

    memoria RAM en un buffer temporal de 1024 localidades y posteriormente son enviados

    al DAC para llevar a cabo la conversión digital a analógica.

    En la siguiente figura se muestra el resultado de dicha conversión:

    Figura 5.18. Señal senoidal leída desde la tarjeta SD.

    De este modo, se efectuó la lectura del archivo de audio que contiene una respuesta

    al impulso, la cual fue muestreada a 22 KHz y con una resolución de 16 bits. Al igual

    que la señal anterior, se realizó una comparación de la señal que se encuentra almacenada

    en la tarjeta SD y la señal de audio resultante observada en el osciloscopio con una

    resolución de 12 bits que se muestra en la siguiente figura:

  • Capítulo 5. Pruebas y resultados.

    113

    Figura 5.19. Respuesta al impulso almacenada en memoria SD.

    Figura 5.20. Respuesta al impulso almacenada en memoria RAM.

  • Capítulo 5. Pruebas y resultados.

    114

    5.5. Conversión analógica a digital.

    La siguiente prueba a realizar fue la del convertidor analógico a digital, con el cual

    se muestrea la señal de audio con el fin de almacenar las muestras en un buffer de entrada

    de 1024 localidades, para posteriormente mostrar la señal resultante en el osciloscopio y

    un altavoz conectado al módulo amplificador PMODAMP1.

    Figura 5.21. PMODAD1 y PMODDA2.

    En la siguiente figura, se aprecia la simulación de la conversión del dato serial

    correspondiente a una señal de voltaje de entrada de 3.3V, ya que la señal de estímulo se

    encuentra en el valor constante ‘1’.

  • Capítulo 5. Pruebas y resultados.

    115

    Figura 5.22. Simulación de ciclo de conversión analógica a digital.

    Como se se muestra en el capítulo 4, el diagrama de tiempos requeridos para llevar

    a cabo una conversión analógica a digital especifica el inicio de un ciclo de conversión

    activando la señal cs en nivel bajo. El valor enviado por el módulo PMODAD1 será

    válido a partir del quinto ciclo de reloj, ya que su resolución es de 12 bits.

    La primera señal de prueba utilizada fue una señal senoidal obtenida de un

    generador de funciones cuya frecuencia es de 1 KHz y la frecuencia de muestreo

    empleada fue de 22 KHz. En la siguiente figura se muestra en la parte inferior la señal

    original y en la parte superior la señal reconstruida por el DAC después de haber sido

    muestreada por el ADC:

  • Capítulo 5. Pruebas y resultados.

    116

    Figura 5.23. Señal senoidal de 5 KHz muestreada a 22 KHz.

    Figura 5.24. Señal de audio muestreada a 22 KHz.

  • Capítulo 5. Pruebas y resultados.

    117

    5.6. Transformada rápida de Fourier.

    Con el fin de comprobar el correcto funcionamiento del core XFFT de Xilinx, se

    realizaron dos pruebas: La primera se trata de introducir mediante el ADC una señal

    senoidal y una señal cuadrada al core, para transformarla al dominio de la frecuencia y

    posteriormente convertirla una vez más al dominio del tiempo mediante la transformada

    inversa. La segunda prueba consistió en el mismo procedimiento anterior, pero esta vez

    la señal de entrada se trató de una señal tipo rampa almacenada en la memoria RAM de la

    tarjeta Nexys.

    Primero se llevó a cabo una simulación con ayuda del software Modelsim-XE el

    cual se obtiene de manera gratuita en la página oficial de Xilinx.

    Como se especifica en el capítulo anterior, al iniciar la FFT de un nuevo bloque de

    datos, el core es reiniciado mediante la señal sclr_fft al mismo tiempo que se habilita el

    reloj con la señal ce_fft. El siguiente paso es habilitar la señal de inicio xfft_start junto

    con las señales que habilitan la escritura del valor de escala y del tipo de transformada.

    Cuando el índice de datos fft_xn_index se encuentra en el segundo valor, se activa la señal

    para realizar la lectura de los datos almacenados en los buffers de entrada (tanto del ADC

    como de la memoria RAM), ya que cuentan con un retraso de un ciclo de reloj para

    desplegar los datos en el puerto de salida.

  • Capítulo 5. Pruebas y resultados.

    118

    Figura 5.25. Inicio de FFT de un bloque de datos.

    Después de introducir los datos, el controlador del core espera a que la señal e_done

    se active, la cual indica que el procesamiento de los datos ha finalizado y pueden ser

    descargados en el puerto de salida haciendo uso de la señal xfft_unload.

    Una vez realizado esto, se activa la señal de escritura fft_buffer_wr del buffer en el

    que son almacenados los resultados temporalmente con el fin de ser sincronizados con el

    core de la IFFT. La dirección de memoria está determinada por el vector de índice

    fft_xk_index.

  • Capítulo 5. Pruebas y resultados.

    119

    Figura 5.26. Descarga del resultado de la FFT.

    Figura 5.27. Carga de datos en el core de IFFT.

    Finalmente, después de realizar el procesamiento de los datos, la señal e_done_inv

    se activa indicando que es posible descargar los resultados de la transformada inversa de

    Fourier. En la siguiente figura se observa el resultado de la simulación en la señal

    xk0_fixed la cual se ha convertido de complemento a 2 a binario.

  • Capítulo 5. Pruebas y resultados.

    120

    Figura 5.28. Descarga de resultados de IFFT.

    La primera prueba implementada en el FPGA se realizó haciendo uso de un

    generador de funciones con el fin de introducir una señal senoidal de 1 KHz muestreada a

    22 KHz. Así, cada vez que el buffer de entrada del ADC almacena 1024 muestras, se da

    inicio a todo el proceso que lleva a cabo la transformada rápida de Fourier.

    Es importante destacar que el ingreso de las muestras al core debe estar

    sincronizado correctamente como se muestra en las simulaciones, de lo contrario, al

    transformar de nuevo la señal al dominio del tiempo, esta será reconstruida de manera

    errónea como se muestra en la siguiente figura:

  • Capítulo 5. Pruebas y resultados.

    121

    Figura 5.29. Señal senoidal reconstruida incorrectamente.

    Una vez que se calculó el resultado, la señal dv_inv (data valid inverse) indicará al

    DAC que se realiza una nueva conversión digital analógica, por lo que los datos

    descargados del core de la IFFT serán almacenados en el buffer del controlador del DAC.

    Una vez más se dará inicio a la conversión cuando la dirección del buffer sea equivalente

    a 1023 (0x3FF).

  • Capítulo 5. Pruebas y resultados.

    122

    A continuación se muestra el resultado de todo el proceso, utilizando diferentes

    señales de prueba:

    Figura 5.30. Señal senoidal de 1 KHz reconstruida.

    Figura 5.31. Señal cuadrada reconstruida.

  • Capítulo 5. Pruebas y resultados.

    123

    La siguiente prueba se realizó llevando a cabo almacenando en la memoria RAM

    una señal de tipo rampa, con el fin de comprobar que se ocupa todo el rango de los

    valores desplegados por el DAC. También se comprobó que la FFT e IFFT se llevó a

    cabo correctamente al leer cualquier archivo que se encuentre almacenado en memoria, lo

    cual da la libertad de introducir cualquier tipo de datos de una respuesta al impulso.

    Figura 5.32. Rampa reconstruida.

    5.7. Convolución.

    Al llevar a cabo la convolución, es necesario implementar el método de overlap-add

    con el fin de que la convolución sea lineal y no se produzca aliasing. Por tal motivo, los

    datos a introducir al core XFFT en este caso deberán ser de 512 muestras de longitud y

    las restantes deberán ser cero, ya que al efectuarse la convolución se hará una expansión y

    el resultado final tendrá 1024 muestras de longitud.

  • Capítulo 5. Pruebas y resultados.

    124

    Figura 5.33. Introducción de los datos al core de FFT con zero padding.

    La convolución se realiza después de haber transformado el bloque de datos de la

    respuesta al impulso y el de la señal de audio proveniente del ADC. Cuando los datos son

    descargados del core XFFT como se mostró anteriormente, pasan a través del core de

    multiplicación compleja complex_mult, cuya señal de reloj es de 100 MHz debido a que

    tiene una latencia de 4 ciclos de reloj para obtener el resultado de dicha operación.

    A su vez, los resultados son guardados en otro buffer temporal, el cual será leído

    cuando se dé inicio a la transformada inversa de Fourier IFFT mediante la señal rd_inv.

    En las siguientes figuras se muestran la simulación de la multiplicación compleja

    efectuada por el core y la carga de los resultados en el core que se encarga de realizar la

    IFFT:

  • Capítulo 5. Pruebas y resultados.

    125

    Figura 5.34. Simulación de la multiplicación compleja.

    Figura 5.35. Carga de resultados de la convolución en el core de IFFT.

    Después de que se realiza la transformada inversa de Fourier, los datos obtenidos

    serán el resultado de la convolución de los bloques de la respuesta al impulso y la señal

    de audio.

  • Capítulo 5. Pruebas y resultados.

    126

    Figura 5.36. Descarga de resultados de la transformación del resultado al dominio del

    tiempo.

    Por último, se suma la señal de audio original con la señal procesada de tal manera

    que se combinen ambas y se pueda elegir la cantidad de efecto aplicado al audio. Sin

    embargo, al escuchar el resultado final no se apreció en gran cantidad el efecto, por las

    razones especificadas en el capítulo 4, de tal modo que se hicieron las simulaciones para

    implementar el algoritmo propuesto por Angelo Farina, las cuales se muestran a

    continuación.

  • Capítulo 5. Pruebas y resultados.

    127

    5.8. Convolución con respuesta al impulso particionada.

    En el capítulo anterior, se mostró el algoritmo en el cual la respuesta al impulso es

    dividida en bloques simulando que cada uno es una respuesta al impulso independiente de

    las otras, de tal manera que al final se irán traslapando y sumando los resultados de las

    convoluciones individuales para obtener el resultado final.

    Después de modificar el controlador de la memoria RAM anterior, se realizó la

    simulación en la cual se muestra cada una de las etapas del algoritmo.

    Primero se lleva a cabo la lectura del primer bloque de la respuesta al impulso, que

    en este caso cuenta con una longitud de 512 muestras, ya que se utiliza una transformada

    rápida de Fourier de 1024 puntos.

    Figura 5.37. Lectura del primer bloque de la respuesta al impulso.

  • Capítulo 5. Pruebas y resultados.

    128

    Al mismo tiempo se hace la lectura del archivo de audio que se encuentra en la

    tarjeta SD, sin embargo, al ser más lento debido a la comunicación serial, el controlador

    de la memoria RAM deberá esperar a que llegue la última muestra (indicada por la señal

    start_process_chunk que se encuentra en el contador de muestras de audio) para indicar

    que se encuentra todo listo para ejecutar la FFT.

    Después de efectuar la transformada de Fourier y de que se convolucionen los

    datos de la señal de audio proveniente de la tarjeta SD con el primer bloque de la

    respuesta al impulso, el resultado de dicha operación en vez de ser convertido por el DAC

    a un voltaje analógico como se hizo anteriormente, se almacena en la memoria RAM,

    pero solamente las últimas 512 (L-K) muestras como lo indica el algoritmo.

    Figura 5.38. Escritura del resultado de la convolución de cada bloque de la R.I.

  • Capítulo 5. Pruebas y resultados.

    129

    La dirección de almacenamiento se ubicará a dos muestras de la respuesta al

    impulso guardada originalmente, por lo que en cada lectura de los resultados de la

    convolución se indica el offset correspondiente.

    Figura 5.39. Fin de respuesta al impulso y comienzo de overlap

    Al detectar que se ha llegado al final del archivo de la respuesta al impulso, la señal

    overlap_on es activada indicando al controlador de la memoria RAM que antes de

    almacenar el resultado de la convolución, se deberá leer el contenido de la memoria y ser

    sumado con los nuevos resultados para posteriormente almacenarlos.

    Una señal que funciona como índice de dirección llamada ovlap_wr_index sirve

    para indicar donde se lleva a cabo el overlap.

  • Capítulo 5. Pruebas y resultados.

    130

    Figura 5.40. Ciclo del siguiente bloque de audio.

    Cuando la señal de overlap es activada, el controlador espera a que llegue el

    siguiente bloque de audio para seguir con el procesamiento. De este modo, se repetirá

    todo el procedimiento anterior hasta que se termine el archivo de audio a procesar.

    Posteriormente, se lee todo el resultado almacenado en la memoria RAM en

    segmentos de 1024 muestras que son enviadas al DAC con el fin de escuchar el resultado.

    Sin embargo, al implementar el programa en el FPGA ocurrieron problemas de

    sincronización, por lo que el controlador de memoria RAM permanecía detenido en un

    punto de la rutina de lectura o escritura de los resultados de la convolución.

  • Capítulo 5. Pruebas y resultados.

    131

    Se realizó un debugging en el cual se desplegó el valor de la variable apuntadora de

    programa para saber en qué valor se quedaba detenido, pero aún después de tratar de

    sincronizar las señales introduciendo retrasos y banderas, no se logró el objetivo de lograr

    que el resultado final fuese almacenado en su totalidad (sólo se logró almacenar el primer

    segmento de audio procesado) y por consiguiente se reprodujera en un altavoz con ayuda

    del DAC.

    No obstante, el prototipo realizó su función en cuanto a realizar la convolución de

    dos vectores con una longitud de 512 muestras, es decir, se utiliza una FFT de 1024

    puntos, por lo que puede ser de utilidad no sólo en el ámbito del audio, sino para realizar

    el filtrado de alguna señal o imagen, entre otros usos. También es posible aumentar el

    tamaño de la FFT, sin embargo, el uso del área del FPGA es mucho mayor, lo que limita

    la adición de nuevos elementos dentro del mismo.