FIRtro en Raspberry 3
Re: FIRtro en Raspberry 3
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.
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.
Re: FIRtro en Raspberry 3
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
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

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

Re: FIRtro en Raspberry 3
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.
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.
Re: FIRtro en Raspberry 3
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
https://github.com/AudioHumLab/FIRtro/w ... correction
Re: FIRtro en Raspberry 3
rarranzb escribió:me ha venido muy bien la nueva guía para instalar Octave y DSD
Código: Seleccionar todo
brew cask install gfortran
Re: FIRtro en Raspberry 3
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 waterRafax 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

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

¿Podéis, tú o rarranzb, colgar un impulso de REW a ver qué pinta tiene?
Re: FIRtro en Raspberry 3
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()
$
Re: FIRtro en Raspberry 3
Genial!
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.
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í
es reciente, creo que lo comenté ayer, here you are: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
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.
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.la tarjeta de memoria creo recordar que no es clase 10.. igual por ahi vienen los tiros?
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í
Re: FIRtro en Raspberry 3
Me lo logré bajar y ya no salen los adjuntos... Bueno.Rafax escribió:y el wav
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.
Re: FIRtro en Raspberry 3
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?
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?
Re: FIRtro en Raspberry 3
No es simétrico (sería de fase lineal). No hay nada antes (sería de fase mixta).Rafax escribió:Una pregunta plis, ¿cómo podemos evaluar que el IR del wav, aunque con el pulso desplazado, es de fase mínima?
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.