AudioResearchBlog

Covering all audio related stuff with special focus on programming and digital signal processing

Archive for the 'matlab' Category

Some experience with CLAM inside an audio club at FIUBA, Argentina

Posted by hordia on 11th March 2010

(Note: I wrote this as something to tell to the clam-devel mailing list about some of my source-code commits)

About eight months ago, there was a foundation of something like an “audio club” in my university [1]. As soon i learned about that, i quickly got in touch with them and noticed that there was a major interest in analog issues (the only audio area with at least elective, courses in the university). So i told them about all the cool things that are available and ready to do with digital audio, mostly signal processing related. I talked in general, but of course i also talked about clam, with all its prototyping, real-time and easy development of plugins features. Even many of them ended installing and using it, and some even developing with more or less help. One thing to notice is that most of them are students from first years and most (but not all) are students with a basic programming level (because they are from electronics) but strong dsp knowledge (behind this is an university with more emphasis in theory than practice)
We started specifying plugins from a more abstract level (inputs/outputs/controls) and generating the source code base using
CLAM’s Templated Plugins Code Generator [2] and prototyping some simple applications. But one of the things we ended up doing was to take advantage of clam as platform to prototype medic related applications like filter ECG signal from noise in realtime, and some like _vice-versa_, i mean applying some processing knowledge from that area to audio.

Some of that work (one hour per week average) it’s now in the repo, most remarkable i think are filters work, by above the adaptative notch one (which even was used as a demo of a talk of one of the members about the steepest descent algorithm and its application to filter ECG signals)

Some development screenshots:
http://clam-project.org/wiki/Image:FilterByCoefExample.jpg
http://clam-project.org/wiki/Image:FilterExample-LP-HP.jpg
http://clam-project.org/wiki/Image:ThreeBandFilterOutputWithWhiteNoiseAsInput.jpg
http://clam-project.org/wiki/Image:GaussianWhiteNoiseHistogram.jpg
http://clam-project.org/wiki/Image:UniformWhiteNoiseHistogram.jpg

[0] FIUBA: Engineering Faculty of Buenos Aires University
[1] Group: http://code.google.com/p/club-audio-fiuba
Source code repo: http://groups.google.com/group/club_de_audio_fiuba
[2] http://audiores.uint8.com.ar/blog/2009/08/17/showing-a-little-about-clam-as-a-prototyping-tool-at-the-audio-club-of-fiuba/


, , , , , , , , , , , , , , , , , , ,

Posted in audio, algorithms, effects, signal processing, free software, programming, matlab, GPL, c++, blog, noise, python, projects, math, English, CLAM, news, plugins, ideas, ClubAudioFiuba | No Comments »

Conversión de audio a MIDI con código abierto (recopilación de info)

Posted by hordia on 23rd March 2007

Aprovecho la información que organicé para contestar un mail en una lista de Musix para hacer un post sobre conversión de audio a MIDI. El mail que contesté era de alguien que estaba buscando software de código abierto que hiciera eso (conversión audio-midi).

Dentro de los proyectos software libre yo conozco:

El wave2mid, que fue desarrollado como un proyecto de fin de carrera (Ingeniería Electrónica en la Universidad de Granada) por Pablo Busto González. Originalmente codificado en Matlab, luego fue migrado a Octave por la misma persona para poder distribuirlo libremente! Aún no tuve la oportunidad de probarlo ni examinar el código fuente, pero al menos parece estar bastante bien documentado (aunque en la misma página web anticipan que es muy lento, como era de esperar por estar desarrollado sobre este tipo de programas que en todo lo que no sea multiplicación de matrices dejan mucho que desear en cuanto a velocidad).

Programados en C++, están el Free Audio Note Recognition, también conocido simplemente como fanr (polifónico) y el Midingsolo (monofónico).

Nunca los probé y no se en que estado están. Tampoco se cual es el “estado del arte” en este tema, no se si hay algún programa (de código abierto o no) que realmente lo haga bien. La última vez que probé programas de este tipo fue hace muchos años y no quedé para nada conforme.

Algunas cosas relacionadas que conozco, que no hacen específicamente esto pero creo que pueden servir de referencia son:

El Voice2MIDI, que como su nombre lo indica esta orientado a la conversión de voz a midi, no de instrumentos. El trabajo que le dió origen parece estar aqui. Es parte del framework CLAM y según el pdf antes citado fue presentado como proyecto de fin de carrera de Ingeniería Técnica en Informática de Sistemas en la Universitat Pompeu Fabra y lo tuvo como director a Xavier Amatriain (uno de los principales desarrolladores del proyecto CLAM). Fue revisado aqui (en realidad se revisa el proyecto CLAM en general, pero también se le dedican unas palabras a este soft)

Tartini, una herramienta de análisis musical en tiempo real que esta orientado a una completa visualización del timbre de notas interpretadas por instrumentos o voz (tiene varios tipos de vistas) y entre otras cosas sirve para identificarlas (aunque creo que no de forma automatizada) y analizar su contenido espectral de diferentes maneras. Fue resultado de un trabajo para obtener un PhD y el autor, Philip McLeod ofrece un par de papers al respecto en su web (yo se los pedí hace un tiempo y me los envío enseguida).

