FIRtro en Raspberry 3

Previos, filtros activos, DACs, CDs, transportes, vinilo, tratamiento de salas,...
RR
Mensajes: 3086
Registrado: Lun Oct 31, 2005 12:40 pm

Re: FIRtro en Raspberry 3

Mensaje por RR » Mié Feb 14, 2018 10:53 am

Hay muchas maneras de convertir wav a pcm. Pcm es un raw (no hay cabeceras, solo datos en bruto) en formato float32. Por ejemplo, con sox se puede hacer, mira su manual.

O directamente con trimwav2pcm. Ahora veo por qué lo quité, está incompleta, la longitud del impulso está cableada en el código, a 2^15 muestras, o sea, 32k. No está mal y se puede dejar por defecto, o cambiarla en el script. Es una chapuza, pero funciona, en un ratillo lo cambio.

trimwav2pcm(filename)

Esta función hace una ventana para mejorar la transición de banda del impulso, si el impulso que se convierte (wav) ya estaba enventanado es redundante.
Avatar de Usuario
Rafax
Mensajes: 1298
Registrado: Mié May 03, 2006 7:29 pm
Ubicación: Madrid

Re: FIRtro en Raspberry 3

Mensaje por Rafax » Jue Feb 15, 2018 9:23 am

Las opciones de resampling de audio/config solo aplican para escenarios especiales, es un invento para meter señales al FIRtro a través de tarjetas de sonido "externas" a Jack. Es decir si solo se usa una tarjeta sobre la que corre jack, estas opciones no se usan y no debería influir en las prestaciones de procesado :roll:

En concreto las opciones de resampling son para ajustar los programas alsa_in/alsa_out o alternativamente los equivalentes zita-a2j/zita-j2a. Si no has declarado external_cards en audio/config estos programas no tiene que estar corriendo.

Sobre el tema convertir el .wav de REW en un .pcm, recuerdo haber usado en su día el script trimwav2pcm con éxito, pero ahora me parece que no da resultado. Parece ser que la IR .wav que exporta REW tiene el pico desplazo 44100 muestras, un número curioso. Entonces al recortar desde el principio solo 32K muestras, el resultado es un chorizo de ceros. No estoy seguro de esto pero es lo que he podido ver :|
Avatar de Usuario
Rafax
Mensajes: 1298
Registrado: Mié May 03, 2006 7:29 pm
Ubicación: Madrid

Re: FIRtro en Raspberry 3

Mensaje por Rafax » Jue Feb 15, 2018 10:25 am

Hola, los programas que conozco son DSD y REW.

Creo que lo de la conversión del wav de REW a un pcm para Brutefir debe tener arreglo...

El uso de DSD básicamente consiste en tomar una medida IR en punto de escucha, por ejemplo con ARTA "L.pir". Luego procesarla en Octave con el script de DSD "RRreq". Se necesita preparar un archivo "L.req" de parametrización del alcance de la EQ que aplicará el script, ahí esta el meollo.

Tb tienes la opción de exportar los paramétricos de REW en modo texto para meterlos en el modulo 'peq' de FIRtro. La ventaja es que gasta mucha menos CPU que una etapa de convolución FIR (un pcm), eso puede ser interesante para la RPI.
Avatar de Usuario
Rafax
Mensajes: 1298
Registrado: Mié May 03, 2006 7:29 pm
Ubicación: Madrid

Re: FIRtro en Raspberry 3

Mensaje por Rafax » Jue Feb 15, 2018 10:49 am

Se ha añadido en la Wiki una primera ayuda para el uso de DSD para obtener FIRs .pcm para DRC, faltaría pulirlo pero sirva de base

https://github.com/AudioHumLab/FIRtro/w ... correction
Avatar de Usuario
Rafax
Mensajes: 1298
Registrado: Mié May 03, 2006 7:29 pm
Ubicación: Madrid

Re: FIRtro en Raspberry 3

Mensaje por Rafax » Jue Feb 15, 2018 7:18 pm

rarranzb escribió:me ha venido muy bien la nueva guía para instalar Octave y DSD

Código: Seleccionar todo

brew cask install gfortran
Una pregunta, tuviste que instalar el compilador fortran en tu MacOS?. Es por dejar la guía con o sin eso. Gracias in advance
RR
Mensajes: 3086
Registrado: Lun Oct 31, 2005 12:40 pm

Re: FIRtro en Raspberry 3

Mensaje por RR » Jue Feb 15, 2018 8:32 pm

Rafax escribió:Sobre el tema convertir el .wav de REW en un .pcm, recuerdo haber usado en su día el script trimwav2pcm con éxito, pero ahora me parece que no da resultado. Parece ser que la IR .wav que exporta REW tiene el pico desplazo 44100 muestras, un número curioso. Entonces al recortar desde el principio solo 32K muestras, el resultado es un chorizo de ceros. No estoy seguro de esto pero es lo que he podido ver :|
Rafa, si REW genera ese retardo en el impulso será porque genera filtros de fase lineal... o que podrían serlo. Eso es un defecto de REW, a mi entender, porque los filtros de ecualización de sala deben ser de fase mínima. La sala, a poco que tenga una amortiguación normal, es decir, que no sea el water ;-) , genera una "deformación" de la respuesta de fase mínima.

