Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

July 19, 2017 | Autor: Carlos Marchiaro | Categoría: Sound Synthesis, Electronics, DSP, Audio Signal Processing/DSP, Acoustics, Music, Physical Modelling
Share Embed


Descripción

Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura Escuela de Ingeniería Electrónica

Proyecto de Ingeniería

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

Autores:

Nelly Lucrecia Villacorta, Carlos Alejandro Marchiaro

Director: Asesora:

Ing. Federico Miyara Ing. Silvina Ferradal

Julio 2006

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida Autores: Nelly Villacorta, Carlos Marchiaro Director: Ing. Federico Miyara Asesora: Ing. Silvina Ferradal Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR – Rosario, Argentina

Resumen El presente informe se centra en el desarrollo e implementación de un equipo electrónico, basado en DSP (Digital Signal Processing), que permite generar sonido musical en forma interactiva (tiempo real) a través del recientemente difundido método de Síntesis por Modelado Físico. Esta técnica consiste en obtener un modelo físico-matemático de los elementos principales del instrumento (excitador, resonador y radiador) y de su interacción mutua, describiéndolos a partir de ecuaciones diferenciales y otros elementos matemáticos. Conseguido el modelo físico, se implementa un algoritmo de resolución por métodos numéricos que produce el sonido final por simulación en tiempo real, a partir de un conjunto de parámetros que definen el instrumento (propiedades geométricas y de los materiales, propiedades dinámicas, coeficientes de roce viscoso, etc.), y de señales de control generadas por el intérprete. Dichas señales ingresan al modelo en forma de acciones mecánicas que modifican el estado dinámico de determinadas partes del mismo.

Julio 2006

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

1

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

INDICE INDICE .................................................................................................................................................................. 2 1. ESTADO DEL ARTE Y FUNDAMENTOS TEÓRICOS ............................................................................ 4 1.1. TIPOS DE SINTETIZADORES EN LA ACTUALIDAD ......................................................................................... 4 1.2. SELECCIÓN DE UN ESQUEMA DE SÍNTESIS ................................................................................................... 8 1.2.1. Tendencia en la actualidad........................................................................................................... 8 1.2.2. DWG vs. FTM ........................................................................................................................... 10 1.2.3. Selección final ........................................................................................................................... 11 2. ANÁLISIS DEL MODELO FÍSICO ............................................................................................................. 12 2.1. MODELO DEL RESONADOR ....................................................................................................................... 12 2.2. MODELO DEL MECANISMO DE EXCITACIÓN .............................................................................................. 13 2.3. MODELO DEL RADIADOR .......................................................................................................................... 16 3. ALGORITMO DE SIMULACIÓN ............................................................................................................... 18 3.1. APLICACIÓN DEL MÉTODO FTM AL MODELO FÍSICO ADOPTADO............................................................... 18 3.2. CÁLCULO DE COEFICIENTES DE LOS FILTROS IIR...................................................................................... 21 3.3. CONSIDERACIONES PARA UN CÓMPUTO EFICIENTE ................................................................................... 22 3.3.1. Filtros IIR .................................................................................................................................. 22 3.3.2. Fuerza de contacto entre cuerda y martillo ................................................................................ 23 3.4. DESCOMPOSICIÓN ESTEREOFÓNICA DEL SONIDO ...................................................................................... 24 3.5. OTRAS CONSIDERACIONES ....................................................................................................................... 26 4. CONSIDERACIONES PARA LA IMPLEMENTACIÓN DEL MODELO.............................................. 28 4.1. CONSIDERACIONES GENERALES ............................................................................................................... 28 4.1.1. Dispositivo MIDI de control...................................................................................................... 29 4.1.2. Aplicación de software .............................................................................................................. 29 4.1.3. Dispositivo sintetizador ............................................................................................................. 30 4.1.4. Amplificador y reproductor ....................................................................................................... 31 4.1.5. Interconexión de los equipos adoptados .................................................................................... 31 4.2. ESTIMACIÓN DE LOS REQUERIMIENTOS COMPUTACIONALES .................................................................... 32 4.3. ADOPCIÓN DEL DISPOSITIVO A EMPLEAR .................................................................................................. 33 5. CARACTERÍSTICAS DEL DSKC6713 Y CODE COMPOSER STUDIOTM ............................................. 35 5.1. ESPECIFICACIONES TÉCNICAS DEL DSKC6713 ........................................................................................ 35 5.1.1. Disposición funcional de los elementos en la placa DSK.......................................................... 35 5.1.2. Arquitectura de hardware del DSP ............................................................................................ 36 5.1.3. Memoria interna y externa......................................................................................................... 38 5.1.4. Códec AIC23 ............................................................................................................................. 39 5.1.5. Emulador JTAG......................................................................................................................... 41 5.2. ENTORNO DE DESARROLLO CODE COMPOSER STUDIOTM .......................................................................... 41 5.3. DSP/BIOS................................................................................................................................................ 41 5.4. RTDX (REAL TIME DATA EXCHANGE)....................................................................................................... 42 6. DESARROLLO DE LA APLICACIÓN HOST ........................................................................................... 44 6.1. MODALIDAD DE EDICIÓN .......................................................................................................................... 44 6.1.1. Parámetros de sistema ............................................................................................................... 45 6.1.2. Funciones de edición ................................................................................................................. 46 6.1.3. Funciones de monitoreo............................................................................................................. 49 6.1.4. Interfaz audiovisual ................................................................................................................... 49 6.2. MODALIDAD DE CONTROL ........................................................................................................................ 51 6.2.1. Parámetros de sistema ............................................................................................................... 52 6.2.2. Funciones de control.................................................................................................................. 54 6.2.3. Funciones de monitoreo............................................................................................................. 55 6.2.4. Interfaz gráfica........................................................................................................................... 55 7. DESARROLLO DE LA APLICACIÓN TARGET...................................................................................... 57 7.1. ANÁLISIS FUNCIONAL DE LA APLICACIÓN ................................................................................................. 57 7.1.1. Datos de la aplicación................................................................................................................ 59 7.1.2. Funciones de la aplicación......................................................................................................... 61

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

2

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida 7.2. DESCRIPCIÓN DE LOS PROCESOS INVOLUCRADOS ..................................................................................... 69 7.2.1. Tarea de comunicación .............................................................................................................. 69 7.2.2. Tarea de simulación................................................................................................................... 71 7.3. OPTIMIZACIÓN DEL CÓDIGO CRÍTICO ........................................................................................................ 73 7.3.1. Método de optimización por Software Pipelining ..................................................................... 74 7.3.2. Optimización de la función simular.asm ................................................................................... 76 7.3.3. Optimización de la función conv_tabla_arm.asm ..................................................................... 81 7.4. ANÁLISIS DE PERFORMANCE..................................................................................................................... 82 8. CONSIDERACIONES FINALES.................................................................................................................. 85 8.1. ANÁLISIS DE LOS RESULTADOS................................................................................................................. 85 8.1.1. Señal sintetizada ........................................................................................................................ 85 8.1.2. Latencia de los eventos de control............................................................................................. 91 8.2. CONCLUSIONES ........................................................................................................................................ 91 8.2.1. Consideraciones sobre los resultados obtenidos ........................................................................ 91 8.2.2. Posibles extensiones del proyecto.............................................................................................. 92 8.2.3. Comentarios finales ................................................................................................................... 93 ANEXO A – APROXIMACIÓN POLINOMIAL DE LA FUNCIÓN POTENCIAL ................................... 94 ANEXO B – FUNCIÓN DE SUAVIZADO ....................................................................................................... 98 ANEXO C – CÓDIGOS FUENTE DE SECCIONES CRÍTICAS ................................................................ 100 C.1. SIMULAR.ASM................................................................................................................................... 100 C.2. CONV_TABLA_ARM.ASM ............................................................................................................... 116 ANEXO D – TERMINOLOGÍA MUSICAL .................................................................................................. 120 D.1. SONIDO Y NOTA MUSICAL ...................................................................................................................... 120 D.2. ESCALA MUSICAL .................................................................................................................................. 120 D.3. NOTAS DEL PIANO ................................................................................................................................. 121 ABREVIATURAS Y ACRÓNIMOS ............................................................................................................... 122 LISTA DE SÍMBOLOS PRINCIPALES ........................................................................................................ 123 REFERENCIAS ................................................................................................................................................ 124

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

3

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

1. Estado del Arte y Fundamentos Teóricos En este capítulo se hace un análisis global de los diferentes esquemas de síntesis de sonido existentes, y de su evolución a través del tiempo. Finalmente se adopta una técnica y se definen las principales características del proyecto a realizar. 1.1. Tipos de sintetizadores en la actualidad En la actualidad existen diferentes esquemas de síntesis de sonidos, que se clasifican de acuerdo a la técnica particular empleada. La figura 1.1 resume los métodos que han surgido desde los comienzos de la síntesis digital hasta el día de hoy [1].

FIGURA 1.1. Diferentes técnicas de síntesis digital de sonido

A continuación se da una muy breve descripción de cada uno de los esquemas mencionados. i. Algoritmos Abstractos Se trata de técnicas que producen sonido basado en una determinada fórmula matemática, sin guardar, en general, una relación directa con sonidos o principios acústicos subyacentes al mundo real. Al utilizar este método, es difícil predecir qué tipo de sonido es producido por un algoritmo en particular, como también diseñar un algoritmo que resulte en un sonido definido. Dentro de esta categoría se hallan los métodos correspondientes a la clasificación tradicional conocida como “técnicas no lineales” que comprenden la síntesis por FM (modulación frecuencial) y waveshaping. En el primer caso un oscilador (modulador) controla la frecuencia de otro (portadora), como en el caso del sintetizador DX-7 de Yamaha, lanzado en el año 1983*. En el segundo caso, se afecta a una señal, usualmente una sinusoide, por una curva de transferencia no lineal, produciendo un efecto similar a la saturación de un amplificador. Se ha empleado este último esquema para imitar el timbre de ciertos instrumentos de viento.

*

Como se explica en la sección 2.1, la síntesis por FM guarda relación con un fenómeno físico presente en los instrumentos de cuerda.

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

4

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

ii. Procesamiento de Muestras Grabadas Corresponden a esta categoría los llamados samplers, cuyo principio de funcionamiento consiste en grabar, procesar y reproducir sonidos. Aunque estrictamente hablando esta técnica no crea sonidos desde cero, la misma ofrece una variedad infinita de posibilidades, al grabar digitalmente sonidos reales o sintéticos, filtrarlos o editarlos, y combinarlos con otras señales, hasta el punto de no distinguir el sonido original. Se trata éste de un esquema altamente difundido en la actualidad. iii. Modelado Espectral Los modelos espectrales concentran su atención en las propiedades dentro del dominio frecuencial de las ondas sonoras tal como son percibidas por el oído, desde un punto de vista psicoacústico. En un principio, esta categoría incluía a las entonces llamadas “técnicas lineales”, que comprendían la síntesis aditiva y la síntesis substractiva. La primera consiste en superponer un conjunto de senoides de distintas fases, frecuencias y amplitudes, para conformar un mapa espectral definido, el cual puede obtenerse por un análisis de Fourier de una determinada forma de onda. La segunda técnica parte de una señal excitadora, de gran riqueza espectral, la cual es procesada por medio de filtros de segundo orden, los cuales emulan las resonancias del cuerpo del instrumento, que caracterizan el timbre del mismo. Métodos más recientes tienen en cuenta el carácter no estacionario de los timbres, y los caracterizan por la evolución temporal de sus componentes espectrales. Otros esquemas modelan al sonido como una superposición de componentes armónicas (parte principal) sumada a una componente de ruido (parte residual), proporcionando una estrategia más eficaz para generar sonidos percusivos, allí donde las demás técnicas de este tipo no son satisfactorias. iv. Modelado Físico Este es el esquema de síntesis en el que se hará mayor énfasis, no solo por ser el más estudiado en la actualidad, sino porque es el marco en el cual se desarrolla el presente trabajo. Se puede clasificar en dos categorías, de la siguiente forma (ver [2], [3], [4], [5] para una descripción detallada). 1. Técnicas de dominio temporal − Digital Waveguide (DWG) Este método de “guía de onda digital” está basado en la solución de d’Alembert de la ecuación de onda, es decir, el principio de propagación de ondas analizado como la superposición de dos componentes viajando en direcciones opuestas. Este enfoque es aplicable al modelado de ciertos instrumentos musicales (cuerdas, vientos, instrumentos de metal, etc.). El modelo en sí está conformado por líneas de retardo, filtros digitales y frecuentemente elementos no lineales. En principio éstos pueden verse como una clase particular de esquema de diferencias finitas para modelado físico numérico. De esta forma se modela la propagación de onda en medios a parámetros distribuidos tales como cuerdas, tubos, bocinas, platillos, membranas y espacios acústicos. La figura 1.2. muestra la implementación fundamental del método. Dos líneas de retardo unidireccionales, implementadas como buffers cuya capacidad N representa la longitud del medio unidimensional de propagación, donde el contenido es desplazado sin alteración en cada paso de simulación hacia derecha o izquierda, según se trate de la componente progresiva o regresiva de la onda total. Luego, en cada punto (posición de la Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

5

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

línea de retardo) donde se requiera la determinación del valor de la onda, simplemente se calcula una suma algebraica de los valores correspondientes de ambos buffers.