Reciéntemente Avelino Herrera Morales hizo en su blog varios posts sobre separación de fuentes de sonido (que pueden venir bien para que sea polifónico!) y algunas implementaciones de algoritmos (liberadas bajo GPL!) para lograrlo:

¿Alguien conoce algo más?


, , , , , , , , , , ,

Posted in audio, algorithms, signal processing, free software, programming, instruments, matlab, GPL, formats, midi, Castellano, CLAM | No Comments »

Convolución circular rápida (aplicación en reverbs)

Posted by hordia on 3rd November 2006

Si consideramos un recinto o un determinado lugar como un sistema LTI[1] y de alguna forma obtenemos su respuesta impulsiva, podemos convolucionar esta última con cualquier grabación[2] y obtener como resultado como se “escucharía” en ese lugar.

La fórmula para una convolución discreta es la siguiente: y[n] = x[n]*h[n] = \sum_{k=-\infty}^{+\infty} x[k] h[n-k] donde x[n] es la entrada, h[n] la respuesta impulsiva e y[n] la salida del sistema.

En Matlab por ejemplo podriamos hacer:

y = conv(x,ri); % x y ri vectores de señal de entrada y respuesta impulsiva 

Pero a medida que los vectores son más largos (más muestras, más segundos de duración por ejemplo) esta operación cada vez tarda más.

Una forma de hacerlo mucho más rápido (la diferencia es muy grande), es pasar todo esto al dominio de la frecuencia, donde la convolución se “transforma” en una multiplicación, operación computacionalmente mucho más sencilla[3].

Queda algo asi:

Y(\Omega)=X(\Omega)H(\Omega)

(cada letra en mayúscula representa la transformada de Fourier de tiempo discreto de cada vector antes mencionado)

Para calcularla de forma digital debemos usar la DFT, en Matlab por ejemplo se reduce a:

X = fft( x, N ); % transformada de Fourier de la señal de entrada
H = fft( h, N ); % transformada de Fourier del impulso
Y = H .* X; % multiplicación de espectros (elemento a elemento)
y = ifft( Y ); % se vuelve al dominio del tiempo 

(FFT es un algoritmo rápido para calcular la DFT)

Donde N (cantidad de puntos de la transformada) debe ser mayor que la suma de las longitudes de x[n] y de h[n] - 1, ya que la IDFT (la transformada inversa) de la multiplicacion es la convolución circular y para que esta coincida con la tradicional (la lineal) se debe pedir N \geq L.

Por otra parte mientras más grande sea N el proceso será más lento. También debe ser potencia de 2, y el vector si hace falta es rellenado con ceros hasta llegar a N puntos.
Este método por ejemplo se usa mucho para realizar reverbs por convolución. Las respuestas impulsivas de varios lugares pintorescos como catedrales y bosques o recintos con determinadas características se pueden conseguir fácilmente “en internet”.

Por ejemplo, para hacer “Mayo, Los sonidos de la Plaza“, se que primero grabaron la respuesta impulsiva de la plaza tirando petardos (por su sonido fuerte y corto, que se asemeja a las carterísticas de un impulso) para asi obtener las características del sistema formado por la plaza y sus alrededores, y con esos datos generaron grabaciones para ser reproducidas en ese lugar adecuadamente, sin ecos, ni reverberaciones excesivas.

[1] que se comporta de forma lineal e invariante en el tiempo.

[2] preferiblemente grabada en una cámara anecoica o lo más cercano a esto posible.

[3] además, en programas como Matlab/Octave, la multiplicación de vectores esta superoptimizada.

Código en Matlab, procesa archivos stereo y mono:

Read the rest of this entry »


, , , , , , , , ,

Posted in audio, acoustics, algorithms, effects, signal processing, matlab, GPL, python, Castellano, sound | 3 Comments »

Análisis de un filtro pasa bajo digital básico

Posted by hordia on 14th July 2006

La ecuación de un filtro pasabajos digital de primer orden es:

y[n]=\frac{x[n]+x[n-1]}{2}
También es llamado filtro promediador, debido a que promedia las muestras de la entrada y por lo tanto suprime variaciones rápidas, característica que le otorga el carácter de pasabajos.En la ecuación se ve fácilmente que se esta promediando los valores de la señal en el instante actual y el anterior.Por ejemplo, si la entrada x[n] es (en instantes sucesivos):

8    1    7    1

se tiene:

x[0] = 8    x[1] = 1    x[2] = 7    x[3] = 1

se puede ver que los cambios abruptos (transiciones de 8 a 1, etc) se suavizan, ya que a la salida del filtro se tiene:

y[1] = (8+1)/2 = 4.5   y[2] = (1+7)/2 = 4   y[3] = (7+1)/2 = 4

y por lo tanto y[n] queda:

4.5    4    4

una señal mucho más “suave”.

Read the rest of this entry »


, , , , , ,

Posted in audio, algorithms, signal processing, programming, matlab, Castellano | No Comments »

 
Cerrar
Enviar por Correo