análisis humita sicoacústico de sala

Imprescindibles si queremos que las creaciones HUM tengan calidad y sentido.
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

análisis humita sicoacústico de sala

Mensaje por wynton »

Hola a todos,

la semana pasada estuve leyendo unos artículos sobre métodos de análisis basados en la escala ERB y su aplicación a la acústica de recintos:

http://www.tml.tkk.fi/~ktlokki/Publs/lokkidafx.pdf

http://rvl4.ecn.purdue.edu/~malcolm/app ... onsEar.pdf

El caso es que me pareció que los métodos descritos eran facilmente desarrollables a partir de un script en python y los python-bindings que estoy preparando sobre DRC (http://drc-fir.sourceforge.net/doc/drc.html)

Estos bindings están ya casi terminados para hacerlos públicos (la pu.. documentación). Y estaba desarrollando unos scripts de prueba y de demo de la utilidad del asunto (escasa).

El caso es que tengo preparado un script para Windows (¿vaaaale?) para python 2.3 (http://www.python.org/ftp/python/2.3.5/Python-2.3.5.exe) que toma un impulso en formato raw-32 bits floating point y lo descompone en las (creo) 40 bandas ERB y lo integra a saltos de tiempo siguiendo (creo) lo descrito en el artículo primero.

Cada banda filtrada (por convolución) la guarda en un wav, para análisis de la propia implementación del algoritmo.

Y finalmente guarda el resultado de la integración en un fichero (output.dat) que es manejable por gnuplot (para windows).

http://sourceforge.net/project/showfile ... up_id=2055

Como necesito alguna mente pensante más para depurar o validar o sugerir o lo que sea, os enlazo un rar con todo el pack completo.
El script se llama test_erb.py. Si se instala python 2.3 con hacer doble click en el script arranca, siempre y cuando haya un fichero impulse.pcm
en el mismo directorio.

http://rapidshare.com/files/13001942/erb_test.rar.html

Os incluyo un impulse.pcm que fue medido en Molingordo para unas ATC SCM-12 para que os valga como ejemplo de lo que se necesita. Se puede importar con audacity:

http://audacity.sourceforge.net/

En formato RAW, 32-bits-floating-point-endianless, 44100 Hz. Así que la señal impulsiva que os interese analizar la guardáis en el directorio donde este el script con el nombre impulse.pcm y a darle al click.

Básicamente, es un impulso de sweep-scope (creo).

Incluye un script para gnuplot que dibuja algo así:

Imagen

Una vez abrierto gnuplot y dando a File -> Open y abriendo erb_test.plt, que es el dichoso script. Y a partir de ahí con el ratón se puede rotar el dibujo.

Se agradecerán todo tipo de comentarios. Se trata de un alfa-testing.
El que quiera código fuente de los python-bindings para DRC que me envie un privado y se los paso.

En cuanto tenga terminadas pruebas y documentación lo publicaré por aquí.

Gracias.
RR
Mensajes: 370
Registrado: Jue 25 Nov 2004 , 21:55

Mensaje por RR »

Huy, me he emocionao...
R :|
No tengo nada que decir sobre este asunto. Pero nada.
RR
Mensajes: 370
Registrado: Jue 25 Nov 2004 , 21:55

Mensaje por RR »

Hola: Tengo python 2.5, y me insulta así:

Imagen

Supongo que el archivo _pyDRC.pyd depende de la versión... ¿Lo solucionaría con las fuentes?
R :|
No tengo nada que decir sobre este asunto. Pero nada.
RR
Mensajes: 370
Registrado: Jue 25 Nov 2004 , 21:55

Mensaje por RR »

He instalado la 2.3, y ahora me insulta así por línea de órdenes:

Traceback (most recent call last):
File "C:\Documents and Settings\Roberto\Escritorio\py\test_erb.py", line 5, in -toplevel-
from numarray import *
ImportError: No module named numarray

¿Me faltan librerías?
R :|
No tengo nada que decir sobre este asunto. Pero nada.
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

Ay ay ay...
se me olvidó. Hace falta instalar un modulo de python para análisis numérico.
Es otro exe para windows. Faaacil:

http://downloads.sourceforge.net/numpy/ ... g_mirror=0

Aunque no hace falta más en este caso concreto, yo tengo instalados de aquí:

http://sourceforge.net/project/showfile ... _id=223264

numpy-1.0.1 para python2.3
numarray-1.5.2 para python2.3
Numeric-23.1 para python2.3

Se podría compilar la librería pyDRC para python2.5 pero explicar como hacerlo no es facil en los minutos que tengo a primera hora. Irá en documentación.

Trabajo con la versión de python2.3 porque en windows hay otros bindings para una librería gráfica llamada qwt que me interesa, de los que solo hay versión para este python2.3.

El script tiene un error, se me olvido normalizar la integración por el ancho de banda de cada tramo ERB. La gráfica anterior correcta sería así:

Imagen

Envio solo el script a sustituir:

http://rapidshare.com/files/13119385/test_erb.py.html

Gracias Roberto por probar la alfa (del script, de la instalación y del desarrollador).

Y cualquier otro que tenga interés en el asunto del análisis acústico humita que se anime. Todos aquellos que sobrevivan al punto alfa disfrutarán de nuevos y divertidos scripts.
Avatar de Usuario
Luismax
Site Admin
Site Admin
Mensajes: 7081
Registrado: Lun 03 Nov 2003 , 18:44
Ubicación: MatrixHell
Contactar:

Mensaje por Luismax »

Esto...perdón :oops: una preguntita wynton
En las "herramientas del idioma" de Google desde que idioma tengo que poner que me traduzca tus mensajes al castellano. :?: :?
“No es señal de buena salud estar bien adaptado a una sociedad profundamente enferma”
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

Para Luisma:

1- Descargas esto y lo instalas (doble click aceptar aceptar bla bla bla....):

http://www.python.org/ftp/python/2.3.5/Python-2.3.5.exe

2- Descargas esto y lo descomprimes (doble click/ extraer todo/ marcas use folder names y lo extraes en "C:\Archivos de programa").

http://downloads.sourceforge.net/gnuplo ... g_mirror=0

Luego te creas un acceso directo a "C:\Archivos de programa\gnuplot\bin\wgnuplot.exe" y en las propiedades de ese acceso directo dices Iniciar en: "C:\Archivos de programa\gnuplot\bin". Plantas el acceso directo en el Escritorio.

3- Descargas e instalas esto (doble click aceptar aceptar bla bla bla....):

http://downloads.sourceforge.net/numpy/ ... g_mirror=0

4- Descargas y descomprimes esto donde te venga bien:

http://rapidshare.com/files/13001942/erb_test.rar.html

5- Descargas este fichero y lo sustituyes en ese mismo directorio:

http://rapidshare.com/files/13119385/test_erb.py.html

La parte de instalación ya está terminada.
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

La parte de ejecución.

1- Doble click en test_erb.py. Hace su sucio trabajo.

2- Doble click en el acceso directo del gnuplot. Menu---> File-->Open y el fichero es "erb_test.plt". Se encuentra en el mismo directorio que test_erb.py.

Y aparece el gráfico ese. ¿Qué significa? Mira tío que te lo explique Roberto que yo soy el del soporte técnico.
Joaquin
Mensajes: 423
Registrado: Vie 14 Nov 2003 , 16:10

Mensaje por Joaquin »

wynton...tio...tu no eres de este planeta...seguro :shock:
Avatar de Usuario
Kir
Site Admin
Site Admin
Mensajes: 4706
Registrado: Sab 25 Oct 2003 , 20:40
Ubicación: Tuerto del tercer ojo
Contactar:

Mensaje por Kir »

Pues en directo es mas feo todavía.

:twisted:
Kir

Tuerto del tercer ojo.
RR
Mensajes: 370
Registrado: Jue 25 Nov 2004 , 21:55

Mensaje por RR »

Wyn, ¿has probado a procesar un delta? Sale algo muy raro...

Aparte, peta cuando el impulso es corto, es buena cosa hacer un pre o post-padding.

Pero lo importante es la posibilidad que abre. He probado con un impulso mío, y mejor como que no lo subo, al menos hasta echar un vistazo a otras cosas...

De entrada este procesado puede servir como base para una aplicación para igualar niveles de altavoces, si interesa te paso los links.

Ya iremos probando cosas...
R :|
No tengo nada que decir sobre este asunto. Pero nada.
RR
Mensajes: 370
Registrado: Jue 25 Nov 2004 , 21:55

Mensaje por RR »

Me olvidaba comentar una cosa, salacéntricos: Ese aumento del nivel en el tiempo, o aumento del campo reverberante a cosa de 2000-3000 hz. no es otra cosa que el tweeter entrando en acción: El cambio de directividad de un altavoz pequeño, que "ilumina" más la sala.

Interesting... Repito que si veis la gráfica del focal es para caerse de culo.
R :|
No tengo nada que decir sobre este asunto. Pero nada.
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

RR escribió:Pero lo importante es la posibilidad que abre. He probado con un impulso mío, y mejor como que no lo subo, al menos hasta echar un vistazo a otras cosas...
Haces bien porque estamos en "alfa". Es decir, cuando evaluamos los resultados en realidad tenemos que evaluar la implementación del algoritmo. Y para eso hay que probar con señales de resultados conocidos a priori.

Mi problema (y por eso os propongo si quereis ser alfa-testers) es que ya he visto los wav's de los filtros gammatone y su espectro y es correcto, el filtrado por convolución me parece que tiene sentido (me falta probar la convolución con una delta y ver los wav's resultantes).

Pero la ventana deslizante de tiempos no la consigo interpretar correctamente. Creo que el programa pesa e integra bien, pero solo a partir de mirar código. Y tengo mis dudas con la normalización.
RR escribió: De entrada este procesado puede servir como base para una aplicación para igualar niveles de altavoces, si interesa te paso los links.
Eso ni se pregunta. Tú pon los links....

RR escribió: Aparte, peta cuando el impulso es corto, es buena cosa hacer un pre o post-padding.
Si, esta todo puesto a piñon dentro del script. Por ejemplo, la frecuencia de muestreo es 44100 Hz, o el impulso, que se procesa al estilo DRC y además con el pico asimétrico. Pero la reescritura para hacerlo de otro modo no está en la librería (pyDRC) sino en el script, con lo que está a mano del usuario sin necesidad de recompilar.

Esta es la idea que está detras de la integración entre librerías en C/C++ y scripts. La parte que requiere de optimización, que son tareas simples (o al menos conceptualmente "atómicas") la ponemos en librerías.
Y las piezas del puzzle las integramos con un lenguaje de alto nivel, tipo script, interactivo si hace falta. Si se sigue este diseño, el coste en tiempo de ejecución no pasará de un 25% más, y el coste en tiempo de desarrollo baja mucho más. El resultado es que se pueden hacer cosas más rapidamente aunque sean un poco menos eficientes.

Un ejemplo es la posibilidad de convertir a WAV una señal en formato RAW. En C es un dolor de muelas la primera vez. En python es un copy/paste de una receta de San Google.
RR escribió: Ya iremos probando cosas...
Exacto.
Invitado
Mensajes: 492
Registrado: Mar 23 Nov 2004 , 13:07
Ubicación: De baja de éste foro.

Mensaje por Invitado »

Hola,

¿Eso quiere decir que se puede interpretar como una medida de la respuesta en potencia del altavoz en una sala, ponderada de acuerdo a la sensibilidad en frecuencia de los agujeros de los oídos?

Pues es un paso adelante de cojones en la medida de dispersión de altavoces , la interacción con la sala, y el equilibrio tonal subjetivo.

Buen trabajo, sí señor. Ésta tarde lo instalo a ver si puedo echarlo a andar.

Ahora bien, a la vista de la gráfica, los salacéntricos dirán que la sala reverbera en el tramo de frecuencias "largas" en el tiempo, mientras que los altavocéntricos sostendremos con entusiasmo que con el diagrama de dispersión de un tuiter hemisférico es muy difícil obtener una respuesta tonal en sala razonable, a menos con un dos vías.

Cada uno que escoja la corrección que más le divierta. En el origen, o en el rebote con las paredes, pero en éste caso, de forma muy selectiva en frecuencia.

Un abrazo
Miguel mentero
Imagen
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

La prueba de la delta ha sido brutal. La convolución estaba mal cortada y faltaba el comienzo de cada señal filtrada banda ERB. Nueva versión:

http://rapidshare.com/files/13294542/te ... 3a.py.html

Ahora los output_xxxx.xx.wav tras filtrar una delta contienen los gammatones centrados en cada punto de la escala ERB. Si alguien quiere ver como son y ver su espectro no tiene más que abrirlos con audacity.

Perdonad la proliferación de versiones (y más que habrá, comienza la numeración). He incluido el ajuste para cuando la señal impulse.pcm es menor de 2^16 muestras.

Incluyo el espectrograma de la delta para el que quiera estudiar qué significa:

Imagen

Si ve algo (correcto o incorrecto) que lo diga. Yo en estos momentos no tengo muy claro que es lo que debería buscar.

Ahora el impulso del ATC SCM-20 queda así:

Imagen

Por cierto para guardar la gráfica de gnuplot tal cual la véis en pantalla:

>set term png (puede ser jpg)
>set output 'grafica.png'
>replot
>unset output
>set term windows

Y en el directorio donde esté erb_test.plt aparecerá grafica.png.
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

Invitado escribió: ¿Eso quiere decir que se puede interpretar como una medida de la respuesta en potencia del altavoz en una sala, ponderada de acuerdo a la sensibilidad en frecuencia de los agujeros de los oídos?
La intención es esa.

La escala ERB tiene significado sicoacústico. Así como la ventana de Plack&Oxenham.

La idea del primer artículo es:

1- Filtrar una respuesta impulsiva con un banco de filtros que modelan la sensibilidad de un oido-tipo de acuerdo al modelo de bandas ERB.

http://en.wikipedia.org/wiki/Equivalent ... _bandwidth

2- Integrar a saltos de tiempo cada señal filtrada por una ventana que modela el enmascaramiento previo y posterior de un oido-tipo. Este punto es una aproximación "gorda" puesto que ya citan los articulistas que estos fenómenos no están estudiados de modo completo.

Como resultado de la aplicación de estos modelos entiendo yo que tendríamos un espectrograma donde la relación banda ERB-nivel-tiempo es dependiente de la fuente emisora (altavoz), el recinto acústico y además, de un modelo de oido-tipo (que será bueno o será malo pero de momento es lo que hay).

Este galimatías no se muy bien como interpretarlo. Por eso no me aclaro con la depuración. La convolución ya está repasada y si con una delta funciona, entiendo que funciona en general. Pero de lo otro NPI.

Parece ser (no recuerdo el link, luego lo busco) que la aplicación del modelo de oido tiene que ser compatible con el efecto loudness, puesto que las curvas isofónicas tienen que poderse deducir del propio modelo. Pues ni con esas se cómo comerlo.
Última edición por wynton el Jue 25 Ene 2007 , 13:44, editado 1 vez en total.
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

Por ejemplo, si miramos los perfiles de cada "rebanada temporal" de pasar por este fistro una delta de Dirac vemos esto:

Imagen

La delta procesada inicialmente tiene gran energía en agudos (rebanada trasera), luego se centra en 1 KHz (segunda rebanada) y luego va cayendo de nivel.

¿Tiene sentido? ¿a alguien se le ocurre algo? ¿Hay por aquí algún profesional de la sicoacústica que nos pueda decir algo o están todos en hificlass?
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

Al menos matemáticamente, a la vista de la forma de los filtros gammatone parece que la resultante del procesado de la delta tiene sentido:

Imagen

De arriba abajo, gammatones para: 11.2 kHz, 3.3 KHz, 1.1 kHz, 550 Hz y 99 Hz. Según baja la frecuencia, el gammatone correspondiente tiene más retrasado en el tiempo el pico y este es menos pronunciado. Todos los gammatones están normalizados a L1-norm igual a 1:

http://mathworld.wolfram.com/L1-Norm.html

Lo que me empiezo a oler es que vamos a acabar pensando en términos de curvas loudness y eso no sé si nos va a aportar mucho (salvo para ecualizaciones quizás). Espero que el efecto combinados de los retardos inducidos por el modelo nos permita sacar algo útil.
RR
Mensajes: 370
Registrado: Jue 25 Nov 2004 , 21:55

Mensaje por RR »

wynton escribió: 1- Filtrar una respuesta impulsiva con un banco de filtros que modelan la sensibilidad de un oido-tipo de acuerdo al modelo de bandas ERB.

2- Integrar a saltos de tiempo cada señal filtrada por una ventana que modela el enmascaramiento previo y posterior de un oido-tipo. Este punto es una aproximación "gorda" puesto que ya citan los articulistas que estos fenómenos no están estudiados de modo completo.

Como resultado de la aplicación de estos modelos entiendo yo que tendríamos un espectrograma donde la relación banda ERB-nivel-tiempo es dependiente de la fuente emisora (altavoz), el recinto acústico y además, de un modelo de oido-tipo (que será bueno o será malo pero de momento es lo que hay).
Hola:

Lo primero, felicitarte, creo que de nuevo, pero por si acaso ;-)