FIGURA 1.2. Composición de la onda resultante con DWG – (Fuente [3])

Un aspecto importante es que el efecto de las pérdidas distribuidas y la dispersión de onda son concentrados en un conjunto de filtros digitales, dispuestos en puntos discretos a lo largo de la línea de retardo, en la cual se manifiesta una propagación ideal. Es usual combinar modelos distribuidos con modelos a base de filtros a parámetros concentrados. La figura 1.3. ilustra el caso del modelo de un instrumento de cuerda accionado por arco, donde puede verse la separación entre los dos tipos de componentes mencionados. La onda viaja en una dirección, y luego de ser sometida al efecto de la excitación no lineal (modelo del arco), concentrada en un punto intermedio de la cuerda, continúa su propagación hasta la terminación (puente) donde una parte es transferida a la salida, mientras otra (onda reflejada) es reinyectada en la línea de retardo inferior, donde se propaga en sentido inverso al anterior. En el extremo izquierdo se asume una reflexión total y sin distorsión, calculada como una ganancia unitaria negativa, para finalmente cerrar el ciclo.

FIGURA 1.3. Modelo basado en DWG de un instrumento de cuerda accionado por arco - (Fuente [3])

Este método, introducido por J. Smith en 1986 [5], es actualmente el más empleado entre los métodos de modelado físico, y se ha implementado en versiones comerciales de sintetizadores como ser el VL1 de Yamaha.

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

6

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

− Finite Difference Time Domain (FDTD) En este caso se parte de una discretización directa de la ecuación de onda. Las derivadas de segundo orden son reemplazadas por diferencias simétricas de segundo orden, tanto para tiempo como para espacio. Este proceso resulta en una fórmula recursiva para cada posición espacial, siendo la solución en cada punto calculada a partir de las correspondientes a puntos adyacentes. Presenta la ventaja de requerir menor cantidad de recursos en su cómputo, aunque el método es menos robusto numéricamente que el caso de las DWG. − Wave Digital Filter (WDF) Este método se originó en la necesidad de simular el comportamiento de circuitos analógicos conformados por elementos a parámetros concentrados. Este enfoque apunta a un modelo electroacústico del instrumento. Si bien es muy robusto computacionalmente, se centra en el estudio de elementos a parámetros concentrados, lo cual lo hace poco eficaz para modelar fenómenos de propagación de ondas. Su rol es más bien complementario de la técnica de DWG. − Modelado Mixto Como su nombre lo indica, resulta de integrar los anteriores enfoques de forma de cubrir los diferentes aspectos del modelado de forma más versátil y efectiva. 2. Técnicas de descomposición modal Los anteriores métodos DWG, WDF y FDTD son técnicas de simulación explícitas en el dominio temporal. Las técnicas de descomposición modal emplean formulaciones de los sistemas bajo estudio dentro del dominio frecuencial. En ellas se descompone el comportamiento de un sistema en una suma de exponenciales decrecientes, donde las componentes oscilatorias representan resonancias o autovalores del sistema. − Síntesis Modal Se trata de un esquema introducido a fines de los ’80, pero que aun así se adapta a ciertas aplicaciones actuales. Consiste en representar una estructura vibrante como una serie de osciladores elementales independientes, provistos de información de acoplamiento. Cada oscilador modela un modo natural, y la información de acoplamiento representa la forma geométrica de cada modo vibratorio en la estructura. Existen algunos trabajos muy recientes [26] basados en esta técnica, que apuntan a resolver los fenómenos oscilatorios en cuerpos 2D y 3D de geometrías genéricas. − Functional Transformation Method (FTM) El método de transformación funcional [6] es un esquema introducido recientemente (Trautmann, Rabenstein, 2002) para la síntesis de sonido por modelado físico. Basado en transformaciones integrales, provee una descripción paralela del sistema para cualquier modelo físico lineal, usualmente descripto por un sistema de ecuaciones diferenciales parciales (PDE). Tal descripción paralela puede ser implementada a través de un set de sistemas recursivos elementales dispuestos en paralelo. Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

7

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

El procedimiento general comienza con una discretización del modelo en tiempo continuo, de forma similar al proceso de discretización de los modelos de redes eléctricas y otros fenómenos físicos descriptos por ecuaciones diferenciales ordinarias (ODE). El primer paso consiste en aplicar una apropiada transformación a la ecuación diferencial, de forma tal que el sistema en tiempo continuo queda representado por una función transferencia. Luego ésta es transformada en un modelo en tiempo discreto. Cuando se estudia un sistema multidimensional (MD), se requieren dos tipos de transformaciones: una transformación respecto del tiempo, la cual resuelve el problema de condiciones iniciales (IC), y una transformación respecto del espacio, que resuelve el problema con condiciones de contorno (BC). Para ello se introduce la llamada Transformada de SturnLiouville (T), que cumple un rol análogo a la Transformada de Laplace (L), pero aplicada al caso del espacio en lugar del tiempo. Así se pueden convertir las ecuaciones diferenciales en ecuaciones algebraicas ordinarias, al realizar un cambio de variables donde, además de la usual frecuencia compleja ‘s’ se introduce la llamada frecuencia espacial ‘μ'. La reagrupación de esta ecuación algebraica resulta en una función transferencia multidimensional que modela el problema original. Para obtener la solución se puede aplicar la clásica transformación análoga a discreta. Las transformaciones inversas con respecto al espacio (Τ -1) y respecto al tiempo discreto (Z -1), resulta en un sistema discreto cuya forma es especialmente apropiada para una implementación directa con métodos computacionales. La figura 1.4. muestra el procedimiento general para resolver el problema con condiciones iniciales y de contorno empleando el FTM.

FIGURA 1.4. Procedimiento general de resolución basado en FTM – (Fuente [6])

Mientras que para el caso de sistemas totalmente lineales la solución tiene asociada una estabilidad inherente a los principios físicos subyacentes al modelo, en el caso de sistemas no lineales esto no se cumple necesariamente. En [7], de los mismos autores de [6], se explica cómo abarcar esta clase de sistemas, a partir de consideraciones energéticas instantáneas. En [8] además se brinda un enfoque para una implementación alternativa del método, que persigue optimizar el uso de recursos de procesamiento, derivando en algoritmos altamente eficientes. De esta forma el campo de aplicación de este método se vuelve muy amplio, no sólo para síntesis de sonido, sino para simulación en tiempo real de diversos tipos de sistemas multidimensionales, descriptos en principio por un conjunto de ecuaciones diferenciales parciales. 1.2. Selección de un esquema de síntesis 1.2.1. Tendencia en la actualidad Un análisis cronológico de la evolución de las técnicas de síntesis de sonido desde sus comienzos, permite sacar algunas conclusiones sobre la tendencia actual y futura en esta área. Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

8

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

A excepción quizás de los sintetizadores basados en algoritmos abstractos, todos los esquemas, en mayor o menor medida, han buscado imitar, o al menos asimilar en su forma, aquellos sonidos correspondientes a instrumentos musicales acústicos, o más en general, cualquier sonido natural proveniente del mundo real, con una potencial aplicación a la creación musical. Se ha argumentado a favor de esto último que si bien no es difícil generar toda clase de formas de onda dentro del rango audible, no es nada sencillo establecer ni mucho menos parametrizar los patrones acústicos que determinan que un sonido tenga valor estético. El hecho de afectar el universo de variables de un conjunto de restricciones, las llamadas leyes físicas, se traduce en una estructuración de las formas acústicas, imponiendo determinadas pautas a las que nuestra percepción está más acostumbrada. La tendencia parece ser la búsqueda de sonidos que resulten naturales, aun cuando no imiten instrumentos acústicos clásicos, y dejar de lado los sonidos excesivamente sintéticos. Esto también implica una forma más eficaz de controlar la forma del sonido producido, ya que el conjunto de parámetros que lo definen está compuesto por magnitudes físicas de tipo geométrico (longitud, sección transversal, forma del cuerpo del instrumento), estructural (relación entre los distintos componentes del modelo), propiedades del material (elasticidad, momento de inercia, densidad), dinámicas (masa, velocidad, presión, fuerza) y energéticas (disipación por rozamiento, transferencia de un medio a otro).

FIGURA 1.5. Interfaz de control basada en captación de movimiento – (Fuente [2])

Si bien las técnicas de modelado físico permiten imitar con alto grado de detalle algunas clases de instrumentos, el interés real no se centra en el realismo, sino en qué tan natural y expresivo es el resultado [9]. Actualmente se están desarrollando numerosas interfaces (ver [2], [14]) que permiten al intérprete controlar en forma muy expresiva el mecanismo de excitación (ver figura 1.5), y así introducir una cantidad de información lo suficientemente grande como para producir una interpretación más “viva” que en el caso de los samplers y otros esquemas más convencionales, que sólo reproducen una y otra vez el mismo sonido, alterándolo en forma más limitada. En general, comparado con otros métodos, el esquema de modelado físico es el único que puede recrear la riqueza, vividez y complejidad de los sonidos naturales, pero también es el único que puede reproducir el sentimiento de interactividad asociado a la ejecución de un instrumento acústico. Mientras que en comparación con un sampler la demanda de memoria es mucho menor, al estar los sonidos caracterizados por un pequeño conjunto de parámetros físicos en lugar de almacenarse grandes bancos de grabaciones, la capacidad de procesamiento necesaria es muy superior. Es por esto último que este esquema ha cobrado popularidad recién en los últimos años, donde en el mercado está disponible una amplia gama de microprocesadores de alta potencia computacional y bajo costo, mientras que a su vez existe un permanente desarrollo de dicha tecnología. Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

9

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

1.2.2. DWG vs. FTM Sin duda la técnica basada en DWG es la más popular hasta hoy, y motivo de mayores investigaciones. Se basa en la analogía entre los mecanismos de propagación de ondas en medios acústicos y eléctricos. Esta analogía es expresada matemáticamente por la ecuación de onda, la cual es una descripción simplificada del fenómeno de propagación en sólidos y fluidos. Analicemos a modo de ejemplo el caso de una cuerda tensa. La ecuación simplificada queda expresada por la ecuación (1.1) ∂2 y ∂2 y ρA 2 − TC 2 = f e ( x, t ) ∂t ∂x

(1.1)

donde TC es la tensión de la cuerda, ρ es su densidad, A es su sección transversal y fe (x,t) es la carga distribuida (fuerza por unidad de longitud) que excita la cuerda. La solución de esta ecuación (D’Alembert) resulta en la superposición de dos formas de onda, una progresiva y otra regresiva, que se propagan con velocidad de fase lineal con la frecuencia (sin dispersión) y pérdidas nulas (sin atenuación), o en otras palabras, sin distorsión. Esto es lo que motiva el enfoque de DWG, en el que simplemente se traslada con una determinada velocidad una forma de onda, simulando la forma más elemental de propagación. Como desde un punto de vista acústico son muy importantes la dispersión de onda (velocidad de fase no lineal) y atenuación, éstas deben introducirse como complemento del modelo, no siendo inherentes a él, ni estando totalmente integradas al mismo, y siendo sus parámetros de dificultosa estimación Mientras tanto, el enfoque de FTM se presenta como un método más sólido y completo, al ser su aplicación independiente de la forma de la solución, y adaptable a cualquier sistema que sea expresable en términos de ecuaciones diferenciales. Consideremos la expresión (1.2) que amplía a la (1.1) [10]

ρA

∂2 y ∂4 y ∂2 y ∂y ∂3 y + EI − T + d + d = f e ( x, t ) C 1 3 ∂t ∂t∂x 2 ∂t 2 ∂x 4 ∂x 2

(1.2)

