MG-IV: Taller de ecualización. ATC SCM 12

Imprescindibles si queremos que las creaciones HUM tengan calidad y sentido.
Avatar de Usuario
luisggarcia
Mensajes: 802
Registrado: Vie 16 Jul 2004 , 9:28

Mensaje por luisggarcia »

wynton escribió:Luis, está claro que somos una pareja idonea para estudio de campo en psicología de la comunicación o alguna disciplina de este estilo.
Va a ser que si. De hecho creo que, incluso por separado, también valdríamos para un estudio o dos.

No, a mi me parece una de las claves del DRC. Se pueden mantener las correcciones de cancelaciones a raya ¡casi nada!. Es que incluso si consigo hacer más o menos lo que cuento en la gráfica, puede servir para que suene bien el DRC. :lol:

Asi que era exactamente lo que quería expresar.

Bueno he mezclado mis pensamientos con el tema del hilo. Básicamente te estoy siguiendo en este hilo para configurar bien el DRC. Pero no quita que le vea otras utilidades, pues al final son las mismas heramientas para todo. Cuando obtenga algún resultado bueno y tenga tiempo, lo explico mejor. Y no te quejes, que por lo menos te leo. Los demas hace una página que lo han dejado.

Que, ¿Me puedes pasar el programa? ¿me ayudas?
Última edición por luisggarcia el Vie 09 Jun 2006 , 13:03, editado 3 veces en total.
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

luisggarcia escribió: No, a mi me parece una de las claves del DRC.
Bueno, vale, ya lo discutiremos más adelante. :evil: :evil:
luisggarcia escribió: Que, ¿Me puedes pasar el programa? ¿me ayudas?
Primero tengo que escribirlo y probarlo (que no peta quiero decir). Abriré hilo con "parches para DRC" y con "compilación en linux y en windows <<con código gratuito>>".
Más detalles del código los hablamos en modo privado.

A ver si así dejo de pitufar en otros foros.

Buen fin de semana a todos y disfrutad del buen tiempo.
Avatar de Usuario
luisggarcia
Mensajes: 802
Registrado: Vie 16 Jul 2004 , 9:28

Mensaje por luisggarcia »

Estupendo. Ha venido Roberto a mi casa y me ha dicho como ver los ficheros fuente en C. Lo que no se es donde compilarlos. Al ejecutarlos yo en Windows quizás tenga que ser con un compilador de Microsoft o quizás se pueda con Linux.

Se podrían hacer varias cosas: Modificar el DRC para añadir parámetros como FrecMinRMS FrecMaxRMS FrecMinPeakLimit FrecMaxPeakLimit para decir en que zona coger el valor medio y desde que frecuencia mínima y máxima limitar los picos. El valor medio puede ser interesante pedírselo en una zona totalmente diferente a la de limitación de picos.

Otra posibilidad puede ser un ejecutable que pasando un filtro y los parámetros anteriores, suavice picos. Sería para emplear un "ajuste manual" de forma que puedas realizar limitaciones de picos por zonas. Es decir ir pasando el filtro varias veces por el programa en diferentes frecuencias y a diferentes RMS.
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

Me he apuntado otro tema pendiente. La modificación de DRC está en el horno tostándose. Pero no quiero perder el hilo de la descripción de la ecualización por DRC de un par de ATC SCM 12.

Habíamos pasado ya la etapa RT (Ringing Truncation) donde se recortaban los rizados previo y posterior al pico del impulso del filtro obtenido por inversión. La siguiente etapa es # PS = Target respose stage, en la cual es posible meterle un "poco de sabor" a la ecualización.

He podido escuchar y leer comentar a bastante gente que, a veces, la respuesta plana en frecuencia no es lo ideal. A mi me parece lógico puesto que las herramientas y medios de reproducción han de estar sometidos al arbitrio de los gustos particulares. O de la comodidad de escucha, para la cual a veces hay que emplear efectos basados en el "loudness".