Creo que el espectrograma psicoacústico da una idea de lo que de relevante pasa con el sonido, solo lineal por supuesto. Vamos, se pierde detalle fino y tenemos una cierta garantía de que ese detalle solo distraía, y lo que queda es al menos el patrón que significa algo. No lo único quizá, pero al menos todo lo que sale.

Lo del delta es fundamental que salga bien. Como sabes, la imagen de un delta nos da la representación de un sistema perfecto, y es contra lo que hay que comparar la medida.

Es más me atrevo a sugerirte una rutina que directamente reste el resultado del delta al del impulso. Esa diferencia sería "lo imperfecto" de nuestro sistema.

Por otro lado, creo recordar que Plack&Oxenfam proponen además un compresor sencilllo (una doble recta) previo a la integración temporal, que cro que no está en el modelo de los finlandeses, y no sé si tú implementas. Pregunto.

Sin estar del todo seguro, aparte de tener esa imagen, para mí muy útil, del espectrograma "preinterpretado" o validado, creo que habría que intentar pasar a la "curva a ecualizar". Propongo probar lo siguiente:

En lugar de sacar la representación suavizada de la energía, usar la ventana P&O para ponderar los impulsos, y suavizar luego con ancho ERB.
Este galimatías no se muy bien como interpretarlo. Por eso no me aclaro con la depuración. La convolución ya está repasada y si con una delta funciona, entiendo que funciona en general. Pero de lo otro NPI.
[Editado: Quito la imagen tal como avisé]
Parece ser (no recuerdo el link, luego lo busco) que la aplicación del modelo de oido tiene que ser compatible con el efecto loudness, puesto que las curvas isofónicas tienen que poderse deducir del propio modelo. Pues ni con esas se cómo comerlo.
http://www.psych.umn.edu/psylabs/apc/pd ... ham_98.pdf