Aquí E es el módulo de Young del material de la cuerda, I es el momento de inercia de la sección con respecto al eje que pasa por la fibra neutra y es transversal a la dirección del desplazamiento, d1 y d3 son coeficientes de pérdidas independientes y dependientes de la frecuencia, respectivamente. Este modelo se reduce al (1.1) para el caso de tener una cuerda de rigidez nula y sin pérdidas de energía. La rigidez de la cuerda introduce un término de cuarto orden que causa la dispersión de onda. En la figura 1.6 se muestra esquemáticamente la propagación de una onda formada por la superposición de dos componentes de distinta frecuencia, en un medio dispersivo. Se observa que las componentes espectrales viajan con diferente velocidad, con lo que se “desarma” progresivamente la relación entre armónicos. Los coeficientes d1 y d3 no sólo concentran el efecto del roce viscoso con el aire sino también las pérdidas en el material de la cuerda y el acoplamiento con el cuerpo de resonancia. Se evidencia aquí la ventaja de FTM sobre DWG en cuanto a versatilidad e integridad. Si bien es atractivo el enfoque de DWG en cuanto a su orientación modular, su evolución se enfrenta a un cuello de botella a la hora de intentar reproducir fenómenos más sutiles. Se siguen generando técnicas para rellenar estos huecos, por ejemplo las llamadas líneas de retardo fraccionales [11] que aportan mayor resolución al ajustar la longitud de las guías de onda. Algunos autores incluso sostienen que el modelo de la guía de onda puede difícilmente considerarse como un modelo físico en sí [5], y que no es controlable de forma intuitiva. De Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

10

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

esta forma el FTM parece superar este enfoque cuando entran en juego los elementos más delicados del modelo, que constituyen la riqueza del sonido. Como desventaja cabe nombrar la menor modularidad del FTM y la mayor complejidad y demanda de recursos computacionales en su implementación.

FIGURA 1.6. Efecto de la dispersión en la propagación de onda

1.2.3. Selección final Finalmente, considerando en forma global el estado actual de desarrollo en las áreas relevantes y la tendencia de la síntesis digital, se ha optado por orientar el presente trabajo a la síntesis de sonido por modelado físico basado en FTM. Elegimos como modelo de trabajo el de una cuerda con rigidez no nula, accionada por un excitador no lineal, ya que es un ejemplo adaptable a una amplia gama de instrumentos acústicos existentes o a la creación de nuevos sonidos.

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

11

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

2. Análisis del Modelo Físico A continuación analizaremos por separado los componentes que integran el modelo que es motivo del presente trabajo, que ha sido dividido en el resonador, el mecanismo de excitación y el radiador. 2.1. Modelo del resonador El resonador es en nuestro caso una cuerda con rigidez no nula. Aunque en apariencia sencillo, este sistema es susceptible de ser modelado teniendo en cuenta una gran cantidad de fenómenos mutuamente relacionados [12]. Para comenzar, en una cuerda conviven dos modos de propagación transversales, el horizontal y el vertical, un modo longitudinal y otro torsional. Los modos transversales son los predominantes en la mayoría de los casos, y en el caso de instrumentos como el piano, donde la excitación tiene una interacción unidireccional con la cuerda, predomina el modo vertical por sobre el horizontal. Es el modo tratado por excelencia en los análisis de propagación de ondas en cuerdas ideales. La onda propiamente dicha se genera a partir de una perturbación en que cada punto de la cuerda se ve alejado de la posición central de reposo, propagándose dicha perturbación a una velocidad c determinada por parámetros físicos y geométricos de la cuerda, siendo en general dicha velocidad dependiente de la frecuencia, lo cual explica el efecto de dispersión. El modo longitudinal ([13], [16]) está presente en las cuerdas de las octavas bajas del piano y es responsable de gran parte de su riqueza armónica. Se trata de compresiones y expansiones del material en el sentido longitudinal de la cuerda, los cuales se propagan a diferente velocidad que los demás modos. Los modos transversales y el longitudinal se encuentran mutuamente acoplados, de forma que las oscilaciones transversales excitan a las longitudinales, y éstas a su vez excitan a las transversales. Algunos experimentos en que se separaba cada modo en una guía de onda diferente produjeron resultados poco satisfactorios [13], dando la impresión de estar ambos efectos desvinculados, obteniéndose un sonido poco realista. Por ello la inclusión de este efecto en el modelo demanda una completa integración de ambos tipos de modos, con la complejidad y consumo de recursos que ello supone. El tercer modo, de tipo torsional, es sólo apreciable en instrumentos cuya excitación actúa tangencialmente al eje de la cuerda, como en el caso del violín (uno de los grandes retos actuales en términos de modelado físico). Aquí la cuerda se comporta como un muelle de torsión, en que las deformaciones del material se propagan a lo largo de ésta. También en este caso se presenta una compleja interacción con los demás modos oscilatorios. Aun en un modelo simplificado con un único modo transversal de propagación, dado que su contribución predomina fuertemente frente a las otras, existe un fenómeno no lineal que se hace presente sobre todo en el caso de cuerdas muy largas comparadas con su sección transversal [15]. En la figura 2.1 se observa una cuerda vibrante, analizada en cuatro instantes correspondientes a sus puntos de máxima excursión positiva y negativa, y las dos posiciones intermedias de mínimo estiramiento. Durante la vibración de la cuerda, la longitud de la misma se ve levemente aumentada al alejarse del punto de reposo, y como resultado de esto su tensión aumenta una cierta cantidad. A su vez la frecuencia natural del modo fundamental de oscilación depende directamente tanto de la tensión como de la longitud, de acuerdo con la expresión (2.1) [12] f =

1 Ts 2L μ

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

(2.1)

12

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

siendo aquí μ la densidad lineal de la cuerda. Suponiendo que la velocidad de propagación de las ondas longitudinales es mucho mayor que la de las transversales, se puede considerar que el aumento de tensión producido por el estiramiento se propaga en forma instantánea por toda la longitud de la cuerda (en otras palabras, es dependiente sólo del tiempo e igual en todos los puntos).

FIGURA 2.1. Efecto no lineal de modulación frecuencial en la oscilación de una cuerda

El efecto puede entenderse como una modulación de la frecuencia fundamental del modo transversal f, con una frecuencia del mismo orden que ésta, y es responsable de patrones armónicos complejos en el sonido de ciertos instrumentos musicales. Algunos autores [6] afirman que es factible adaptar el método de FTM para incluir este último efecto con un modesto costo computacional extra, aunque no se proporcionan demasiados detalles al respecto. Una posibilidad es aproximar la longitud en cada instante por la que adopta un armónico fundamental de igual valor eficaz. Aplicando luego la fórmula integral de la longitud de una cuerda y aproximando por Taylor la raíz, se obtiene la expresión (2.2) ⎛ ⎞ π 2Ymáx 2 L' ≅ L ⎜⎜1 + sen 2ωt ⎟⎟ 2 4L ⎝ ⎠

(2.2)

la cual es válida para Ymáx (void) * Parámetros: * (Ptr): dirección del buffer W / c0 * (Ptr): dirección del buffer W / c1 * (Ptr): dirección del buffer YL / YR * (Ptr): dirección del buffer H (parámetros del martillo) * (Ptr): dirección del buffer b1 * (Ptr): dirección del buffer aL / aR * (float): coeficiente de normalización para la cuerda en cuestión * -----------------------------------------------------------------------------

_NUM_ARMONICOS _NUM_FRAMES _NUM_CICLOS _FS

.set .set .set .set

80 - 11 512 _NUM_FRAMES / 2 44100

FS: TS: CONST_0 CONST_1

.float .float .float .float

_FS 1.0/_FS 0.0 1.0

_sim_cuerda: STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW

.D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2

A15,*B15-B14,*B15-A14,*B15-B13,*B15-A13,*B15-B12,*B15-A12,*B15-B11,*B15-A11,*B15-B10,*B15-A10,*B15-B9,*B15-A9,*B15-B8,*B15-A8,*B15-B7,*B15-A7,*B15-B6,*B15-A6,*B15-B5,*B15-A5,*B15-B4,*B15-A4,*B15-B3,*B15-A3,*B15-B2,*B15-A2,*B15-B1,*B15-A1,*B15-B0,*B15-A0,*B15--

; ; ; ; ; ;Guarda en el stack los registros que ;se van a usar (PUSH) ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;Salva el SP (stack pointer) ;Salva el coeficiente de normalización

||

MV MV

.L1 .L2

B15,A3 A10,B13

||

MVK LDW

.S2 .D2

_NUM_CICLOS,B1 ;Inicializa cont1 *+B6[9],A11 ;Cargo el último valor de Fe2

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

100

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida BUCLE_PRINCIPAL: [B1] ||

SUB MV

.S2 .L1

B1,1,B1 B4,A0

;Decrementa cont2 ;Copia la dirección del buffer ;W-2/c1 en el puntero de W

*============================================================================== *-----------------------------------------------------------------------------* Comienzo del Paso de Integración IMPAR *-----------------------------------------------------------------------------*============================================================================== *CICLO #0 --------------------------------------------------------------------;Lee de memoria W-1 y c0 ;Lee de memoria W-2 y c1 ;Carga en A5 la 1º parte de la ;direcc. de CONST_0 *CICLO #1 --------------------------------------------------------------------|| ||

||

LDDW LDDW MVKL

.D1 .D2 .S1

*A4++[4],A15:A14 *B4++[4],B15:B14 CONST_0,A5

MVKH

.S1

CONST_0,A5

LDW

.D1

*A5,A7

;Carga en A5 la 2º parte de la ;direcc. de CONST_0 ;Carga en A7 CONST_0

*CICLO #2 --------------------------------------------------------------------||

MVK LDW

.S1 .D1

_NUM_ARMONICOS,A1 *A5,B7

;Inicializa cont2 ;Carga en B7 CONST_0

*CICLO #3 --------------------------------------------------------------------||

LDDW LDDW

.D1 .D2

*A4++[4],A15:A14 *B4++[4],B15:B14

;Lee de memoria W-1 y c0 ;Lee de memoria W-2 y c1

*CICLO #4 --------------------------------------------------------------------LDW

.D1

*A8++[8],A10

;Lee de memoria b1

*CICLO #5 --------------------------------------------------------------------MPYSP

.M2X

B14,A15,B5

;Multiplica W-2*c0 -> S2

*CICLO #6 --------------------------------------------------------------------|| ||

LDDW LDDW MPYSP

.D1 .D2 .M1X

*A4++[4],A15:A14 *B4++[4],B15:B14 A14,B15,A12

;Lee de memoria W-1 y c0 ;Lee de memoria W-2 y c1 ;Multiplica W-1*c1 -> S1

*CICLO #7 --------------------------------------------------------------------LDW

.D1

*A8++[8],A10

;Lee de memoria b1

*CICLO #8 --------------------------------------------------------------------MPYSP

.M2X

B14,A15,B5

;Multiplica W-2*c0 -> S2

*CICLO #9 --------------------------------------------------------------------|| ||

LDDW LDDW MPYSP

.D1 .D2 .M1X

*A4++[4],A15:A14 *B4++[4],B15:B14 A14,B15,A12

;Lee de memoria W-1 y c0 ;Lee de memoria W-2 y c1 ;Multiplica W-1*c1 -> S1

*CICLO #10 -------------------------------------------------------------------LDW

.D1

*A8++[8],A10

;Lee de memoria b1

*CICLO #11 -------------------------------------------------------------------|| ||

MPYSP MPYSP ADDSP

.M1 .M2X .L1X

A11,A10,A13 B14,A15,B5 A12,B5,A5

;Multiplica Fe2*b1 -> S3 ;Multiplica W-2*c0 -> S2 ;Suma S1+S2 -> S12

*CICLO #12 -------------------------------------------------------------------|| ||

LDDW LDDW MPYSP

.D1 .D2 .M1X

*A4++[4],A15:A14 *B4++[4],B15:B14 A14,B15,A12

;Lee de memoria W-1 y c0 ;Lee de memoria W-2 y c1 ;Multiplica W-1*c1 -> S1

*CICLO #13 --------------------------------------------------------------------

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

101

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida LDW

.D1

*A8++[8],A10

;Lee de memoria b1

*CICLO #14 -------------------------------------------------------------------LDDW MPYSP MPYSP ADDSP

|| || ||

.D2 .M1 .M2X .L1X

*B8++[4],B11:B10 A11,A10,A13 B14,A15,B5 A12,B5,A5

;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-2*c0 -> S2 ;Suma S1+S2 -> S12

*CICLO #15 -------------------------------------------------------------------LDDW LDDW MPYSP ADDSP

|| || ||

.D1 .D2 .M1X .L1

*A4++[4],A15:A14 *B4++[4],B15:B14 A14,B15,A12 A13,A5,A9

;Lee de memoria W-1 y c0 ;Lee de memoria W-2 y c1 ;Multiplica W-1*c1 -> S1 ;Suma S3+S12 -> W

*CICLO #16 -------------------------------------------------------------------LDW

.D1

*A8++[8],A10

;Lee de memoria b1

*CICLO #17 -------------------------------------------------------------------LDDW MPYSP MPYSP ADDSP

|| || ||

.D2 .M1 .M2X .L1X

*B8++[4],B11:B10 A11,A10,A13 B14,A15,B5 A12,B5,A5

;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-2*c0 -> S2 ;Suma S1+S2 -> S12

*CICLO #18 -------------------------------------------------------------------LDDW LDDW MPYSP ADDSP

|| || ||

.D1 .D2 .M1X .L1