En esta etapa, PS, se hace la convolución del filtro por una curva de respuesta en frecuencia definida al gusto del usuario. Está curva de respuesta arbitraria puede ser desarrollada en fase lineal o en fase mínima.

Veamos el ejemplo del taller de ecualización:

# PS = Target respose stage
PSFilterType = T
PSInterpolationType = G
PSMultExponent = 3
PSFilterLen = 65535
PSNumPoints = 0
PSPointsFile = subultra.txt
PSMagType = D
PSOutWindow = 65536
PSNormFactor = 1.0
PSNormType = E
PSOutFile = rps.pcm
PSOutFileType = F

En este caso la curva de efecto ecualizador buscado queda definida por el fichero PSPointFile=subultra.txt y su aplicación se va a hacer en modo fase mínima (PSFilterType=T). El fichero subultra.txt en el taller fue definido así:

0 -20.0
10 -10.0
20 0.00
40 1.50
80 2.00
160 1.0
320 0.0
20000 0.00
21500 -10.0
22050 -20.0

Donde la primera columna es la frecuencia en Hz y la segunda es el nivel relativo en dB para cada frecuencia. Sería una ecualización con este perfil:

Imagen

En DRC, el perfil se crea a partir de estos pocos puntos mediante una interpolación que en nuestro caso ha sido de tipo PSInterpolationType = G: interpolación logarítmica. Hay varias opciones de interpolación descritas en la documentación, cuyo efecto en la ecualización final para mi es desconocido. En todo caso, ¿qué es lo que hay que interpolar? Pues DRC tiene que generar PSFilterLen = 65535 puntos a partir de los 10 definidos en el fichero inicial, para poder aplicar esta ecualización mediante convolución con una señal de extensión suficiente.

Una vez generados estos 65535 puntos y conocido su perfil en amplitud, necesitamos determinar la fase de cada punto. Para ello, en nuestro caso, mediante deconvolución homomórfica se crea un impulso de fase mínima con la respuesta en frecuencia deseada.

Y este impulso es el que se convoluciona con el filtro resultante de la etapa anterior, RT, obteniendo un filtro inverso que incorpora la ecualización personalizada que deseábamos.

Veamos el cambio operado sobre el filtro durante esta etapa.

Imagen

En azul aparece la respuesta en frecuencia antes de pasar por PS y en rojo la resultante de la citada convolución. Como se puede apreciar, el resultado ha sido una subida de nivel entre 20 y 320 Hz. Lo que se pidió.

El resultado es...... POR FIN, EL FILTRO.

Quedan dos etapas de cálculo que describiremos, pero cuyos resultados en este caso no se emplearon. En el taller de Molingordo, con las ATC SCM 12, está señal, rps.pcm fue el filtro que se utilizó.

Veamos su respuesta impulsiva:

Imagen

Respuesta escalón:

Imagen

Fase (suavizada):

Imagen

Retardo de grupo:

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

Mensaje por wynton »

Penúltima etapa:

# MC = Mic compensation stage.

Aquí se procede de la misma forma que en # PS = Target respose stage, solo que la curva que se emplea en la convolución es la función de transferencia específica del micrófono empleado en la medida de la que se ha obtenido la respuesta a impulso (ver http://www.matrixhifi.com/foro/viewtopic.php?t=1037 ). La idea de este tratamiento es corregir el filtro obtenido eliminando los "errores" por picos y valles presentes en la respuesta en frecuencia que pueda tener el micrófono empleado.

En el caso que nos ocupa se empleó el habitual Behringer ECM8000, luego la corrección se efectua aplicando el perfil de este micrófono, que podemos obtenerlo del propio paquete DRC (en el directorio sample hay varias archivos que corresponden a diferentes micrófonos). Este perfil es de esta forma:

Imagen

La configuración de esta etapa en el taller fue:

