capítulo 5. pruebas y...
TRANSCRIPT
-
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.