Newsgroup: it.hobby.hi-fi
Titolo: La difficile arte della convoluzione, seconda puntata

Ciao a tutti,
dato che ho fatto qualche altro esperimentino con le tecniche digitali
di correzione dell'acustica ambientale volevo rendervi partecipi degli
sviluppi, anche per sapere se ci sono idee per andare oltre. Come
avevo accennato nell'altro post, per cercare di eliminare alcuni
artefatti che si vengono a creare con l"inversione" diretta della
risposta all'impulso del sistema ambiente-diffusori, ho tentato di
pretrattare l'impulso finestrandolo a bande con finestre via via
ridotte all'aumentare della frequenza. 
	Il risultato è un programmino (Linux of course, ma penso che
portarlo in ambiente Windows non dovrebbe essere difficile se qualcuno
trova una classe "Complex" che possa sostituire quella pesantemente
bacata fornita di serie insieme al Visual C++) che utilizza un
"perfect reconstruction filterbank" basato su filtri passabanda FIR
finestrati opportunamente. Su ognuna delle bande in cui viene diviso
l'impulso viene applicata una finestratura che decresce
esponenzialmente (in rapporto al numero della banda) con la frequenza,
con in più un parametro che permette di impostare la pendenza di tale
riduzione (tutte le finestrature sono state realizzate con la finestra
di Blackman, ma un po' di prove mi hanno convinto che il tipo di
finestra utilizzato non è così fondamentale, perlomeno con finestre
"umane"). Di base (parametro pari a 1) ad ogni raddoppio della
frequenza corrisponde un dimezzamento della dimensione della finestra
applicata alla risposta filtrata. Per valori del parametro inferiori a
1 la riduzione è un po' più lenta e per valori superiori un po' più
veloce. Il filtro inverso viene poi calcolato tramite il classico
metodo di Mourjopoulos (minimi quadrati, che comporta la soluzione di
una matrice Toeplitz) per il quale ho trovato un'attrezzino in rete,
ma che può essere anche implementato a parte visto che ci sono ottime
librerie C che effettuano la soluzione di sistemi lineari basati
derivanti da matrici Toeplitz.
	Per la cronaca i risultati migliori li ho ottenuti usando una
filtratura basata sui  primi 600 ms della risposta all'impulso, con
filtri FIR da 65536 coefficienti, bande a 1/4 di ottava e parametro di
finestratura pari a 1.05. In totale circa 15 minuti di elaborazione su
un Pentium II 233 Mhz, quasi tutti spesi per la convoluzione tra
filtri FIR e risposta all'impulso (l'fft che ho a disposizione ha
buone prestazioni ma non è una super scheggia, usando una routine fft
"con gli attributi" si può fare molto meglio, soprattutto nell'ottica
di una correzione in tempo reale).
	In questo modo le cose migliorano nettamente, si può
controllare meglio cosa e come compensare, ma malgrado ciò ancora non
ci siamo, rimangono degli artefatti piuttosto fastidiosi dovuti
fondamentalemte al pre-ringing del filtro compensatore e allo
scollamento tra parte corretta (i primi 10-20 millisecondi) e parte
riverberata successiva, che non essendo corretta segue l'acustica
della sala d'ascolto e non quella della sala in cui è avvenuta la
registrazione. In compenso la gamma bassa non è più esaltata e diventa
terribilmente precisa, roba da favola.
	Per migliorare ancora stavo pensando di abbandonare l'idea di
pretrattare la risposta all'impulso per passare a lavorare
direttamente nel dominio della frequenza, spezzando opportunamente la
compensazione nelle varie bande e compensandole separatemente con
filtri di lunghezza calibrata, di modo da poter controllare
risoluzione e intensità della compensazione sia nel dominio nel tempo
che nel dominio della frequenza. In questo modo si dovrebbero poter
introdurre anche considerazioni di carattere psicoacustico (ogni
consiglio in questo senso è benvenuto) in modo da poter concentrare la
compensazione la dove il nostro sistema uditivo è più sensibile.
	Naturalmente idee e pareri in merito sono molto bene accetti.