# MC = Mic compensation stage
MCFilterType = T
MCInterpolationType = G
MCMultExponent = 3
MCFilterLen = 65535
MCNumPoints = 0
MCPointsFile = ecm8000.txt
MCMagType = D
MCOutWindow = 65536
MCNormFactor = 1.0
MCNormType = E
MCOutFile = rmc.pcm
MCOutFileType = F

Según está configuración lo que DRC va a efectuar es una convolución a partir de la generación de un filtro de fase mínima (MCFilterType = T) e interpolación logarítmica (MCInterpolationType = G) basado en el perfil del fichero ecm8000.txt.
El filtro resultante de este cálculo no fue el que se empleó, sino el obtenido en la etapa anterior. Podemos evaluar el efecto en la respuesta en frecuencia en la siguiente gráfica. En rojo el espectro del filtro sin compensar y en azul compensado con la curva de función de transferencia del micrófono. Puede apreciarse que el efecto resulta muy poco significativo.

Imagen

Solo queda ya una etapa por describir.
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

Última etapa.

# MS = Minimum phase filter extraction stage

En esta etapa lo que DRC hace es generar un filtro de perfil de respuesta en frecuencia igual al de la etapa anterior (# MC = Mic compensation stage) pero de fase mínima.

Por lo tanto es una posible opción emplear en el convolver de audio este filtro de fase mínima en vez del obtenido en MC, que era la que aplicaba la compensación con la función de transferencia del micrófono, o del anterior a ese, PS que es aplicable si asumimos que el efecto del micrófono es despreciable.

La configuración empleada en el taller para esta etapa fue:


# MS = Minimum phase filter extraction stage
MSMultExponent = 3
MSOutWindow = 65536
MSNormFactor = 1.0
MSNormType = E
MSOutFile = rms.pcm
MSOutFileType = F

Un gráfica que permite ver las diferencias entre los filtros rms (de fase mínima) y rps (no de fase mínima) es la de la respuesta a impulso.

Fase mínima:

Imagen

No fase mínima:

Imagen

Son respuesta impulsiva claramente diferentes. En la de fase mínima el pico del filtro es la primera muestra no nula (el prerringing previo es un efecto provocado por el algoritmo de upsampling a la hora de hacer el gráfico). Está es una de las características clave de un filtro de fase mínima.

En cuanto a su respuesta en frecuencia, vemos que son muy parecidas. Es decir, que las diferencias que se perciban entre aplicar uno u otro son diferencias de fase, que se traducen en la respuesta impulsiva:

Imagen

Ahora pasaremos a evaluar la predicción que DRC hace de la ecualización calculado. En el taller no se hizo medida de cada caja ecualizada, solo se hicieron pruebas subjetivas de escucha conmutando entre sonido ecualizado y sonido sin ecualizar, ajustados los niveles a oido para hacerlos parejos. Es la única forma de ajustarlos porque sonar suenan claramente distintos: aquí no hay cabida a una prueba ciega. Se trata de eliminar más o menos el sesgo-loudness.

Seguimos.
Avatar de Usuario
luisggarcia
Mensajes: 802
Registrado: Vie 16 Jul 2004 , 9:28

Mensaje por luisggarcia »

Con las puebas DRC que he hecho, me ha salido un filtro bastante aceptable.

Imagen

En rojo es la medida del altavoz en el punto de escucha. Y en verde el filtro calculado.
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

La última etapa del cálculo con DRC es "la predicción": # TC: Test convolution stage.

En esta etapa se hace la convolución del impulso medido (la señal de entrada al programa) con el filtro generado (rps.pcm). El resultado es la predicción de la respuesta impulsiva que se obtendría si se aplicara este filtro. De la predicción a la medida final (en el taller no se efectuo medida del sistema corregido) puede haber +-1 dB de diferencia en el espectro en frecuencia.
La configuración en esta etapa (la última) es:

# TC: Test convolution stage
TCNormFactor = 1.0
TCNormType = M
TCOutFile = rtc.pcm
TCOutFileType = F


Lo importante de la predicción es su uso para entender si el filtro generado responde a las expectativas o no. El resultado final, a mi modo de ver, sigue siendo mejor evaluarlo a oido.

Comparativa del espectro en frecuencia (en rojo sin filtrar y en azul con el efecto del filtro incorporado):

Imagen

Ambas gráficas representan el mismo espectro (canal derecho) siendo la de arriba la curva sin suavizar y estando la de abajo suavizada aplicando ventanas de tiempo.

La primera observación es que el filtro calculado por DRC, para este taller, no trata de obtener una respuesta puramente plana. La estructura resonante de la sala persiste, aunque está acotada en una banda de nivel bastante más reducida. La segunda es que las cancelaciones están casi intactas, o incluso ligeramente atenuadas donde ha sido necesario.
En cambio, las caidas sonoras entre 100 y 200 Hz y entre 700 y 900 Hz han sido equilibradas.

En cuanto a los aficionados a la respuesta impulsiva "apretada" la predicción sería esta:

Sin DRC:
Imagen

Con DRC:
Imagen

Aparentemente, el filtro obtenido "afila" el perfil impulsivo de la caja, situando juntas las respuestas impulsivas de tweeter y al woofer.

También resultan llamativas las gráficas de las curvas ETC:

Sin DRC:

Imagen

Con DRC:

Imagen

Observando las curvas en dB, vemos que la acústica de la sala no ha cambiado, pero que al ser más marcado el impulso inicial de los altavoces, el efecto de la predicción sería que el campo resonante estaría más por debajo del sonido directo tras aplicar DRC que antes de aplicarlo.
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

Los "waterfalls" también son indicativos:

Sin DRC (solo hasta 1 KHz):

Imagen

Predicción con DRC:

Imagen

La constante de normalización no es la misma para los dos casos, sino que ambos gráficos se han normalizado de forma que el máximo esté a 0 dB-FS.

Otra vez podemos comprobar que, en este caso del taller con ATC SCM 12, la acustica de la sala no ha cambiado de comportamiento, y sigue resonando en graves. Pero aplicando el filtro obtenido, DRC predice que la respuesta directa de las ATC en los primeros milisegundos va a ser de espectro bastante más homogeneo.
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

Una vez obtenido el filtro para cada canal (archivos rps.pcm) ¿Cómo se introducen en el sistema audio?

Pues bien, al ser filtros FIR, la técnica para incorporarlos a la cadena de sonido es por convolución:

http://es.wikipedia.org/wiki/Convoluci%C3%B3n

Por lo tanto necesitamos de algún software que aplique sobre la señal musical digital el filtrado deseado mediante la citada convolución. Y que lo haga lo suficientemente rápido como para entregar la señal musical ya procesada al ritmo que marca su frecuencia de muestreo. Se trata de aplicar convolución en "tiempo real" sobre pedazos de música.
Para ello necesitamos de una buena combinación de dos aspectos: capacidad de proceso suficiente y una óptima implementación del algoritmo de convolución en el programa utilizado.

En el taller de MG-IV se empleó Brutefir:

http://www.ludd.luth.se/~torger/brutefir.html

Es una aplicación que se ejecuta sobre linux, en modo consola y que se configura a partir de la preparación de un fichero de texto. El empleado para las ATC SCM fué el siguiente:
# Basic settings
float_bits: 32;
sampling_rate: 44100;
filter_length: 4096,16;
overflow_warnings: true;
show_progress: false;
max_dither_table_size: 0;
modules_path: "/home/raul";
monitor_rate: false;
powersave: true;
allow_poll_mode: true;
lock_memory: true;
debug: false;
convolver_config: "/home/raul/.brutefir_config";

logic: "cli" { port: 3000; };

# Left channel filter coefficients
coeff 0 {
filename: "dirac pulse";
format: "FLOAT_LE";
blocks: 16;
shared_mem: true;
};

coeff "izq" {
filename: "/home/raul/acustica/atc-scm-12/izquierdo/drc/rps.pcm";
format: "FLOAT_LE";
attenuation: 0.0;
blocks: 16;
shared_mem: false;
};

# Right channel filter coefficients
coeff "der" {
filename: "/home/raul/acustica/atc-scm-12/derecho/drc/rps.pcm";
format: "FLOAT_LE";
attenuation: 0.0;
blocks: 16;
shared_mem: false;
};

# input module
input "izq_i", "der_i" {
device: "jack" { };
sample: "FLOAT_LE";
channels: 2/0,1;
};

# output module
output "izq_o_1", "der_o_1", "izq_o_2", "der_o_2" {
device: "jack" { };
sample: "FLOAT_LE";
channels: 4/0,1,2,3;
};

# Left channel filtering definition
filter "izq_filter_1" {
from_inputs: "izq_i"/0.0;
to_outputs: "izq_o_1"/0.0/-1.0;
process: 0;
coeff: "izq";
delay: 0;
};

# Right channel filtering definition
filter "der_filter_1" {
from_inputs: "der_i"/0.0;
to_outputs: "der_o_1"/0.0/-1.0;
process: 0;
coeff: "der";
delay: 0;
};

# Left channel filtering definition
filter "izq_filter_2" {
from_inputs: "izq_i"/0.0;
to_outputs: "izq_o_2"/5.0;
process: 0;
coeff: 0;
delay: 0;
};

# Right channel filtering definition
filter "der_filter_2" {
from_inputs: "der_i"/0.0;
to_outputs: "der_o_2"/5.0;
process: 0;
coeff: 0;
delay: 0;
};
El sistema aplicado incorpora tres filtros: los dos obtenidos por DRC para cada canal y uno que es una delta de dirac pura de la misma longitud que los filtros rps.pcm.

De esta forma los dos canales de entrada ( "izq_i" y "der_i") se desdoblan en cuatro en salida ("izq_filter_1", "der_filter_1", "izq_filter_2" y "der_filter_2"). Sobre el grupo de salidas 2 se aplica la delta de dirac de forma que obtenemos la señal sin ecualizar retardada un tiempo igual a la longitud de los filtros, 65536 muestras = 1.486 segundos. Queda (más o menos) alineada con el grupo de salidas 1, donde tenemos la señal ecualizada por los archivos rps.pcm de cada canal.

De esta forma se puede efectuar una prueba de conmutación entre la señal ecualizada y sin ecualizar para comparar, sonando prácticamente sincronizadas.

En esta configuración, brutefir espera encontrar al gestor de audio jackd funcionando, puesto que los canales de I/O van configurados sobre este sistema de audio para linux. Luego estos canales tienen que ser enlazados con la tarjeta de sonido o software reproductor de música.
Avatar de Usuario
luisggarcia
Mensajes: 802
Registrado: Vie 16 Jul 2004 , 9:28

Mensaje por luisggarcia »

Me interesaría mucho ver la respuesta en frecuencia lo más detallada del filtro empleado en el taller.

Para comparar con las que me salen a mi para ver si lo hago bien o puedo mejorarlo.

¿La gráfica de respuesta corregida que has puesto es teórica al aplicar el filtro o medida?
Avatar de Usuario
wynton
Admin
Mensajes: 3065
Registrado: Vie 26 Nov 2004 , 9:05
Ubicación: Madrid

Mensaje por wynton »

luisggarcia escribió:Me interesaría mucho ver la respuesta en frecuencia lo más detallada del filtro empleado en el taller.
No te entiendo muy bien con lo del detalle. La gráfica del espectro del filtro aplicado (para el canal derecho) es esta (curva roja):

Imagen

De todas formas, si quieres el propio archivo rps.pcm para que lo analices te lo envio por privado. O incluso la medida del impulso origen de los cálculos.
luisggarcia escribió: ¿La gráfica de respuesta corregida que has puesto es teórica al aplicar el filtro o medida?
Teórica.
Responder