*A4++[4],A15:A14 *B4++[4],B15:B14 A14,B15,A12 A13,A5,A9

;Lee de memoria W-1 y c0 ;Lee de memoria W-2 y c1 ;Multiplica W-1*c1 -> S1 ;Suma S3+S12 -> W

*CICLO #19 -------------------------------------------------------------------LDW MPYSP MPYSP

|| ||

.D1 .M1X .M2X

*A8++[8],A10 A9,B10,A2 A9,B11,B9

;Lee de memoria b1 ;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK

*CICLO #20 -------------------------------------------------------------------STW LDDW MPYSP MPYSP ADDSP

|| || || ||

.D1 .D2 .M1 .M2X .L1X

A9,*A0++[8] *B8++[4],B11:B10 A11,A10,A13 B14,A15,B5 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-2*c0 -> S2 ;Suma S1+S2 -> S12

*CICLO #21 -------------------------------------------------------------------LDDW LDDW MPYSP ADDSP

|| || ||

.D1 .D2 .M1X .L1

*A4++[4],A15:A14 *B4++[4],B15:B14 A14,B15,A12 A13,A5,A9

;Lee de memoria W-1 y c0 ;Lee de memoria W-2 y c1 ;Multiplica W-1*c1 -> S1 ;Suma S3+S12 -> W

*CICLO #22 -------------------------------------------------------------------|| || || [A1] B

LDW MPYSP MPYSP

.M1X .M2X .S1

.D1 *A8++[8],A10 A9,B10,A2 A9,B11,B9 BUCLE_IMPAR

;Lee de memoria b1 ;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Salto a BUCLE_IMPAR (si cont2 > 0)

*CICLO #23 -------------------------------------------------------------------|| || || ||

STW LDDW MPYSP MPYSP ADDSP

.D1 .D2 .M1 .M2X .L1X

A9,*A0++[8] *B8++[4],B11:B10 A11,A10,A13 B14,A15,B5 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-2*c0 -> S2 ;Suma S1+S2 -> S12

*CICLO #24 -------------------------------------------------------------------|| || ||

LDDW LDDW MPYSP ADDSP

.D1 .D2 .M1X .L1

*A4++[4],A15:A14 *B4++[4],B15:B14 A14,B15,A12 A13,A5,A9

;Lee de memoria W-1 y c0 ;Lee de memoria W-2 y c1 ;Multiplica W-1*c1 -> S1 ;Suma S3+S12 -> W

*-----------------------------------------------------------------------------* Comienzo del bucle principal

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

102

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida *-----------------------------------------------------------------------------BUCLE_IMPAR: *CICLO #25 -------------------------------------------------------------------|| || || || || [A1] B

LDW MPYSP MPYSP ADDSP ADDSP

.D1 .M1X .M2X .L1 .L2 .S1

*A8++[8],A10 A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7 BUCLE_IMPAR

;Lee de memoria b1 ;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR ;Salto a BUCLE_IMPAR (si cont2 > 0)

*CICLO #26 -------------------------------------------------------------------STW LDDW MPYSP MPYSP ADDSP

|| || || ||

.D1 .D2 .M1 .M2X .L1X

A9,*A0++[8] *B8++[4],B11:B10 A11,A10,A13 B14,A15,B5 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-2*c0 -> S2 ;Suma S1+S2 -> S12

*CICLO #27 -------------------------------------------------------------------|| || || || [A1] SUB

LDDW LDDW MPYSP ADDSP

.D1 .D2 .M1X .L1 .S1

*A4++[4],A15:A14 *B4++[4],B15:B14 A14,B15,A12 A13,A5,A9 A1,1,A1

;Lee de memoria W-1 y ;Lee de memoria W-2 y ;Multiplica W-1*c1 -> ;Suma S3+S12 -> W ;Decrementa cont2 (si

c0 c1 S1 cont2 > 0)

*-----------------------------------------------------------------------------* Final del bucle principal *-----------------------------------------------------------------------------*CICLO #28 -------------------------------------------------------------------|| || || ||

LDW MPYSP MPYSP ADDSP ADDSP

.D1 .M1X .M2X .L1 .L2

*A8++[8],A10 A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7

;Lee de memoria b1 ;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*CICLO #29 -------------------------------------------------------------------|| || || ||

STW LDDW MPYSP MPYSP ADDSP

.D1 .D2 .M1 .M2X .L1X

A9,*A0++[8] *B8++[4],B11:B10 A11,A10,A13 B14,A15,B5 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-2*c0 -> S2 ;Suma S1+S2 -> S12

*CICLO #30 -------------------------------------------------------------------||

MPYSP ADDSP

.M1X .L1

A14,B15,A12 A13,A5,A9

;Multiplica W-1*c1 -> S1 ;Suma S3+S12 -> W

*CICLO #31 -------------------------------------------------------------------|| || || ||

LDW MPYSP MPYSP ADDSP ADDSP

.D1 .M1X .M2X .L1 .L2

*A8++[8],A10 A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7

;Lee de memoria b1 ;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*CICLO #32 -------------------------------------------------------------------|| || || ||

STW LDDW MPYSP MPYSP ADDSP

.D1 .D2 .M1 .M2X .L1X

A9,*A0++[8] *B8++[4],B11:B10 A11,A10,A13 B14,A15,B5 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-2*c0 -> S2 ;Suma S1+S2 -> S12

*CICLO #33 -------------------------------------------------------------------||

MPYSP ADDSP

.M1X .L1

A14,B15,A12 A13,A5,A9

;Multiplica W-1*c1 -> S1 ;Suma S3+S12 -> W

*CICLO #34 --------------------------------------------------------------------

||

MPYSP MPYSP

.M1X .M2X

A9,B10,A2 A9,B11,B9

;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

103

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida || ||

ADDSP ADDSP

.L1 .L2

A7,A2,A7 B7,B9,B7

;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*CICLO #35 -------------------------------------------------------------------|| || ||

STW LDDW MPYSP ADDSP

.D1 .D2 .M1 .L1X

A9,*A0++[8] *B8++[4],B11:B10 A11,A10,A13 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Suma S1+S2 -> S12

*CICLO #36 -------------------------------------------------------------------ADDSP

.L1

A13,A5,A9

;Suma S3+S12 -> W

*CICLO #37 -------------------------------------------------------------------|| || ||

MPYSP MPYSP ADDSP ADDSP

.M1X .M2X .L1 .L2

A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7

;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*CICLO #38 -------------------------------------------------------------------|| || ||

STW LDDW MPYSP ADDSP

.D1 .D2 .M1 .L1X

A9,*A0++[8] *B8++[4],B11:B10 A11,A10,A13 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Suma S1+S2 -> S12

*CICLO #39 -------------------------------------------------------------------ADDSP

.L1

A13,A5,A9

;Suma S3+S12 -> W

*CICLO #40 -------------------------------------------------------------------|| || ||

MPYSP MPYSP ADDSP ADDSP

.M1X .M2X .L1 .L2

A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7

;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*CICLO #41 -------------------------------------------------------------------||

STW LDDW

.D1 .D2

A9,*A0++[8] *B8++[4],B11:B10

;Escribe en memoria W ;Lee de memoria aL y aR

*CICLO #42 -------------------------------------------------------------------ADDSP

.L1

A13,A5,A9

;Suma S3+S12 -> W

*CICLO #43 -------------------------------------------------------------------|| || ||

MPYSP MPYSP ADDSP ADDSP

.M1X .M2X .L1 .L2

A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7

;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*CICLO #44 -------------------------------------------------------------------STW

.D1

A9,*A0++[8]

;Escribe en memoria W

*====== MARTILLO ============================================================== ||

MV

.L1

B6,A5

|| || ||

MVKL MVKL LDDW

.S1 .S2 .D2

TS,A10 FS,B2 *++B6,B11:B10

;Copio la dirección de p_H para ;accesos al buffer desde el lado A ;A5-> Lado A, B6-> Lado B ;Cargo 1º parte de la direcc. de TS ;Cargo 1º parte de la direcc. de FS ;Cargo Yh:aux en B11:B10

*CICLO #45 -------------------------------------------------------------------*====== MARTILLO ============================================================== || || ||

MVKH MVKH LDDW LDDW

.S1 .S2 .D1 .D2

TS,A10 FS,B2 *A5++[2],A13:A12 *++B6[2],B15:B14

;Cargo ;Cargo ;Cargo ;Cargo

2º parte de la direcc. de TS 2º parte de la direcc. de FS Vh:(Ah*TS) en A13:A12 (-Kh):MUh en B15:B14

*CICLO #46 -------------------------------------------------------------------MPYSP

.M1X

A9,B10,A2

;Multiplica W*aL -> YLK

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

104

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida || || ||

MPYSP ADDSP ADDSP

.M2X .L1 .L2

A9,B11,B9 A7,A2,A7 B7,B9,B7

;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*====== MARTILLO ============================================================== || || ||

LDW LDW MVKL

.D1 .D2 .S2

*A10,A9 *B2,B3 CONST_1,B0

;Cargo TS en A9 ;Cargo FS en B3 ;Cargo 1º parte direcc. de CONST_1

*CICLO #47 -------------------------------------------------------------------STW

.D1

A9,*A0++[8]

;Escribe en memoria W

*====== MARTILLO ============================================================== || ||

MVKH LDW

.S2 .D2

CONST_1,B0 *B0,B12

;Cargo 2º parte direcc. de CONST_1 ;Cargo CONST_1 (=1.0) en B12

*CICLO #48 -------------------------------------------------------------------*====== MARTILLO ============================================================== ||

LDDW LDW

.D1 .D2

*A5++[2],A15:A14 *+B6[4],B11

;Cargo A:B en A15:A14 ;Cargo Yc(k-1) en B11

*CICLO #49 -------------------------------------------------------------------||

ADDSP ADDSP

.L1 .L2

A7,A2,A7 B7,B9,B7

;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*====== MARTILLO ============================================================== ||

LDW

.D1

*A5,A10

;Cargo (-TS/Mh) en A10

*CICLO #50 -------------------------------------------------------------------*====== MARTILLO ============================================================== ADDSP

.L1

A13,A12,A13

;Sumo (Ah*TS)+Vh -> A13

*CICLO #51 -------------------------------------------------------------------NOP *CICLO #52 -------------------------------------------------------------------||

ADDSP ADDSP

.L1 .L2

A7,A2,A7 B7,B9,B7

;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*-----------------------------------------------------------------------------* Sección Martillo *-----------------------------------------------------------------------------*CICLO #53 -------------------------------------------------------------------||

MV MV

.S1 .S2

A7,A5 B7,B5

;Salva la semisuma par de YL ;Salva la semisuma par de YR

*CICLO #54 -------------------------------------------------------------------||

MPYSP STW

.M1 .D2

A13,A9,A2 A13,*--B6[6]