Mi era venuta anche la mezza idea di usare le Wavelet invece che la
trasformata di Fourier (come più o meno implicitamente avviene nelle
elaborazioni che ho attuato finora), ma questo è un settore in cui le
mie conoscenze sono piuttosto limitate per cui non so bene come agire.
In compenso ho scoperto che su Internet ci sono *ottime* librerie C
assolutamente gratuite (LiftPack, Waili) che permettono di fare
l'analisi tramite Wavelet. Se qualcuno sa darmi qualche dritta su come
potrebbero essere utilizzate... (sempre che abbia senso utilizzarle).
Saluti,
P.S. Per chi mi aveva contattato in e-mail privata: chiedo scusa se
non ho ancora risposto. Ho poco tempo da dedicare alla cosa per cui lo
sfrutto al 100% per ottenere il risultato. Spero con questo post di
aver dato una risposta generalizzata. In ogni caso se arriverò a
qualcosa di interessante metterò a disposizione tutto il software
realizzato a chiunque ne faccia richiesta. Magari il buon Nicola me lo
ospiterà sul suo sito tra una tromba e una valvola. ;)
--
	Denis Sbragion
	InfoTecna
	Tel, Fax: 
+39 039 2324054
	URL: 
http://www.infotecna.it

--
Non so cosa sia.. ho letto solo il mio nome e la richiesta di
disponibilità.. se riesci a  mandarmi questa cosa entro questa sera.. OK lo
faccio prima di partire (domani alle 18 circa), altrimenti..devi attendere
che mi "ambienti" a Torino.,..
Ciao
Nicola
Home page:
www.freeweb.org/musica/valvole/index.htm
Internet Digital Magazine:
www.hi-figuide.com


 ospiterà sul suo sito tra una tromba e una valvola. ;)
Se si arrivasse veramente a qualcosa di interessante (mah, mi sembra siamo a
buon punto!) si potrebbe pensare anche a un PLC programmato e farsi una
bella centralina indipendente da collegare al "venerato" senza doversi
preparare prima col computer/masterizzatore le tracce audio .... è una
cattiva idea ?
P.s. Forse problemi di potenza di calcolo ?
--
Ciao
A presto
-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-
-'-'-  Jaco the Relentless  -'-'-
-->  
eec....@libero.it
   <--

P.s. Forse problemi di potenza di calcolo ?
No. Ho fatto un po' di stime. Con un Pentium a 200 Mhz, un algoritmo
fft "con gli attributi" (
www.fftw.org
 per un esempio completamente
gratuito), un algoritmo di convoluzione del tipo overlap-save e un po'
di cura nel realizzare il tutto si dovrebbe poter arrivare a filtri da
5000-10000 coefficienti (stereo, of course), con elaborazione
effettuata in floating point (niente problemi di precisione),
dithering per la conversione a 16 bit, etc etc. Tanto per darti un
idea i sistemi commerciali di solito viaggiano con filtri da 1000-2500
coefficienti e comunque credo che usare filtri con più di 4000/5000
coefficienti sia sostanzialmente inutile in quanto finisci solo per
tentare di correggere componenti che non sono correggibili per limiti
fisici intriniseci. 
	Ti terrò aggiornato. Se la cosa dovesse vedere la luce un po'
di aiuto, soprattutto con la parte di interfaccia verso le schede
audio che non ho mai avuto l'occasione di utilizzare, potrebbe
velocizzare di molto i tempi di sviluppo.
Saluti,
P.S. Ti intendi di Linux?
--


 P.S. Ti intendi di Linux?
No, sorry....mai usato...
Il mio supporto, almeno morale, ce l'hai !
Continua così che vai forte!
P.s. Forse è troppo presto per una domanda del genere, ma l'algoritmo
considera anche la posizione dei diffusori nell'ambiente ?


 relativamente basso....vediamo dove possiamo arrivare...
