0% encontró este documento útil (0 votos)
109 vistas3 páginas

Algoritmo Karplus-Strong en C/C++

Este documento presenta el algoritmo de Karplus-Strong para la síntesis de sonido de instrumentos musicales. Explica cómo el algoritmo utiliza un retardo retroalimentado y un filtro para simular el sonido de una cuerda pulsada. También incluye instrucciones para implementar el algoritmo en código y generar una melodía de ejemplo sintetizada.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
109 vistas3 páginas

Algoritmo Karplus-Strong en C/C++

Este documento presenta el algoritmo de Karplus-Strong para la síntesis de sonido de instrumentos musicales. Explica cómo el algoritmo utiliza un retardo retroalimentado y un filtro para simular el sonido de una cuerda pulsada. También incluye instrucciones para implementar el algoritmo en código y generar una melodía de ejemplo sintetizada.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Procesamiento Digital de Senales - Proyecto 2

Fecha de entrega: 11 de Mayo

1 Algoritmo de sntesis Karplus-Strong


El algoritmo Karplus-Strong es un metodo de sntesis de sonido basado en mod-
elado fsico, que se utiliza principalmente para simular el sonido de una cuerda
pulsada o golpeada, por ejemplo, como es el caso de una guitarra o de un pi-
ano. La idea basica del algoritmo es pasar una senal de banda ancha y corta
duracion por un retardo, cuya salida se retroalimenta nuevamente a la entrada.
La Figura 1 muestra un diagrama del sistema utilizado, en el cual se tienen las
siguientes componentes:
1. Senal de entrada: En general se utiliza una senal de banda ancha y
corta duracion; por ejemplo, una rafaga de ruido blanco, o bien, uno o
mas ciclos de una onda cuadrada o diente de sierra.
2. Retardo: La longitud L del retardo debe entonarse de acuerdo a la
frecuencia de la nota que se desea sintetizar. Especficamente, L = fs /f ,
donde f es la frecuencia (en Hz) de la nota, y fs es la frecuencia de
muestreo.
3. Filtro: Para asegurar la estabilidad del sistema y tener un mayor control
sobre la tonalidad del sonido resultante, se puede aplicar un filtro pasa-
bajas (por lo general de un polo) con una ganancia menor a 1 en todas
las frecuencias.
El sistema puede implementarse mediante la siguiente ecuacion:
y[n] = x[n] + T {y[n L]}, (1)
donde || < 1 y la transformacion T corresponde a un filtro pasabajas de un
polo. En otras palabras, si f [n] = T {y[n]}, entonces tenemos que
f [n] = (1 p)y[n] + pf [n 1], (2)

Figura 1: Diagrama de bloques del algoritmo Karplus-Strong.

1
con |p| < 1.

Como se vio en clase, este sistema tiene una respuesta en frecuencia similar
a un filtro peine que deja pasar solamente la frecuencia f y sus armonicos
(multiplos enteros de f ), produciendo una salida con un espectro similar al de
un instrumento musical. El valor de es por lo general cercano a 1 y controla el
tiempo de cada de la nota. Por otra parte, el filtro pasa bajas permite controlar
la brillantez (contenido de alta frecuencia) del sonido. Valores tpicos para p
estan entre 0 y 0.5.

Combinando el retardo dentro del mismo filtro, podemos implementar el


sistema completo mediante el siguiente algoritmo:
1. Inicializar y[n] = 0 para n = (bLc + 1), . . . , 1, y fant = 0.
2. Hacer n = 0.
3. Hacer L = fs /f , donde fs es la frecuencia de muestreo y f la frecuencia
de la nota que se desea reproducir.
4. Calcular f = (1 p)y[n L] + pfant .
5. Hacer fant = f .
6. Calcular y[n] = x[n] + f [n].
7. Incrementar n y volver al paso 3.
Es importante notar que L no es necesariamente entero, lo cual representa un
problema al intentar obtener y[n L]. Una posible solucion consiste en utilizar
algun metodo de interpolacion para estimar y[n L]. Por ejemplo, utilizando
interpolacion lineal es posible estimar y[n L] de la siguiente manera:
y[n L] (1 q)y[l] + qy[l + 1], (3)
donde l = bn Lc y q = (n L) l.

La frecuencia especfica de una nota musical puede calcularse facilmente


tomando en cuenta los siguientes aspectos:
1. La frecuencia de una nota es el doble de la frecuencia de la misma nota
una octava mas abajo.
2. En la musica occidental, la octava se divide en 12 intervalos llamados
semitonos, por lo tanto la proporcion de frecuencia entre una nota y otra
nota un semitono mas abajo es 21/12 .
3. La frecuencia del La central de un piano es 440 Hz.
Entonces, la frecuencia f (en Hz) de la nota que se encuentra a una distancia
de n semitonos del La central esta dada por:
f = 440 2n/12 . (4)

2
2 Ejercicios
1. Implemente el algoritmo Karplus-Strong como una funcion de C/C++
utilizando interpolacion lineal en la lnea de retardo, y una rafaga de ruido
blanco con una duracion de W muestras al inicio de cada nota.
2. Generar una senal de audio que corresponda a una meloda sencilla donde
cada nota se sintetiza usando la funcion anterior. Un ejemplo de meloda
sencilla es la siguiente:

Nota Distancia a La Central Duracion


Do -9 1
Do -9 1
Sol -2 1
Sol -2 1
La 0 1
La 0 1
Sol -2 2
Fa -4 1
Fa -4 1
Mi -5 1
Mi -5 1
Re -7 1
Re -7 1
Do -9 2

Utilizar una frecuencia de muestreo de 44100 Hz.


3. Guardar la senal generada en el inciso anterior en un archivo utilizando
un formato entero de 16 bits con signo (tipo short). Este archivo puede
cargarse en algunos editores de audio para escucharlo. Por ejemplo, el
editor WavePad, el cual puede descargarse desde
http://www.nch.com.au/wavepad/index.html
Un ejemplo del resultado que se debe obtener (con = 0.999 y p = 0.2)
puede descargarse de
http://galia.fc.uaslp.mx/~fac/dsp/ks.mp3
4. Explique como podra modularse la frecuencia de una nota para producir
efectos tales como slide (cambiar la frecuencia de una nota a otra de
manera contnua), o vibrato (variar ligeramente la frecuencia de manera
oscilatoria). Intente modificar la funcion implementada para lograr alguno
de estos efectos.

También podría gustarte