La predicción es de una precisión espeluznante.
Última edición por RR el Mar 30 Ene 2007 , 22:58, editado 1 vez en total.
R :|
No tengo nada que decir sobre este asunto. Pero nada.
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

Gracias Roberto por el enlace y los comentarios.

El aspecto extraño de la gráfica se debe a un problema de ajuste de escalas. Teóricamente la ventana de Plack&Oxenham es infinita, pero yo la tengo que cortar por algún sitio. Y le he puesto un umbral a -400 dB para protegerme de "cero".
Para cambiar la escala en gnuplot:
>set zrange [zmin:zmax]

se hace de la misma forma para z (nivel), que para x (tiempo) o y (frecuencia)
RR escribió: Es más me atrevo a sugerirte una rutina que directamente reste el resultado del delta al del impulso. Esa diferencia sería "lo imperfecto" de nuestro sistema.
Buena idea. A ver que sale.
RR escribió: Por otro lado, creo recordar que Plack&Oxenfam proponen además un compresor sencilllo (una doble recta) previo a la integración temporal, que cro que no está en el modelo de los finlandeses, y no sé si tú implementas. Pregunto.
De la existencia del compresor no tenía idea. Tal cual está ahora el script, creo que no puedo implementarlo, porque una respuesta impulsiva no incluye en si misma su nivel medido en dB-SPL. Y hasta cierto punto es lógico. La respuesta impulsiva de un sistema acústico es LTI ( en primera aproximación), lo que cambia es nuestra percepción con el nivel sonoro.

Lo que nos podemos plantear es hacer una batería de análisis donde el impulso inicial sea el mismo y a cada ejecución del script le suponemos un nivel SPL de referencia en una banda ERB de referencia (1 kHz por ejemplo). Así podemos ver si el sistema es más o menos inmune al "loudness" humano. Pero esto sería cuando acabemos la fase alfa.
RR escribió: En lugar de sacar la representación suavizada de la energía, usar la ventana P&O para ponderar los impulsos, y suavizar luego con ancho ERB.
No sé hacerlo. Tal cual lo entiendo, la ventana de P&O es una integración ponderada en el tiempo del cuadrado de la señal. Tras ella se pierde la información en frecuencia: ¡No tengo valores negativos!

Ahora voy a la digestión del pdf de Plack&Oxenham. Creo que el integrador que estoy empleando no es correcto.
Responder