;Multiplica Vh*TS -> A2 ;Guarda en memoria Vh (Retorna el ;p_H a la posición inicial

*CICLO #55 -------------------------------------------------------------------NOP *CICLO #55_1 -----------------------------------------------------------------||

ADDSP ADDSP

.L1 .L2

A5,A7,A7 B5,B7,B7

;Calcula la suma total de YL ;Calcula la suma total de YR

*CICLO #55_2 -----------------------------------------------------------------NOP *CICLO #55_3 ------------------------------------------------------------------

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

105

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida NOP *CICLO #55_4 -----------------------------------------------------------------NOP *CICLO #56 -------------------------------------------------------------------||

ADDSP LDW

.L2X .D2

A7,B7,B0 *+B6[11],B0

;Suma YL+YR->YT ( =Yc(k) ) ;Cargo Yc(k-2) en B0

*CICLO #57 --------------------------------------------------------------------

||

MPYSP

.M1X

A7,B13,A7

MPYSP

.M2

B7,B13,B7

;Aplica coef. de normaliz ;YL*Coef_N ->YL ;Aplica coef. de normaliz ;YR*Coef_N ->YR

*CICLO #58 -------------------------------------------------------------------ADDSP

.L2X

B10,A2,B10

;Suma Yh+(Vh*TS)->Yh

*CICLO #59 -------------------------------------------------------------------NOP *CICLO #60 -------------------------------------------------------------------STW

.D2

B0,*+B6[11]

;Guarda en memoria Yc(k-1) ;(Yc(k-1) en el paso siguiente es ;Yc(k) = YT del paso actual)

*CICLO #60_1 -------------------------------------------------------------------SUBSP

.L2

B11,B0,B11

;Resta Yc(k-1)-Yc(k-2)->B11

*CICLO #61 -------------------------------------------------------------------STW

.D1

A7,*A6++

;Guarda en memoria YL

*CICLO #62 -------------------------------------------------------------------||

SUBSP STW

.L2 .D2

B11,B10,B2 B10,*+B6[2]

;Resta Yc(k-1)-Yh(k)->B2 ;Guarda en memoria Yh

*CICLO #63 -------------------------------------------------------------------NOP *CICLO #64 --------------------------------------------------------------------

||

MPYSP

.M2

B11,B3,B11

STW

.D1

B7,*A6++

;Multiplica ( Yc(k-1)-Yc(k-2) ) * FS ;->B11 ;Guarda en memoria YR

*CICLO #65 -------------------------------------------------------------------NOP *CICLO #66 -------------------------------------------------------------------MPYSP

.M2

B2,B2,B9

;Multiplica Dy * Dy->B9

*CICLO #67 -------------------------------------------------------------------NOP *CICLO #68 -------------------------------------------------------------------SUBSP

.L2X

B11,A13,B11

;Resta (Yc(k)-Yc(k-1))*FS - Vh->B11

*CICLO #69 -------------------------------------------------------------------NOP *CICLO #70 -------------------------------------------------------------------||

MPYSP MPYSP

.M2 .M1X

B9,B14,B14 B9,A15,A15

;Multiplica Dy² * (-Kh)->B14 ;Multiplica Dy² * B->A15

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

106

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida *CICLO #71 -------------------------------------------------------------------MVKL

.S1

CONST_0,A7

;Carga 1º parte direcc. CONST_0

*CICLO #72 -------------------------------------------------------------------MPYSP MVKH

||

.M2 .S1

B11,B15,B15 CONST_0,A7

;Multiplica Dv * MUh->B15 ;Carga 2º parte direcc. CONST_0

*CICLO #73 -------------------------------------------------------------------LDW

.D1

*A7,A7

;Carga CONST_0 en A7

*CICLO #74 -------------------------------------------------------------------ADDSP

.L1

A15,A14,A14

;Suma Dy²*B + A->A14

*CICLO #75 -------------------------------------------------------------------NOP *CICLO #76 -------------------------------------------------------------------ADDSP

.L2

B15,B12,B15

;Suma Dv*MUh + 1.0->B15

*CICLO #77 -------------------------------------------------------------------NOP *CICLO #78 -------------------------------------------------------------------MPYSP

.M1X

A14,B14,A14

;Multiplica (Dy²*B+A) * (-Kh*Dy²) ;->A14

*CICLO #79 -------------------------------------------------------------------CMPLTSP

.S2X

B2,A7,B2

;

*CICLO #80 -------------------------------------------------------------------NOP *CICLO #81 -------------------------------------------------------------------NOP *CICLO #82 -------------------------------------------------------------------[!B2]

MPYSP

.M1X

A14,B15,A11

;Si Dy >= 0: ;Multiplica (Dy²*B+A)*(-Kh*Dy²) * ;(1+Dv*MUh)->Fe2

*CICLO #83 -------------------------------------------------------------------[B2]

MV

.S1

A7,A11

;Si Dy < 0: setea Fe2 = 0.0

*CICLO #84 -------------------------------------------------------------------NOP *CICLO #85 -------------------------------------------------------------------NOP *CICLO #86 -------------------------------------------------------------------||

MPYSP STW

.M1 .D2

A11,A10,A10 A11,*+B6[9]

;Multiplico Fe2*(-TS/Mh)->A10 ;Guarda en memoria Fe2

*CICLO #87 -------------------------------------------------------------------NOP *CICLO #88 -------------------------------------------------------------------NOP *CICLO #89 --------------------------------------------------------------------

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

107

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida NOP *CICLO #90 --------------------------------------------------------------------

||

STW

.D2

A10,*+B6[1]

;Guardo en memoria Ah

MV

.L1

A4,A0

;Copia la dirección del buffer ;W-2/c0 en el puntero de W

*============================================================================== *-----------------------------------------------------------------------------* Comienzo del Paso de Integración PAR *-----------------------------------------------------------------------------*==============================================================================

*CICLO #0 --------------------------------------------------------------------|| ||

LDDW LDDW MVKL

.D1 .D2 .S1

*--A4[4],A15:A14 *--B4[4],B15:B14 CONST_0,A5

;Lee de memoria W-2 y c0 ;Lee de memoria W-1 y c1 ;Carga en A5 la 1º parte de la ;direcc. de CONST_0

*CICLO #1 ---------------------------------------------------------------------

||

MVKH

.S1

CONST_0,A5

LDW

.D1

*A5,A7

;Carga en A5 la 2º parte de la ;direcc. de CONST_0 ;Carga en A7 CONST_0

*CICLO #2 --------------------------------------------------------------------||

MVK LDW

.S1 .D1

_NUM_ARMONICOS,A1 *A5,B7

;Inicializa cont2 ;Carga en B7 CONST_0

*CICLO #3 --------------------------------------------------------------------||

LDDW LDDW

.D1 .D2

*--A4[4],A15:A14 *--B4[4],B15:B14

;Lee de memoria W-2 y c0 ;Lee de memoria W-1 y c1

*CICLO #4 --------------------------------------------------------------------LDW

.D1

*--A8[8],A10

;Lee de memoria b1

*CICLO #5 --------------------------------------------------------------------MPYSP

.M2

B14,B15,B5

;Multiplica W-1*c1 -> S2

*CICLO #6 --------------------------------------------------------------------|| ||

LDDW LDDW MPYSP

.D1 .D2 .M1

*--A4[4],A15:A14 *--B4[4],B15:B14 A14,A15,A12

;Lee de memoria W-2 y c0 ;Lee de memoria W-1 y c1 ;Multiplica W-2*c0 -> S1

*CICLO #7 --------------------------------------------------------------------LDW

.D1

*--A8[8],A10

;Lee de memoria b1

*CICLO #8 --------------------------------------------------------------------MPYSP

.M2

B14,B15,B5

;Multiplica W-1*c1 -> S2

*CICLO #9 --------------------------------------------------------------------|| ||

LDDW LDDW MPYSP

.D1 .D2 .M1

*--A4[4],A15:A14 *--B4[4],B15:B14 A14,A15,A12

;Lee de memoria W-2 y c0 ;Lee de memoria W-1 y c1 ;Multiplica W-2*c0 -> S1

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

108

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida *CICLO #10 -------------------------------------------------------------------LDW

.D1

*--A8[8],A10

;Lee de memoria b1

*CICLO #11 -------------------------------------------------------------------MPYSP MPYSP ADDSP

|| ||

.M1 .M2 .L1X

A11,A10,A13 B14,B15,B5 A12,B5,A5

;Multiplica Fe2*b1 -> S3 ;Multiplica W-1*c1 -> S2 ;Suma S1+S2 -> S12

*CICLO #12 -------------------------------------------------------------------LDDW LDDW MPYSP

|| ||

.D1 .D2 .M1

*--A4[4],A15:A14 *--B4[4],B15:B14 A14,A15,A12

;Lee de memoria W-2 y c0 ;Lee de memoria W-1 y c1 ;Multiplica W-2*c0 -> S1

*CICLO #13 -------------------------------------------------------------------LDW

.D1

*--A8[8],A10

;Lee de memoria b1

*CICLO #14 -------------------------------------------------------------------LDDW MPYSP MPYSP ADDSP

|| || ||

.D2 .M1 .M2 .L1X

*--B8[4],B11:B10 A11,A10,A13 B14,B15,B5 A12,B5,A5

;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-1*c1 -> S2 ;Suma S1+S2 -> S12

*CICLO #15 -------------------------------------------------------------------LDDW LDDW MPYSP ADDSP

|| || ||

.D1 .D2 .M1 .L1

*--A4[4],A15:A14 *--B4[4],B15:B14 A14,A15,A12 A13,A5,A9

;Lee de memoria W-2 y c0 ;Lee de memoria W-1 y c1 ;Multiplica W-2*c0 -> S1 ;Suma S3+S12 -> W

*CICLO #16 -------------------------------------------------------------------LDW

.D1

*--A8[8],A10

;Lee de memoria b1

*CICLO #17 -------------------------------------------------------------------LDDW MPYSP MPYSP ADDSP

|| || ||

.D2 .M1 .M2 .L1X

*--B8[4],B11:B10 A11,A10,A13 B14,B15,B5 A12,B5,A5

;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-1*c1 -> S2 ;Suma S1+S2 -> S12

*CICLO #18 -------------------------------------------------------------------LDDW LDDW MPYSP ADDSP

|| || ||

.D1 .D2 .M1 .L1

*--A4[4],A15:A14 *--B4[4],B15:B14 A14,A15,A12 A13,A5,A9

;Lee de memoria W-2 y c0 ;Lee de memoria W-1 y c1 ;Multiplica W-2*c0 -> S1 ;Suma S3+S12 -> W

*CICLO #19 -------------------------------------------------------------------LDW MPYSP MPYSP

|| ||

.D1 .M1X .M2X

*--A8[8],A10 A9,B10,A2 A9,B11,B9

;Lee de memoria b1 ;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK

*CICLO #20 -------------------------------------------------------------------STW LDDW MPYSP MPYSP ADDSP

|| || || ||

.D1 .D2 .M1 .M2 .L1X

A9,*--A0[8] *--B8[4],B11:B10 A11,A10,A13 B14,B15,B5 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-1*c1 -> S2 ;Suma S1+S2 -> S12

*CICLO #21 -------------------------------------------------------------------LDDW LDDW MPYSP ADDSP

|| || ||

.D1 .D2 .M1 .L1

*--A4[4],A15:A14 *--B4[4],B15:B14 A14,A15,A12 A13,A5,A9

;Lee de memoria W-2 y c0 ;Lee de memoria W-1 y c1 ;Multiplica W-2*c0 -> S1 ;Suma S3+S12 -> W

*CICLO #22 -------------------------------------------------------------------|| || || [A1] B

LDW MPYSP MPYSP

.D1 .M1X .M2X .S1

*--A8[8],A10 A9,B10,A2 A9,B11,B9 BUCLE_PAR

;Lee de memoria b1 ;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Salto a BUCLE_IMPAR (si cont2 > 0)

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

109

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida *CICLO #23 -------------------------------------------------------------------STW LDDW MPYSP MPYSP ADDSP

|| || || ||

.D1 .D2 .M1 .M2 .L1X

A9,*--A0[8] *--B8[4],B11:B10 A11,A10,A13 B14,B15,B5 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-1*c1 -> S2 ;Suma S1+S2 -> S12

*CICLO #24 -------------------------------------------------------------------LDDW LDDW MPYSP ADDSP

|| || ||

.D1 .D2 .M1 .L1

*--A4[4],A15:A14 *--B4[4],B15:B14 A14,A15,A12 A13,A5,A9

;Lee de memoria W-2 y c0 ;Lee de memoria W-1 y c1 ;Multiplica W-2*c0 -> S1 ;Suma S3+S12 -> W

*-----------------------------------------------------------------------------* Comienzo del bucle principal *-----------------------------------------------------------------------------BUCLE_PAR: *CICLO #25 -------------------------------------------------------------------|| || || || || [A1] B

LDW MPYSP MPYSP ADDSP ADDSP

.D1 .M1X .M2X .L1 .L2 .S1

*--A8[8],A10 A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7 BUCLE_PAR

;Lee de memoria b1 ;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR ;Salto a BUCLE_IMPAR (si cont2 > 0)

*CICLO #26 -------------------------------------------------------------------STW LDDW MPYSP MPYSP ADDSP

|| || || ||

.D1 .D2 .M1 .M2 .L1X

A9,*--A0[8] *--B8[4],B11:B10 A11,A10,A13 B14,B15,B5 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-1*c1 -> S2 ;Suma S1+S2 -> S12

*CICLO #27 -------------------------------------------------------------------|| || || || [A1] SUB

LDDW LDDW MPYSP ADDSP

.D1 .D2 .M1 .L1 .S1

*--A4[4],A15:A14 *--B4[4],B15:B14 A14,A15,A12 A13,A5,A9 A1,1,A1

;Lee de memoria W-2 y ;Lee de memoria W-1 y ;Multiplica W-2*c0 -> ;Suma S3+S12 -> W ;Decrementa cont2 (si

c0 c1 S1 cont2 > 0)

*-----------------------------------------------------------------------------* Final del bucle principal *-----------------------------------------------------------------------------*CICLO #28 -------------------------------------------------------------------|| || || ||

LDW MPYSP MPYSP ADDSP ADDSP

.D1 .M1X .M2X .L1 .L2

*--A8[8],A10 A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7

;Lee de memoria b1 ;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*CICLO #29 -------------------------------------------------------------------|| || || ||

STW LDDW MPYSP MPYSP ADDSP

.D1 .D2 .M1 .M2 .L1X

A9,*--A0[8] *--B8[4],B11:B10 A11,A10,A13 B14,B15,B5 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-1*c1 -> S2 ;Suma S1+S2 -> S12

*CICLO #30 -------------------------------------------------------------------||

MPYSP ADDSP

.M1 .L1

A14,A15,A12 A13,A5,A9

;Multiplica W-2*c0 -> S1 ;Suma S3+S12 -> W

*CICLO #31 -------------------------------------------------------------------|| || || ||

LDW MPYSP MPYSP ADDSP ADDSP

.D1 .M1X .M2X .L1 .L2

*--A8[8],A10 A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7

;Lee de memoria b1 ;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*CICLO #32 --------------------------------------------------------------------

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

110

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

|| || || ||

STW LDDW MPYSP MPYSP ADDSP

.D1 .D2 .M1 .M2 .L1X

A9,*--A0[8] *--B8[4],B11:B10 A11,A10,A13 B14,B15,B5 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Multiplica W-1*c1 -> S2 ;Suma S1+S2 -> S12

*CICLO #33 -------------------------------------------------------------------||

MPYSP ADDSP

.M1 .L1

A14,A15,A12 A13,A5,A9

;Multiplica W-2*c0 -> S1 ;Suma S3+S12 -> W

*CICLO #34 --------------------------------------------------------------------

|| || ||

MPYSP MPYSP ADDSP ADDSP

.M1X .M2X .L1 .L2

A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7

;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*CICLO #35 -------------------------------------------------------------------|| || ||

STW LDDW MPYSP ADDSP

.D1 .D2 .M1 .L1X

A9,*--A0[8] *--B8[4],B11:B10 A11,A10,A13 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Suma S1+S2 -> S12

*CICLO #36 -------------------------------------------------------------------ADDSP

.L1

A13,A5,A9

;Suma S3+S12 -> W

*CICLO #37 -------------------------------------------------------------------|| || ||

MPYSP MPYSP ADDSP ADDSP

.M1X .M2X .L1 .L2

A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7

;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*CICLO #38 -------------------------------------------------------------------|| || ||

STW LDDW MPYSP ADDSP

.D1 .D2 .M1 .L1X

A9,*--A0[8] *--B8[4],B11:B10 A11,A10,A13 A12,B5,A5

;Escribe en memoria W ;Lee de memoria aL y aR ;Multiplica Fe2*b1 -> S3 ;Suma S1+S2 -> S12

*CICLO #39 -------------------------------------------------------------------ADDSP

.L1

A13,A5,A9

;Suma S3+S12 -> W

*CICLO #40 -------------------------------------------------------------------|| || ||

MPYSP MPYSP ADDSP ADDSP

.M1X .M2X .L1 .L2

A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7

;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*CICLO #41 -------------------------------------------------------------------||

STW LDDW

.D1 .D2

A9,*--A0[8] *--B8[4],B11:B10

;Escribe en memoria W ;Lee de memoria aL y aR

*CICLO #42 -------------------------------------------------------------------ADDSP

.L1

A13,A5,A9

;Suma S3+S12 -> W

*CICLO #43 -------------------------------------------------------------------|| || ||

MPYSP MPYSP ADDSP ADDSP

.M1X .M2X .L1 .L2

A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7

;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*CICLO #44 -------------------------------------------------------------------STW

.D1

A9,*--A0[8]

;Escribe en memoria W

*====== MARTILLO ============================================================== ||

MV

.L1

B6,A5

;Copio la dirección de p_H para ;accesos al buffer desde el lado A

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

111

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida || || ||

MVKL MVKL LDDW

.S1 .S2 .D2

TS,A10 FS,B2 *++B6,B11:B10

;A5-> Lado A, B6-> Lado B ;Cargo 1º parte de la direcc. de TS ;Cargo 1º parte de la direcc. de FS ;Cargo Yh:aux en B11:B10

*CICLO #45 -------------------------------------------------------------------*====== MARTILLO ============================================================== || || ||

MVKH MVKH LDDW LDDW

.S1 .S2 .D1 .D2

TS,A10 FS,B2 *A5++[2],A13:A12 *++B6[2],B15:B14

;Cargo ;Cargo ;Cargo ;Cargo

2º parte de la direcc. de TS 2º parte de la direcc. de FS Vh:(Ah*TS) en A13:A12 (-Kh):MUh en B15:B14

*CICLO #46 -------------------------------------------------------------------|| || ||

MPYSP MPYSP ADDSP ADDSP

.M1X .M2X .L1 .L2

A9,B10,A2 A9,B11,B9 A7,A2,A7 B7,B9,B7

;Multiplica W*aL -> YLK ;Multiplica W*aR -> YRK ;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*====== MARTILLO ============================================================== || || ||

LDW LDW MVKL

.D1 .D2 .S2

*A10,A9 *B2,B3 CONST_1,B0

;Cargo TS en A9 ;Cargo FS en B3 ;Cargo 1º parte direcc. de CONST_1

*CICLO #47 -------------------------------------------------------------------STW

.D1

A9,*--A0[8]

;Escribe en memoria W

*====== MARTILLO ============================================================== || ||

MVKH LDW

.S2 .D2

CONST_1,B0 *B0,B12

;Cargo 2º parte direcc. de CONST_1 ;Cargo CONST_1 (=1.0) en B12

*CICLO #48 -------------------------------------------------------------------*====== MARTILLO ============================================================== ||

LDDW LDW

.D1 .D2

*A5++[2],A15:A14 *+B6[5],B11

;Cargo A:B en A15:A14 ;Cargo Yc(k-1) en B11

*CICLO #49 -------------------------------------------------------------------||

ADDSP ADDSP

.L1 .L2

A7,A2,A7 B7,B9,B7

;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*====== MARTILLO ============================================================== ||

LDW

.D1

*A5,A10

;Cargo (-TS/Mh) en A10

*CICLO #50 -------------------------------------------------------------------*====== MARTILLO ============================================================== ADDSP

.L1

A13,A12,A13

;Sumo (Ah*TS)+Vh -> A13

*CICLO #51 -------------------------------------------------------------------NOP *CICLO #52 -------------------------------------------------------------------||

ADDSP ADDSP

.L1 .L2

A7,A2,A7 B7,B9,B7

;Acumula YL+YLK -> YL ;Acumula YR+YRK -> YR

*-----------------------------------------------------------------------------* Sección Martillo *-----------------------------------------------------------------------------*CICLO #53 -------------------------------------------------------------------||

MV MV

.S1 .S2

A7,A5 B7,B5

;Salva la semisuma par de YL ;Salva la semisuma par de YR

*CICLO #54 --------------------------------------------------------------------

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

112

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida ||

MPYSP STW

.M1 .D2

A13,A9,A2 A13,*--B6[6]

;Multiplica Vh*TS -> A2 ;Guarda en memoria Vh (Retorna el ;p_H a la posición inicial

*CICLO #55 -------------------------------------------------------------------NOP *CICLO #55_1 -----------------------------------------------------------------||

ADDSP ADDSP

.L1 .L2

A5,A7,A7 B5,B7,B7

;Calcula la suma total de YL ;Calcula la suma total de YR

*CICLO #55_2 -----------------------------------------------------------------NOP *CICLO #55_3 -----------------------------------------------------------------NOP *CICLO #55_4 -----------------------------------------------------------------NOP *CICLO #56 -------------------------------------------------------------------||

ADDSP LDW

.L2X .D2

A7,B7,B0 *+B6[10], B0

;Suma YL+YR->YT ( =Yc(k) ) ;Carga Yc(k-2) en B0

*CICLO #57 --------------------------------------------------------------------

||

MPYSP

.M1X

A7,B13,A7

MPYSP

.M2

B7,B13,B7

;Aplica coef. de normaliz ;YL*Coef_N ->YL ;Aplica coef. de normaliz ;YR*Coef_N ->YR

*CICLO #58 -------------------------------------------------------------------ADDSP

.L2X

B10,A2,B10

;Suma Yh+(Vh*TS)->Yh

*CICLO #59 -------------------------------------------------------------------NOP *CICLO #60 -------------------------------------------------------------------STW

.D2

B0,*+B6[10]

;Guarda en memoria Yc(k-1) ;(Yc(k-1) en el paso siguiente es ;Yc(k) = YT del paso actual)

*CICLO #60_1 -----------------------------------------------------------------SUBSP

.L2

B11,B0,B11

;Resta Yc(k-1)-Yc(k-2)->B11

*CICLO #61 -------------------------------------------------------------------STW

.D1

A7,*A6++

;Guarda en memoria YL

*CICLO #62 -------------------------------------------------------------------||

SUBSP STW

.L2 .D2

B11,B10,B2 B10,*+B6[2]

;Resta Yc(k-1)-Yh(k)->B2 ;Guarda en memoria Yh

*CICLO #63 -------------------------------------------------------------------NOP *CICLO #64 --------------------------------------------------------------------

||

MPYSP

.M2

B11,B3,B11

STW

.D1

B7,*A6++

;Multiplica ( Yc(k-1)-Yc(k-2) ) * FS ;->B11 ;Guarda en memoria YR

*CICLO #65 -------------------------------------------------------------------NOP *CICLO #66 --------------------------------------------------------------------

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

113

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida MPYSP

.M2

B2,B2,B9

;Multiplica Dy * Dy->B9

*CICLO #67 -------------------------------------------------------------------NOP *CICLO #68 -------------------------------------------------------------------SUBSP

.L2X

B11,A13,B11

;Resta (Yc(k)-Yc(k-1))*FS - Vh->B11

*CICLO #69 -------------------------------------------------------------------NOP *CICLO #70 -------------------------------------------------------------------MPYSP MPYSP

||

.M2 .M1X

B9,B14,B14 B9,A15,A15

;Multiplica Dy² * (-Kh)->B14 ;Multiplica Dy² * B->A15

*CICLO #71 -------------------------------------------------------------------MVKL

.S1

CONST_0,A7

;Carga 1º parte direcc. CONST_0

*CICLO #72 -------------------------------------------------------------------MPYSP MVKH

||

.M2 .S1

B11,B15,B15 CONST_0,A7

;Multiplica Dv * MUh->B15 ;Carga 2º parte direcc. CONST_0

*CICLO #73 -------------------------------------------------------------------LDW

.D1

*A7,A7

;Carga CONST_0 en A7

*CICLO #74 -------------------------------------------------------------------ADDSP

.L1

A15,A14,A14

;Suma Dy²*B + A->A14

*CICLO #75 -------------------------------------------------------------------NOP *CICLO #76 -------------------------------------------------------------------ADDSP

.L2

B15,B12,B15

;Suma Dv*MUh + 1.0->B15

*CICLO #77 -------------------------------------------------------------------NOP *CICLO #78 -------------------------------------------------------------------MPYSP

.M1X

A14,B14,A14

;Multiplica (Dy²*B+A) * (-Kh*Dy²) ;->A14

*CICLO #79 -------------------------------------------------------------------CMPLTSP

.S2X

B2,A7,B2

;

*CICLO #80 -------------------------------------------------------------------NOP *CICLO #81 -------------------------------------------------------------------NOP *CICLO #82 -------------------------------------------------------------------[!B2]

MPYSP

.M1X

A14,B15,A11

;Si Dy >= 0: ;Multiplica (Dy²*B+A)*(-Kh*Dy²) * ;(1+Dv*MUh)->Fe2

*CICLO #83 -------------------------------------------------------------------[B2]

MV

.S1

A7,A11

;Si Dy < 0: setea Fe2 = 0.0

*CICLO #84 -------------------------------------------------------------------NOP

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

114

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida *CICLO #85 -------------------------------------------------------------------[B1]

B

.S2

BUCLE_PRINCIPAL

;Salta a BUCLE_PRINCIPAL si cont1>0

*CICLO #86 -------------------------------------------------------------------||

MPYSP STW

.M1 .D2

A11,A10,A10 A11,*+B6[9]

;Multiplico Fe2*(-TS/Mh)->A10 ;Guarda en memoria Fe2

*CICLO #87 -------------------------------------------------------------------NOP *CICLO #88 -------------------------------------------------------------------NOP *CICLO #89 -------------------------------------------------------------------NOP *CICLO #90 -------------------------------------------------------------------STW

.D2

A10,*+B6[1]

;Guardo en memoria Ah

MV

.S2

A3,B15

;Restablece el SP (stack pointer)

*++B15,A0 *++B15,B0 *++B15,A1 *++B15,B1 *++B15,A2 *++B15,B2 *++B15,A3 *++B15,B3 *++B15,A4 *++B15,B4 *++B15,A5 *++B15,B5 *++B15,A6 *++B15,B6 *++B15,A7 *++B15,B7 *++B15,A8 *++B15,B8 *++B15,A9 *++B15,B9 *++B15,A10 *++B15,B10 *++B15,A11 *++B15,B11 *++B15,A12 *++B15,B12 *++B15,A13 *++B15,B13 *++B15,A14 *++B15,B14 *++B15,A15

; ; ; ; ; ; ; ;Lee del stack los registros que fueron ;salvados (POP) ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW

.D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2

B NOP

.S2 5

B3

.end

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

115

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

C.2. CONV_TABLA_ARM.ASM *-----------------------------------------------------------------------------* Funciones llamadas desde código C *-----------------------------------------------------------------------------.def _conv_tabla_arm *-----------------------------------------------------------------------------* ======= Función _conv_tabla_arm ======= *-----------------------------------------------------------------------------* Valor devuelto -> (float) * Parámetros: * (Ptr): dirección del buffer p_Buff_YL/R_T[Offset_YL/R] * (Ptr): dirección del buffer p_TablaArm * ----------------------------------------------------------------------------_NUM_FRAMES _NUM_CICLOS

.set 512 .set _NUM_FRAMES/2 - 15

_conv_tabla_arm:

||

STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW STW

.D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2

A15,*B15-B14,*B15-A14,*B15-B13,*B15-A13,*B15-B12,*B15-A12,*B15-B11,*B15-A11,*B15-B10,*B15-A10,*B15-B9,*B15-A9,*B15-B8,*B15-A8,*B15-B7,*B15-A7,*B15-B6,*B15-A6,*B15-B5,*B15-A5,*B15-B4,*B15--

STW STW STW STW STW STW STW STW

.D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2

B3,*B15-A3,*B15-B2,*B15-A2,*B15-B1,*B15-A1,*B15-B0,*B15-A0,*B15--

; ; ; ; ; ;Guarda en el stack los registros que ;se van a usar (PUSH) ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

MV MVK

.L1 .S1

B15,A3 ;Salva el SP (stack pointer) _NUM_CICLOS,A1 ;Inicializa cont1

MVKL MVKLH MVC

.S2 .S2 .S2

0x0001,B0 0x000B,B0 B0,AMR

; ; ; ; ; ;

Parte baja de AMR Parte alta de AMR Inicializa el registro de modo de direccionamiento (AMR) para funcionar en modo circular: Base: A4, Tamaño: 4096 bytes

*============================================================================== *-----------------------------------------------------------------------------* Comienzo de la convolución *-----------------------------------------------------------------------------*============================================================================== *CICLO #0 --------------------------------------------------------------------|| || ||

LDDW LDDW ZERO ZERO

.D1 .D2 .L1 .L2

*A4++,A15:A14 *B4++,B15:B14 A9 B9

;Lee de memoria YL/R(k):YL/R(k+1) ;Lee de memoria h(k):h(k+1) ;Resetea S1 ;Resetea S2

*CICLO #1 ---------------------------------------------------------------------

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

116

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida LDDW LDDW

||

.D1 .D2

*A4++,A15:A14 *B4++,B15:B14

;Lee de memoria YL/R(k):YL/R(k+1) ;Lee de memoria h(k):h(k+1)

*CICLO #2 --------------------------------------------------------------------LDDW LDDW

||

.D1 .D2

*A4++,A15:A14 *B4++,B15:B14

;Lee de memoria YL/R(k):YL/R(k+1) ;Lee de memoria h(k):h(k+1)

*CICLO #3 --------------------------------------------------------------------LDDW LDDW

||

.D1 .D2

*A4++,A15:A14 *B4++,B15:B14

;Lee de memoria YL/R(k):YL/R(k+1) ;Lee de memoria h(k):h(k+1)

*CICLO #4 --------------------------------------------------------------------|| || [A1]

LDDW LDDW B

.D1 .D2 .S2

*A4++,A15:A14 *B4++,B15:B14 BUCLE

;Lee de memoria YL/R(k):YL/R(k+1) ;Lee de memoria h(k):h(k+1) ;Salto a BUCLE (si cont1 > 0)

*CICLO #5 --------------------------------------------------------------------|| || || || [A1]

LDDW LDDW MPYSP MPYSP B

.D1 .D2 .M1X .M2X .S2

*A4++,A15:A14 *B4++,B15:B14 A14,B14,A7 A15,B15,B7 BUCLE

;Lee de memoria YL/R(k):YL/R(k+1) ;Lee de memoria h(k):h(k+1) ;Multiplica YL/R(k) por h(k) ;Multiplica YL/R(k+1) por h(k+1) ;Salto a BUCLE (si cont1 > 0)

*CICLO #6 --------------------------------------------------------------------|| || || || [A1]

LDDW LDDW MPYSP MPYSP B

.D1 .D2 .M1X .M2X .S2

*A4++,A15:A14 *B4++,B15:B14 A14,B14,A7 A15,B15,B7 BUCLE

;Lee de memoria YL/R(k):YL/R(k+1) ;Lee de memoria h(k):h(k+1) ;Multiplica YL/R(k) por h(k) ;Multiplica YL/R(k+1) por h(k+1) ;Salto a BUCLE (si cont1 > 0)

*CICLO #7 --------------------------------------------------------------------|| || || || [A1]

LDDW LDDW MPYSP MPYSP B

.D1 .D2 .M1X .M2X .S2

*A4++,A15:A14 *B4++,B15:B14 A14,B14,A7 A15,B15,B7 BUCLE

;Lee de memoria YL/R(k):YL/R(k+1) ;Lee de memoria h(k):h(k+1) ;Multiplica YL/R(k) por h(k) ;Multiplica YL/R(k+1) por h(k+1) ;Salto a BUCLE (si cont1 > 0)

*CICLO #8 --------------------------------------------------------------------|| || || || [A1]

LDDW LDDW MPYSP MPYSP B

.D1 .D2 .M1X .M2X .S2

*A4++,A15:A14 *B4++,B15:B14 A14,B14,A7 A15,B15,B7 BUCLE

;Lee de memoria YL/R(k):YL/R(k+1) ;Lee de memoria h(k):h(k+1) ;Multiplica YL/R(k) por h(k) ;Multiplica YL/R(k+1) por h(k+1) ;Salto a BUCLE (si cont1 > 0)

*-----------------------------------------------------------------------------* Comienzo del bucle principal *-----------------------------------------------------------------------------BUCLE: *CICLO #9 --------------------------------------------------------------------|| || || || || || [A1] || [A1]

LDDW LDDW MPYSP MPYSP ADDSP ADDSP SUB B

.D1 .D2 .M1X .M2X .L1 .L2 .S1 .S2

*A4++,A15:A14 *B4++,B15:B14 A14,B14,A7 A15,B15,B7 A9,A7,A9 B9,B7,B9 A1,1,A1 BUCLE

;Lee de memoria YL/R(k):YL/R(k+1) ;Lee de memoria h(k):h(k+1) ;Multiplica YL/R(k) por h(k) ;Multiplica YL/R(k+1) por h(k+1) ;Acumula S1 + S1k -> S1 ;Acumula S1 + S1k -> S1 ;Decrementa A1 (si cont1 > 0) ;Salto a BUCLE (si cont1 > 0)

*-----------------------------------------------------------------------------* Final del bucle principal *-----------------------------------------------------------------------------*CICLO #10 -------------------------------------------------------------------|| || ||

MPYSP MPYSP ADDSP ADDSP

.M1X .M2X .L1 .L2

A14,B14,A7 A15,B15,B7 A9,A7,A9 B9,B7,B9

;Multiplica ;Multiplica ;Acumula S1 ;Acumula S1

YL/R(k) por h(k) YL/R(k+1) por h(k+1) + S1k -> S1 + S1k -> S1

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

117

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida *CICLO #11 -------------------------------------------------------------------|| || ||

MPYSP MPYSP ADDSP ADDSP

.M1X .M2X .L1 .L2

A14,B14,A7 A15,B15,B7 A9,A7,A9 B9,B7,B9

;Multiplica ;Multiplica ;Acumula S1 ;Acumula S1

YL/R(k) por h(k) YL/R(k+1) por h(k+1) + S1k -> S1 + S1k -> S1

*CICLO #12 -------------------------------------------------------------------|| || ||

MPYSP MPYSP ADDSP ADDSP

.M1X .M2X .L1 .L2

A14,B14,A7 A15,B15,B7 A9,A7,A9 B9,B7,B9

;Multiplica ;Multiplica ;Acumula S1 ;Acumula S1

YL/R(k) por h(k) YL/R(k+1) por h(k+1) + S1k -> S1 + S1k -> S1

*CICLO #13 -------------------------------------------------------------------|| || ||

MPYSP MPYSP ADDSP ADDSP

.M1X .M2X .L1 .L2

A14,B14,A7 A15,B15,B7 A9,A7,A9 B9,B7,B9

;Multiplica ;Multiplica ;Acumula S1 ;Acumula S1

YL/R(k) por h(k) YL/R(k+1) por h(k+1) + S1k -> S1 + S1k -> S1

*CICLO #14 -------------------------------------------------------------------|| || ||

MPYSP MPYSP ADDSP ADDSP

.M1X .M2X .L1 .L2

A14,B14,A7 A15,B15,B7 A9,A7,A9 B9,B7,B9

;Multiplica ;Multiplica ;Acumula S1 ;Acumula S1

YL/R(k) por h(k) YL/R(k+1) por h(k+1) + S1k -> S1 + S1k -> S1

*CICLO #15 -------------------------------------------------------------------||

ADDSP ADDSP

.L1 .L2

A9,A7,A9 B9,B7,B9

;Acumula S1 + S1k -> S1 ;Acumula S1 + S1k -> S1

*CICLO #16 -------------------------------------------------------------------||

ADDSP ADDSP

.L1 .L2

A9,A7,A9 B9,B7,B9

;Acumula S1 + S1k -> S1 ;Acumula S1 + S1k -> S1

*CICLO #17 -------------------------------------------------------------------||

ADDSP ADDSP

.L1 .L2

A9,A7,A9 B9,B7,B9

;Acumula S1 + S1k -> S1 ;Acumula S1 + S1k -> S1

*CICLO #18 -------------------------------------------------------------------||

ADDSP ADDSP

.L1 .L2

A9,A7,A9 B9,B7,B9

;Acumula S1 + S1k -> S1 ;Acumula S1 + S1k -> S1

*CICLO #19 -------------------------------------------------------------------||

MV MV

.S1 .S2

A9,A10 B9,B10

;Guarda 1º parte de la suma 1 en A10 ;Guarda 1º parte de la suma 2 en B10

*CICLO #20 -------------------------------------------------------------------||

ADDSP ADDSP

.L1 .L2

A10,A9,A10 B10,B9,B10

;Suma partes 1 y 2 de S1 en A10 ;Suma partes 1 y 2 de S2 en B10

*CICLO #21 -------------------------------------------------------------------||

MV MV

.S1 .S2

A9,A12 B9,B12

;Guarda 3º parte de la suma 1 en A12 ;Guarda 3º parte de la suma 2 en B12

*CICLO #22 -------------------------------------------------------------------||

ADDSP ADDSP

.L1 .L2

A9,A12,A9 B9,B12,B9

;Suma partes 3 y 4 de S1 en A9 ;Suma partes 3 y 4 de S2 en B9

*CICLO #23 -------------------------------------------------------------------NOP *CICLO #24 -------------------------------------------------------------------NOP *CICLO #25 -------------------------------------------------------------------NOP

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

118

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida *CICLO #26 -------------------------------------------------------------------||

ADDSP ADDSP

.L1 .L2

A9,A10,A9 B9,B10,B9

;Suma partes 1-2 y 3-4 de S1 en A9 ;Suma partes 1-2 y 3-4 de S2 en B9

*CICLO #27 -------------------------------------------------------------------NOP *CICLO #28 -------------------------------------------------------------------NOP *CICLO #29 -------------------------------------------------------------------NOP *CICLO #30 -------------------------------------------------------------------|| ||

ADDSP ZERO MVC

.L1 .L2 .S2

A9,B9,A4 B0 B0,AMR

;Suma S1 y S2 en A4 (valor devuelto) ;0 -> B0 ;Reseteo AMR

MV

.S2

A3,B15

;Restablece el SP (stack pointer) ; ; ; ; ; ; ; ;Lee del stack los registros que fueron ;salvados (POP) ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

LDW LDW LDW LDW LDW LDW LDW LDW

.D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2

*++B15,A0 *++B15,B0 *++B15,A1 *++B15,B1 *++B15,A2 *++B15,B2 *++B15,A3 *++B15,B3

LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW LDW

.D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2 .D2

*++B15,B4 *++B15,A5 *++B15,B5 *++B15,A6 *++B15,B6 *++B15,A7 *++B15,B7 *++B15,A8 *++B15,B8 *++B15,A9 *++B15,B9 *++B15,A10 *++B15,B10 *++B15,A11 *++B15,B11 *++B15,A12 *++B15,B12 *++B15,A13 *++B15,B13 *++B15,A14 *++B15,B14 *++B15,A15

B NOP

.S2 5

B3

.end

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

119

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

Anexo D – Terminología Musical Aquí se introduce brevemente algunos conceptos y términos fundamentales de la teoría musical. Este pequeño apéndice intenta facilitar al lector la asimilación de algunos de los conceptos expuestos en el presente trabajo. D.1. Sonido y nota musical El oído distingue nítidamente entre ondas periódicas (o cuasi periódicas) y ondas aperiódicas. Las primeras son percibidas como notas musicales, y las segundas como ruido (el cual también puede ser musical). Un tono puro (o simple) es un sonido continuo de una sola frecuencia, tal como el producido por un diapasón que vibra en su frecuencia fundamental [49]. La mayoría de las fuentes sonoras, incluyendo los instrumentos musicales, producen sonidos espectralmente complejos, en los que interviene un conjunto de componentes frecuenciales, en general, variable en el tiempo. Cuando un sonido es estrictamente periódico, sus componentes espectrales se denominan armónicos, correspondiendo a frecuencias cuyos valores son múltiplos enteros de la frecuencia más baja, o fundamental. En el caso de sonidos cuasi periódicos, o aperiódicos, los componentes espectrales se designan en forma más general como parciales. Hay tres sensaciones primarias asociadas con un cierto sonido musical: la altura, la sonoridad (o intensidad) y el timbre. El timbre es lo que nos permite distinguir los sonidos emitidos por diferentes instrumentos, aún cuando la altura y sonoridad sean las mismas. La asignación sin ambigüedad de estas tres cualidades a un sonido dado es lo que diferencia un tono musical de un ruido. A pesar de que podemos asignarle sonoridad a un ruido, es muy difícil o imposible asignarle una única altura o timbre. Las tres sensaciones descritas son subjetivas, sin embargo cada una de ellas puede ser, en principio, asociada a magnitudes físicas bien definidas de la onda sonora correspondiente. La altura está primariamente asociada a la frecuencia fundamental del tono musical, la sonoridad a la intensidad de la onda y el timbre con su espectro. Así una nota puede definirse según la convención musical (a cada nota se le hace corresponder una altura) o mediante la expresión de su frecuencia, por ejemplo La4 o A4 (según el sistema de notación inglés) es igual a 440 Hz. D.2. Escala musical Se llama escala musical a la sucesión de sonidos constitutivos de un sistema (tonalidad) que se suceden regularmente en sentido ascendente o descendente, y todos ellos en relación con una nota que da nombre a la escala, o tónica. Actualmente la llamada escala musical diatónica (sin alteraciones ni accidentes tonales) está compuesta por siete notas. En el caso de la escala mayor de Do, las notas son las siguientes: Do C

Re D

Mi E

Fa F

Sol G

La A

Si B

(sistema de notación musical latina) (sistema de notación musical inglesa)

La distancia entre notas, en un sentido físico, se define como el cociente de sus frecuencias fundamentales. Las notas o grados de una escala no guardan igual espacio entre sí. La distancia mayor entre una nota y otra se llama tono, la distancia menor se llama

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

120

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

semitono. Las frecuencias correspondientes a dos notas separadas por un semitono guardan la relación f2 / f1 = 21/12, y en el caso de un tono es f2 / f1 = 22/12. D.3. Notas del piano La estructura del teclado del piano es periódica, es decir, se repite un patrón a lo largo del mismo. Este patrón está compuesto de siete teclas blancas y cinco negras, siendo el Do la primera tecla del mismo. La figura D.1 muestra los nombres de las notas correspondientes a tres octavas del teclado del piano. Además de las siete notas ya enumeradas en el punto anterior, aparecen otras cinco. Cuando el símbolo ‘#’ (sostenido) acompaña a una letra, designa a una nota que se encuentra un semitono por encima de la nota correspondiente a la letra.

FIGURA D.1. Notas correspondientes a las teclas del piano. Se muestran sólo tres octavas del registro

Las notas asociadas a las teclas están en orden de altura ascendente, de izquierda a derecha, siendo el intervalo musical entre notas adyacentes (tanto para teclas de igual como de distinto color) de un semitono. Las notas asociadas a las teclas blancas corresponden a la escala mayor de Do (diatónica). Conjuntamente con las notas de las teclas negras, se obtiene la escala cromática, en la cual todas las notas consecutivas distan entre sí un semitono. De esta forma, las frecuencias correspondientes a las notas del piano conforman una serie exponencial creciente, duplicándose su valor cada doce notas consecutivas* (octava).

*

Un intervalo de 12 notas consecutivas en la escala cromática equivale a una separación de 8 notas en la escala diatónica (teclas blancas). Esta es la razón por la cual se denomina a dicho intervalo octava.

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

121

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

Abreviaturas y Acrónimos

API CCS CISC CODEC CPLD DP DSP DSK DSP/BIOS DWG EC EMIF EVM EPROM FLOPS FIFO FTM IIR JTAG L1 L2 McBSP MFLOPS MIDI MIPS OLE ODE PI PDE RISC RTDX SBSRAM SDRAM SLT SRAM TA USB VLIW

Application Program Interface Code Composer Studio Complex Instruction Set Computer Coder – Decoder Complex Programmable Logic Device Distribución de Paneo Digital Signal Processor DSP Starter Kit DSP Basic Input/Output System Digital Waveguide Eventos de Control External Memory Interface Evaluation Module Electronically Programmable Read-Only Memory Floating Point Operations First In – First Out Functional Transformation Method Infinite Impulse Response Joint Test Action Group Memoria interna de nivel 1 Memoria interna de nivel 2 Multichannel Buffered Serial Port Millions of Floating Point Operations per Second Musical Instrument Digital Interface Millions of Fixed Point Operations per Second Object Linking and Embedding Ordinary Differential Equation Parámetros de Instrumento Partial Differential Equation Reduced Instruction Set Computer Real-Time Data Exchange Synchronous Burst Static Random Access Memory Synchronous Dynamic Random Access Memory Sturm-Liouville Transform Static Random Access Memory Parámetros de Tabla Armónica Universal Serial Bus Very Long Instruction Word

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

122

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

Lista de Símbolos Principales

ρc Ec Lc Ac Ic D1c D3c Tsc Xac Xec Mh

αh Kh

μh ΔXeh fe2 N FS TB M, N P PT W WE

C Cc η ξ

Densidad de la cuerda [kg/m3] Módulo de Young de la cuerda [N/m2] Longitud de la cuerda [m] Sección transversal de la cuerda [m2] Momento de inercia de la cuerda [m4] Coeficiente de disipación independiente de la frecuencia [kg/(m × s)] Coeficiente de disipación dependiente de la frecuencia [kg m/s] Tensión de la cuerda [N] Posición del punto de observación [m] Posición del punto de excitación [m] Masa del martillo [kg] Exponente de no linealidad del martillo [adimensional] Constante elástica de compresión del martillo [N/mα] Constante viscoelástica del martillo [s/m] Longitud de contacto entre cuerda y martillo [m] Fuerza de contacto entre cuerda y martillo Número de armónicos por cuerda Frecuencia de muestreo Período de tiempo transcurrido entre bloques completos de muestras simuladas Número de muestras por bloque Polifonía (Número máximo de notas reproducidas simultáneamente) Número total de notas del registro del instrumento Número de unidades funcionales del DSP Promedio temporal del número de unidades funcionales del DSP utilizadas Capacidad de procesamiento del DSP en instrucciones por segundo Capacidad de procesamiento por cuerda en instrucciones por segundo Porcentaje de recursos destinado a la convolución y procesos no críticos Rendimiento en la optimización del código

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

123

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida

Referencias [1]

V. Välimäki , T. Takala, Virtual musical instruments – natural sound using physical models, (1995)

[2]

M. Karjalainen, T. Mäki-Patola, Physics-based modeling of musical instruments for interactive virtual reality, (2004)

[3]

J. O. Smith, A basic introduction to digital waveguide synthesis (for the technically inclined), (2005)

[4]

J. O. Smith, Physical modeling synthesis update, (1996)

[5]

N. Castagne, C. Cadoz, 10 criteria for evaluating physical modelling schemes for music creation, (2003)

[6]

R. Rabenstein, L. Trautmann, Digital sound synthesis of string instruments with the functional transformation method (2002)

[7]

R. Rabenstein, L. Trautmann, Stable systems for nonlinear discrete sound synthesis with the functional transformation method, (2002)

[8]

S. Petrausch, R. Rabenstein, Sound synthesis by physical modeling using the functional transformation method: efficient implementations with polyphase-filterbanks, (2003)

[9]

Applied Acoustic Systems, Tech talk: Physical modeling, (2006)

[10]

T. Akylas, C. Mei, Wave propagation, (2004)

[11]

V. Välimäki, T. Tolonen, M. Karjalainen, Signal-dependent nonlinearities for physical models using time-varying fractional delay filters, (1998)

[12]

J. J. Burred Sendino, La acústica del piano, (1999)

[13]

B. Bank, L. Sujbert, A piano model including longitudinal string vibrations, (2004)

[14]

D. Howard, S. Rimell, CYMATIC: A tactile controlled physical modelling instrument, (2003)

[15]

V. Välimäki, T. Tolonen, M. Karjalainen, Plucked-string synthesis algorithms with tension modulation nonlinearity, (1999)

[16]

B. Bank, Physics-Based Sound Synthesis of the Piano, (2000)

[17]

M. Hirschkorn, S. Birkett, J. McPhee, Kinematic Model of a piano action mechanism, (2002)

[18]

M. Hirschkorn, Dynamic model of a piano action mechanism, (2004)

[19]

F. Avanzini, D. Rocchesso, Modeling collision sounds: non-linear contact force, (2001)

[20]

A. Stulov, A simple grand piano hammer felt model, (1995)

[21]

A. Stulov, Two nonlinear hysteretic models of piano hammer, (2001)

[22]

F. Avanzini, B. Bank, G. Borin, G. De Poli, F. Fontana, D. Rocchesso, Musical instrument modeling: the case of the piano, (2001)

[23]

B. Bank, G. De Poli, L. Subjert, A multi-rate approach to instrument body modeling for real-time syntesis applications, (2002)

[24]

H. Lehtonen, Analysis and parametric synthesis of the piano sound, (2005)

[25]

Applied Acoustics Systems, String Studio VS-1 - String Modeling Synthesizer, (2006)

[26]

C. Bruyns, Sound synthesis and instrument design for computer music, (2005)

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

124

Síntesis digital de sonido en tiempo real por modelado físico de instrumentos virtuales de cuerda percutida [27]

Microsoft MSDN Library, Musical Instrument Digital Interface (MIDI), (2005)

[28]

G. Frantz, R. Simar, Comparing fixed- and floating-point DSPs, (2004)

[29]

FutureTech Research, MIPS/MFLOPS and CPU performance, (2006)

[30]

Texas Instruments Inc., TMS320C6713, TMS320C6713B floating-point digital signal processors, (2005)

[31]

Spectrum Digital Inc., TMS320C6713 DSK technical reference, (2003)

[32]

R. Chassaing, Digital signal processing and applications with the C6713 and C6416 DSK, Wiley Interscience, (2005)

[33]

Texas Instruments Inc., TMS320C621x/C671x DSP Two-level internal memory reference guide, (2004)

[34]

Texas Instruments Inc., TMS320C6000 DSP cache user’s guide, (2003)

[35]

Texas Instruments Inc., TLV320AIC23 Stereo audio CODEC data manual, (2001)

[36]

N. Patavalis, A brief introduction to JTAG, (2001)

[37]

Texas Instruments Inc., TMS320 DSP/BIOS User’s Guide, (2002)

[38]

D. Keil, Real-Time data exchange, (1998)

[39]

F. Miyara, Acústica y Sistemas de Sonido – 3º edición, UNR EDITORA, (2003)

[40]

S. Wilson, WAVE PCM soundfile format, (2003)

[41]

Roland Corporation, Roland RD-100 - MIDI Implementation, (1999)

[42]

Texas Instruments Inc., DSP/BIOS driver developer's guide, (2002)

[43]

Texas Instruments Inc., TMS320C67x FastRTS library programmer’s reference, (2002)

[44]

Texas Instruments Inc., Code Composer Studio v2 help - Software pipelining, (2002)

[45]

Texas Instruments Inc., Code Composer Studio v2 help - TMS320C67x pipeline overview, (2002)

[46]

Texas Instruments Inc., TMS320C6000 CPU and instruction set reference guide, (2002)

[47]

Corelis Inc., Boundary-Scan Tutorial, (2006)

[48]

L. Trautmann, R. Rabenstein, Digital Sound Synthesis by Physical Modeling Using the Functional Transformation Method, Kluwer Academic / Plenum Publishers, (2003)

[49]

R. Welti, Introducción a la Física de las Ondas, UNR EDITORA, (1996)

Proyecto final de ingeniería - Facultad de Ciencias Exactas, Ingeniería y Agrimensura - UNR

125

Lihat lebih banyak...

Comentarios

Copyright © 2017 DATOSPDF Inc.