Si ese es el problema de REW no creo que merezca la pena cambiar nada en el script, es REW el que debe generar buenos impulsos. Que sean justo 44100 muestras de retardo es inquietante :o Justo un segundo de retardo a la fs típica... No tiene ni pies ni cabeza, porque los filtros deben tener una longitud que sea potencia de 2 para ser eficientes en el cálculo (esa es una exigencia del algoritmo de la Transformada Rápida de Fourier, o FFT in inglis).

¿Podéis, tú o rarranzb, colgar un impulso de REW a ver qué pinta tiene?
Avatar de Usuario
Rafax
Mensajes: 1298
Registrado: Mié May 03, 2006 7:29 pm
Ubicación: Madrid

Re: FIRtro en Raspberry 3

Mensaje por Rafax » Jue Feb 15, 2018 9:31 pm

Hola, esta es la pinta que le veo:
$ sox --info drcREW.wav

Input File : 'drcREW.wav'
Channels : 1
Sample Rate : 44100
Precision : 16-bit
Duration : 00:00:02.97 = 131072 samples = 222.912 CDDA sectors
File Size : 262k
Bit Rate : 706k
Sample Encoding: 16-bit Signed Integer PCM

$ python
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 12:01:12)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> from scipy.io import wavfile
>>> from matplotlib import pyplot as plt
>>> fs, imp = wavfile.read("drcREW.wav")
>>> imp = imp.astype('float32') / 32768.0
>>> plt.plot(imp); plt.show()
[<matplotlib.lines.Line2D object at 0x10d076890>]
>>> exit()
$
Avatar de Usuario
Rafax
Mensajes: 1298
Registrado: Mié May 03, 2006 7:29 pm
Ubicación: Madrid

Re: FIRtro en Raspberry 3

Mensaje por Rafax » Jue Feb 15, 2018 11:05 pm

y el wav
Avatar de Usuario
Rafax
Mensajes: 1298
Registrado: Mié May 03, 2006 7:29 pm
Ubicación: Madrid

Re: FIRtro en Raspberry 3

Mensaje por Rafax » Vie Feb 16, 2018 8:08 am

Genial!
He buscado por la git de DSD las opciones de configuraciones de el archivo .req pero o no esta o no lo he sabido entender
es reciente, creo que lo comenté ayer, here you are:

DSD-para-DRC-digital-room-correction

Mecachis, algo tiene que tener tu unidad RPI para que con la nueva tarjeta i2C sigas teniendo cortes, en mis pruebas iba muy bien, incluso con una Cirrus usándola en full duplex.
la tarjeta de memoria creo recordar que no es clase 10.. igual por ahi vienen los tiros?
En teoría durante el "runtime" no se usa la tarjeta de memoria, pero es bien conocido que las RPIs son sensibles a las SD cards... una valor seguro es esta.

Y revisa que no tengas activado el swap del sistema. En las nuevas RPI se hace con un nuevo comando y servicio del systema dphys..nosequé o algo así
RR
Mensajes: 3086
Registrado: Lun Oct 31, 2005 12:40 pm

Re: FIRtro en Raspberry 3

Mensaje por RR » Jue Feb 22, 2018 4:43 pm

Rafax escribió:y el wav
Me lo logré bajar y ya no salen los adjuntos... Bueno.
El caso es que, en efecto, añade justo un segundo de ceros delante del impulso (?), a fs=44100, a lo que sigue un impulso de fase mínima de exactamente 2^17 muestras. Solo con quitar los ceros en audacity quedaría un impulso utilizable, porque brutefir recorta lo que exceda la longitud de impulso configurada, peor lo mejor es hacer una ventana, por la transición de la banda pasante que hablaba antes.

No tengo el REW instalado, me extraña mucho que parámetros como la longitud del impulso no sean configurables.
Avatar de Usuario
Rafax
Mensajes: 1298
Registrado: Mié May 03, 2006 7:29 pm
Ubicación: Madrid

Re: FIRtro en Raspberry 3

Mensaje por Rafax » Jue Feb 22, 2018 5:06 pm

El REW que tengo v5.18 solo deja ajustar la profundidad de bits y la sample rate, al exportar el IR de los filtros como wav. Yo creo que la longitud la saca a mayores más vale que sobre ....

Como hablamos, he preparado una utilidad que reconstruye por completo el wav en un pcm, eludiendo el desplazamiento del impulso del wav. Es una beta pero parece que va bien, la comparto:
REWwav2pcm.py

Una pregunta plis, ¿cómo podemos evaluar que el IR del wav, aunque con el pulso desplazado, es de fase mínima?
RR
Mensajes: 3086
Registrado: Lun Oct 31, 2005 12:40 pm

Re: FIRtro en Raspberry 3

Mensaje por RR » Jue Feb 22, 2018 5:26 pm

Rafax escribió:Una pregunta plis, ¿cómo podemos evaluar que el IR del wav, aunque con el pulso desplazado, es de fase mínima?
No es simétrico (sería de fase lineal). No hay nada antes (sería de fase mixta).
Son condiciones necesarias pero no suficientes, un filtro con pinta de fase mínima podría ser un pasa todo, p.ej. Al ser la traducción de los flltros de REW, que son de fase mínima, es una suposición que muy probablemente es verdad.

Para estar seguros del todo habría que obtener la gráfica del exceso de fase y ver que es nula o plana.