Spero che quella dei PLC sia una battuta !
A parte il fatto che se fai il conto della potenza di calcolo il prezzo e'
ENORME in quanto un SIEMENS S7/400 (giusto per fare esempio di plc "moderno
e veloce"-siemens docet) va lento come la morte paragonato ad un pc entry
level e costa diverse volte tanto.
E poi come lo programmi l'algoritmo, in AWL o in logica a contatti ? (gia'
me lo vedo in AWL :^)
Ti ci vuole uno (o piu'...) dsp con le palle per cercare di fare il lavoro
in tempo semi-reale e un bel pochino di memoria (costosissima perche'
veloce) che faccia da mini-cache temporale.
E comunque il codice dei dsp non e' che sia molto ottimizzato (vengono
utilizzati di solito per fare lavoretti piccoli e veloci) e data la poca
memoria (non  MB ma KB) a disposizione devi fare un bel po' di salti mortali
con il codice per evitare di occupare memoria (esempio nel sistema di
sviluppo DSP Texas (un C/C++)  tutte le variabili vengono allineate e tenute
a multipli di 4 bytes per un accesso in memoria diretto). L'unica scelta
"low-cost" penso sia quella di avere una evaluation board di un DSP velocino
programmabile in linguaggio umano (C++) magari da inserire nel PC (tipo
scheda PCI o ISA) quindi debuggabile.
Probabilmente la cosa migliore potrebbe essere l'accoppiata PC (ambiente di
sviluppo facile, costo della memoria irrisorio)/DSP con uno scambio dati su
di un bus veloce (che so, SPI o qualcosa del genere).
Ovvio che se ti tieni un bel pc SENZA WINDOWS magari riesci a fare anche
qualcosa anche di carino ma dubito che si riesca a competere con un DSP (ci
sono degli ordini di grandezza di tempo di elaborazione di differenza).
Ciao
P.S.
Un PLC lo vedrei bene nell'home theater per accendere e spegnere luci e
abbassare lo schermo per il retroproiettore ...
Alberto Fornito
a...@3di.it

 abbassare lo schermo per il retroproiettore ...
Infatti è l'unico uso a cui è correlabile nell'audio, oltre a farti le
sequenze di accensione quando hai tanti finali...
Ciao
Gianpiero


Sì, era *quasi* una battuta....è che posso recuperarne un bel po' (almeno 4)
da una azienda fallita....


 Beh ... marca e modello .. magari li ricicliamo ;^)
I vituperati Siemens....però vi faccio sapere quando li avrò tra le
mani....perchè è noto che quando una azienda fallisce (purtoppo), ci sono
sempre dei ruffiani *papponi* o che dir si voglia che prendono tutto....
Hanno già venduto una Caterpillar D7 a 30 milioni...quando nuova costa un
bel po' di più !


 Se no ti salta il contatore? ;-)
Non sai che il nostro caro Gianpiero ha intorno ai 5 cavalli di
amplificazione ?


 sequenze di accensione quando hai tanti finali...
Se no ti salta il contatore? ;-)
Ciao!
Alberto Fornito
a...@3di.it

 da una azienda fallita....
Beh ... marca e modello .. magari li ricicliamo ;^)
Ciao
Alberto Fornito
a...@3di.it

 Se no ti salta il contatore? ;-)
YESSSS!
Ciao
Gianpiero

sono degli ordini di grandezza di tempo di elaborazione di differenza).
senza Windows quasi certamente, è un po' dura far stare Windows su un
floppy. Il tutto andrebbe fatto o sotto DOS, che comporta tutta
un'altra serie di casini, oppure sotto Linux, che sarebbe la soluzione
ideale se si trova una scheda audio con le caratteristiche che ti ho
indicato e che sia supportata.
Saluti,


 indicato e che sia supportata.
Ma avete mai pensato ai bootable cd ? Del resto serve solo all'avvio...però
il problema è per i dati temporanei che Winzozz inesorabilmente scrive ....
si potrebbe pensare ai magneto ottici, ma costano una fortuna !
P.s. Gli HD Samsung della serie che ho io UDMA/33 sono praticamente zitti! E
poi il problema del rumore si potrebbe risolvere tenendo il pc lontano
dall'Hi-Fi o in un cabinet no ? Secondo me l'unico problema è non poter
tenere windows su un floppy.


 tenere windows su un floppy.
Veramente i samsung ultimi (UDMA66) da 8.4 e 13GB non sono campioni di
silenziosita' ... prova gli ultimi IBM, sembrano dei ramdisk!
Ciao
Alberto Fornito
a...@3di.it
P.S.
Allora che modelli sono i PLC ? uno te lo acquisterei io cosi' mi
impratichisco di S7 :-)

La SB Live è l'unica....si trova ad *abbastanza* poco...
non vorrei sbagliarmi ma mi risulta che abbia solo l'uscita SPDIF per
di più bacata. Conferme?


 di piů bacata. Conferme?
Non saprei....la mia SB AWE 64 Gold ha una uscita digitale spdif ma non l'ho
mai usata....la Live Platinum ha ingressi digitali anche ottici


mai usata....la Live Platinum ha ingressi digitali anche ottici
questa č una buona notizia. Comunque nel frattempo ho trovato quello
che potrebbe servire: 
www.zefiro.com
. C'č anche un driver Linux
disponibile. Non so bene quanto costi.
