Newsgroup: it.hobby.hi-fi
Titolo: La difficile arte della convoluzione, terza puntata (lungo)

Ciao a tutti,
volevo aggiornarvi sulla situazione dei miei piccoli esperimenti con
la correzione digitale dell'acustica ambientale. Innanzitutto ho
abbandonato l'idea di operare direttamente nel dominio della
frequenza. Si creano un sacco di problemi che complicano molto le
cose. Sicuramente si può fare, ma farlo effettivamente è tutto un
altro paio di maniche.
	Inoltre ho scoperto che l'idea di prefiltrare a bande, ossia
l'idea iniziale, non è affatto nuova e che esistono articoli AES in
proposito. Questo mi ha fatto pensare che quantomeno il metodo non sia
così scemo e mi ha convinto a proseguire sulla vecchia strada,
raffinando opportunamente la tecnica. Ho quindi preparato alcune
utility che permettano di operare seguendo tale strada fino ad
ottenere un filtro di correzione utilizzabile.
	La creazione di tale filtro si suddivide in tre fasi:
1) Finestratura a bande
2) Inversione tramite minimi quadrati
3) Postfiltratura
Per ognuna delle tre fasi ho creato un programmino ad hoc che effettua
l'operazione.
	La prima fase è quella che avevo già descritto in altro post
ed è sicuramente la più importante. Si parte dalla risposta
all'impulso in ambiente prendendone una parte sufficiente a
rappresentare adeguatamente la risposta in gamma bassa, tipicamente
tra i 150 ms, per chi è molto fortunato, e gli 800 ms, per il restante
99.9% degli audiofili. Un buon punto di partenza può essere da metà a
2/3 dell'RT60 in ambiente. Questo segnale viene suddiviso dal
programma in bande spaziate logaritmicamente tramite un "perfect
reconstruction filterbank". Il nome è in realta molto più pomposo
della tecnica utilizzata, che è relativamente semplice, anche se
computazionalmente costosa. 
	Su ognuna delle bande viene applicata una finestra con
lunghezza inversamente proporzionale alla frequenza, con "pendenza"
configurabile tramite un opportuno coefficiente. Le varie bande
vengono poi ricombinate in modo da ottenere una risposta all'impulso
che conservi buona parte dell'informazione di quella di partenza ma in
cui le componenti non correggibili siano state rimosse.
	Rispetto alla prima versione ho corretto alcui comportamenti
fastidiosi che rendevano il coefficiente che determina la pendenza
della finestratura dipendente dalla lunghezza del filtro utilizzato
per la suddivisione in bande. Questa correzione è molto utile in
quanto inizialmente si può cercare il valore più adatto di tale
coefficiente usando una risoluzione relativamente bassa, quindi con
filtri relativamente corti, di modo che l'operazione sia rapida.
Quando in fase definitiva si passa a risoluzioni superiori, con
suddivisione in bande più strette e quindi con filtri piuttosto
lunghi, si può avere la ragionevole certezza che il comportamento
finale sia simile a quello ottenuto in prima approssimazione.
	La seconda fase effettua l'inversione della risposta
all'impulso ottenuta dalla fase precedente. Se l'operazione di
preelaborazione è stata fatta in modo adeguato il filtro inverso non
presenta pre o post ringing troppo lunghi. Tali fenomeni sono visibili
anche ad occhio, sono udibilissimi a orecchio, e corrispondono alla
correzione di alcune di quelle componenti non correggibili a cui
accennavo in precedenza. Tale tentativo di correzione una volta in
ambiente non funziona in quanto richiede una coincidenza assoluta
(millimetri o anche meno) tra il punto in cui è stata fatta la misura
della risposta all'impulso e il punto in cui si ascolta. Questo è
chiaramente impossibile, se non altro per l'ingombro del nostro
testone :)
	L'assenza di fenomeni di ringing indica generalmente che si è
sulla strada giusta. In linea di principio si dovrebbe cercare di
compensare quanto più possibile della risposta iniziale, cercando
quindi di mantenere il coefficiente citato nella prima fase il più
possibile basso, evitando però la creazione di pre o post ringing. Il
compromensso va trovato per tentativi, perlomeno per come sono
configurati adesso i vari programmini.
	L'ultima fase sarebbe in linea di principio non necessaria, ma
lo diventa nel momento in cui si considera che il sistema di
inversione della seconda fase cerca di compensare *tutto*. Questo vuol
dire, per esempio, che il filtro compensatore cercherà di estendere la
risposta in frequenza fino a 0 Hz, e potete stare tranquilli che i
woofer dei vostri diffusori non saranno molto d'accordo. Lo stesso
vale per la risposta in gamma acuta, dove il filtro cercherà di
compensare anche quello che c'è oltre i 20 Khz, dove notoriamente non
c'è nulla in quanto viene tagliato dai filtri antialiasing usati sia
in registrazione che in riproduzione, ed anche da quelli usati per la
misura della risposta all'impulso. Il mantenimento della correzione in
gamma ultrasonica sarebbe quindi solo una spreco di risoluzione.
	Prima quindi di poter utilizzare il filtro è necessario
eliminare tali componenti con un'opportuna postfiltratura eseguita con
un filtro FIR a fase lineare. Il programma in realtà è molto più
flessibile è permette di impostare un risposta in frequenza
arbitraria. Questo vuol dire che, oltre ad eliminare le componenti
subsoniche e ultrasoniche, può essere utilizzato per ottenere una
risposta in frequenza a piacere, magari una di quelle che ho visto
consigliate qua e la su articoli, riviste e libri di acustica. Per
esempio lineare fino a 400Hz e poi calo di 1db/oct fino a 20 Khz,
proposta se non sbaglio dalla B&K, oppure lineare fino a 4 Khz e poi
3db/oct fino a 20 Khz, che ho sentito citare spesso anche se non so
che origini abbia. Comunque l'unico limite in questo caso è solo la
fantasia e la capacità del vostro sistema di "reggerla". Nel caso di
diffusori con woofer piccolini potrebbe anche essere utile tagliare o
attenuare una fetta della gamma bassa, per esempio sotto i 50 Hz, pena
il rischio di pericolosi sbattimenti a fine corsa degli stessi nel
tentativo di riprodurre frequenze che non gli competono.
	 Infine è altamente consigliabile valutare la presenza di
fenomeni di ringing solo *dopo* aver effettuato la postfiltratura. In
gamma ultrasonica tali fenomeni sono sempre presenti, anche se non
udibili, in quanto la correzione da apportare è quasi sempre molto
ampia e non corrispondente alla realtà per i più disparati motivi, in
primis l'effetto dei filtri antialiasing del sistema di misura. Questo
tende a nascondere, perlomeno alla vista, il ringing vero, che in
genere si trova in altre zone dello spettro ed è nettamente più
importante ed udibile di quello in gamma ultrasonica.
	Dopo questa lunga descrizione vi la mia esperienza diretta. I
risultati migliori li ho ottenuti considerando i primi 600ms della
risposta all'impulso (circa 25000 campioni a 44.1 Khz), suddividendo a
terzi di ottava con filtri da 16384 coefficienti e usando un
coefficiente di finestratura pari a 1.25. Questo corrisponde a
prendere circa i primi 150 campioni della risposta all'impulso in
gamma media (intorno ai 1300 Hz). Al di sotto di tale limite
cominciavano a comparire, in modo molto netto,  quei fenomeni di
ringing citati in precedenza, centrati proprio intorno ai 1300 Hz. Il
filtro preelaborato è stato troncato in uscita a 8192 campioni tramite
opportuna finestratura. La lunghezza da utilizzare per il filtro va
decisa in base alla risoluzione che si vuole ottenere in gamma bassa.
La risoluzione di un filtro FIR viene di solito presa pari a:
	R = 0.89 * (Fs / N)
dove Fs è la frequenza di compionamento e N è il numero dei
coefficienti del filtro. Nel caso di 8192 campioni si ottiene una
risoluzione di circa 4.8 Hz. Già con 4096 campioni si può ottenere una
risoluzione adeguata per la stragrande maggioranza delle situazioni,
ma volendo esagerare si può arrivare anche a 16384 campioni.
	La seconda e terza fase sono state applicate alla risposta
all'impulso ottenuta, eliminando solo le componenti subsoniche e
ultrasoniche.
	L'uso di filtri che abbiano lunghezza che sia una potenza di
due è legato alla successiva procedura di convoluzione. Tale procedura
è basata sulla FFT, che offre le sue massime prestazioni quando la
lunghezza del segnale da trasformare è una potenza di due. Quando il
filtro non ha lunghezza che sia una potenza di due, per mantenere le
massime prestazioni vengono aggiunti degli zeri in coda fino a portare
la unghezza a una potenza di due. Questo vuol dire che un filtro da
4097 coefficienti comporta lo stesso costo computazionale di uno da
8192, ma ha ovviamente una risoluzione che è circa la metà e non ha
quindi senso usarlo. Salvo rarissimi casi in cui si vuole per forza
una certa risoluzione è quindi molto opportuno rimanere su potenze di
due.
	Il filtro ottenuto è stato usato come al solito per
precompensare alcuni brani che sono stati poi masterizzati di modo da
poter valutare l'effetto finale. Vi ho tenuto sulle spine fin'ora ma
posso dirvi che i risultati sono veramente notevoli. Gli effetti
collaterali che avevo citato nei precedenti post sono completamente
spariti, la riduzione della correzione ha anche cancellato la
scollatura tra la parte della risposta corretta e la risposta
rimanente dell'ambiente, la gamma bassa rimane da favola, la
neutralità generale è impressionante, l'immagine è quanto di meglio si
possa pretendere dal sistema stereofonico, i diffusori praticamente
spariscono. Avendo ridotto la correzione rimane parte dell'acustica
della sala d'ascolto, ma comunque in modo molto ridotto, la sensazione
di sentire l'acustica originale, quella della registrazione, rimane,
anche se un po' attenuata. Riascoltare i brani non corretti appare
decisamente riduttivo.
	Gli aspetti negativi sono pochi. Quello più evidente è la
spietatezza con cui il sistema mette in evidenza le pessime
registrazioni. I brani registrati bene sono al limite della
perfezione, ma molti brani sono equalizzati tenendo conto del fatto
che nei normali ambienti di ascolto i bassi sono quasi sempre esaltati
e gli acuti attenuati. Un volta infilati dentro in un sistema che è
quasi perfettamente lineare si ottiene un risultato molto sparato in
faccia, pulitissimo, ma comunque fastidioso. Di questo bisognerà
tenere conto nel momento in cui si realizza un sistema di correzione
real-time. Bisogna prevedere la possibilità di selezionare almeno due
curve di riposta in frequenza, una perfettamente lineare e una un po'
più eufonica, più o meno come quelle citate in precedenza, da usare
con i brani registrati meno bene.
	Un altro aspetto negativo è la riduzione della dinamica
generale del sistema. Buona parte della potenza disponibile va
impegnata a correggere i difetti di ambiente e diffusori e quindi ci
si può ritirovare molto facilmente in clipping piuttosto netto a
volumi di ascolto che, complice la pulizia generale, sembrano tutto
sommato relativamente bassi. Da questo punto vista mi sono convinto
che queste tecniche, se avranno successo commerciale, cambieranno
radicalmente il modo di progettare i diffusori. Parametri come la
linearità della risposta in frequenza e in fase perdono molta della
loro importanza, tanto si possono compensare quasi alla perfezione, il
tutto a favore della uniformità della dispersione (che permette di
ottenere buona corrispondenza tra suono diretto e suono riverberato,
dato che quest'ultimo non può essere corretto), della bassa
distorsione, della dinamica generale e della capacità di digerire
senza problemi potenze molto elevate (Majandi si ritrova il lavoro
assicurato anche per i prossimi 25 anni ;).
	Ho fatto qualche prova anche per quel che riguarda la
correzione in real-time. Usando l'algoritmo di FFT "con gli attributi"
che ho citato in altro post (
www.fftw.org
 per i dettagli) ho messo in
piedi un algoritmo di convoluzione basato sul metodo overlap-save, tra
l'altro senza neanche ottimizzare più di tanto. Ho simulato tutte le
fasi che sarebbero presenti nella situazione reale (conversione 16
bit-> float, convoluzione floating point, riconversione float->16bit)
con la sola esclusione del dithering finale, che non è certo una
operazione pesante se fatta in modo intelligente. Sul nostro server
(Pentium II 233 Mhz) con un filtro da 8192 campioni ho ottenuto una
convoluzione a circa 450 Khz (per un solo canale). Questo vuol dire
che anche considerando che un po' di potenza di calcolo vada persa per
l'interfacciamento con la scheda audio, le bufferizzazioni, il
dithering e quant'altro, ce n'è d'avanzo per gestire due canali a 44.1
Khz con filtri anche ben più lunghi di 8192 coefficienti e che per
4096 coefficienti ci si sta dentro tranquillamente anche con un
vecchio Pentium a 200 Mhz. Usando tecniche ancora più sofisticate,
tipo multirate, di cui però conosco solo le basi e che non sono certo
in grado di implementare, c'è il rischio di dover ritirare fuori dalla
soffitta qualche vecchio 486, altrimenti si sprecherebbe potenza di
calcolo. Anche le esigenze in termini di memoria sono abbastanza
limitate, qualche mb, quasi tutti impegnati nei vari buffer floating
point, e anche qui non sono certo andato al risparmio. Anche
infilandoci il sistema operativo una macchina con 8Mb di ram è più che
sufficiente e con 16 si potrebbe giocare mentre si ascolta la musica.
	Sarebbe inoltre molto utile avere a disposizione una
conversione DA post correzione a 24 bit. La correzione comporta quasi
sempre l'esaltazione di certe bande, in particolare quella acuta e in
parte anche di quella bassa. Per evitare di clippare digitalmente si è
costretti a riscalare il filtro in modo tale che il punto di maggiore
esaltazione corrisponda al guadagno unitario e la rimanente correzione
sia solo attenuazione (questo si ottiene facendo in modo che il filtro
abbia norma euclidea unitaria). Questa attenuazione significa perdita
di risoluzione, che, viste le considerazioni precedenti, finisce in
genere proprio in gamma media, ossia proprio dove può risultare più
fastidiosa. Il dithering in fase di conversione float->16bit subito
dopo la convoluzione è quindi assolutamente necessario se si usa un DA
a 16 bit, e solo l'utilizzo di una conversione DA con risoluzione più
elevata (20, o meglio 24 bit) può garantire il mantenimento della
piena risoluzione su tutto lo spettro udibile.
	Questo è tutto. Commenti, suggerimenti, correzioni (spero di
non aver fatto castronerie, erano anni che non lavoravo più seriamente
su queste cose) etc etc sono ampiamente benvenute. Le possibili
evoluzioni del sistema sono moltissime. La più banale che mi venga in
mente consiste nell'introduzione di considerazioni psicoacustiche, al
posto della semplice legge matematica, nella finestratura a bande.
Magari si potrebbe tentare la realizzazione di un sistema che cerchi
di ottimizzare automaticamente la curva di finestratura utilizzata
seguendo sia vincoli psicoacustici sia vincoli fisici legati al fatto
che più di tanto non è possibile correggere. I vincoli fisici sono
abbastanza semplici da determinare in quanto legati alle lunghezze
d'onda coinvolte (a 20Khz la lunghezza d'onda è 1.7 cm, basta
spostarsi di pochi mm e cambia tutto, quindi inutile tentare di
correggere qualunque cosa che non sia il suono diretto, a 20 Hz siamo
a 17 m, qui si può correggere praticamente tutto anche su un area
piuttosto ampia, l'unico vincolo è la risoluzione, e quindi la
lunghezza, del filtro). Dei vincoli psicoacustici invece so ben poco e
non ho la minima idea di come si potrebbe agire.
Saluti,
--
	Denis Sbragion
	InfoTecna
	Tel, Fax: 
+39 039 2324054
	URL: 
http://www.infotecna.it

 su queste cose) etc etc sono ampiamente benvenute. 
Una domanda: il risultato quanto e` dipendente dalla posizione di
ascolto? (e dalle condizioni di misura della risposta all'impulso?)
Un paio di pensate in liberta`, giusto perche' ho la tastiera sotto le
dita. Wavlet e trasformata di Hilbert, sono due nomi che fanno scena.
Provare a indagare anche in quella direzione? La settimana scorsa ho
preso in biblioteca i primi articoli sull'uso della trasfo di Hilbert in
campo audio, ma non li ho ancora letti. 
Ti faro` sapere.
Ciao, complimenti per il lavoro.
Franco


 campo audio, ma non li ho ancora letti.
Ciao
Sono stato zitto fino ad ora, sull'argomento, perchè volevo vedere che piega
prendeva.
E sta prendendo una piega che mi piace molto ma molto ma molto! Anche perchè il
giochetto col DSP di cui parlavo tempo fa, che penso abbia spinto Denis a
provarci, serviva ad altro e si faceva in un altro modo, molto più semplice...
qui invece c'è una situazione molto più interessante e completa.
Posso dare una dritta?
Douglas Rife, che ha implementato (parola orripilante ma non me ne viene
un'altra) in MLSSA la finestra "adattiva", se la gioca proprio con Hilbert. Se
ti sparo da qualche parte il SW, riesci a venirne fuori? Praticamente fa in modo
completamente automatico, sull'analisi della risposta all'impulso, tutto quello
che vuol fare Denis e ti dà la funzione di trasferimento del sistema, con
finestrature differenti a seconda della frequenza.
Quanto alla dipendenza dalla posizione di ascolto, è ovviamente a livelli
massimi... tu "fotografi" il campo acustico in "quel" punto, delle dimensioni
della capsula del microfono di misura, quindi se non sei in "quel" punto
correggi quacos'altro...
Ciao
Gianpiero

Ciao, complimenti per il lavoro.
Graditissimi! :)


 la correzione digitale dell'acustica ambientale. 
Snippissimo
Egr. Prof. Denis :))
la mia preparazione tecnica è distante anni luce dalla tua e mi permette
solo di afferrare il concetto generale del tuo lavoro.
Lungi dal fare critiche che non posso permettermi, la mia esperienza di
ascoltone mi insinua qualche dubbio, probabilmente stupido, ma credo
lecito.
Mi pare di aver capito che il filtraggio viene effettuato esclusivamente
sul segnale fondamentale in base all'acustica ambientale e si lavora su
singole porzioni di frequenza.
Mi viene spontaneo pensare che tutto funziona per dei singoli impulsi,
ma un suono complesso, con le sue armoniche e i suoi riverberi che lo
caratterizzano, può realmente essere modificato senza snaturarlo?
Cioè rimaniamo sempre nella HIFI intesa come riproduzione il più
possibile vicina all'originale, senza aggingervi nulla?
Mi sono sempre chiesto poi, dai tempi delle prime equalizzazioni
ambientali, quanto influisce in queste correzioni la risposta del
microfono?
Ossia: è possibile che la differenza di "orecchio" tra me ed il
microfono, può vanificare operazioni di questo tipo?
Ti prego non rispondermi con formule! faccine
-- 
Ciao
Marco Rosanova
----------------------------
Togli NOSPAM per rispondere
maco on ICQ #31679550
----------------------------

 possibile vicina all'originale, senza aggingervi nulla?
Si sta cercando di togliere, non di aggiungere. Di togliere gli
artefatti dovuti ai diffusori e all'ambiente, misurati su un segnale
noto. Hai mai fatto caso che nelle foto a colori che arrivano da sonde
atterrate su marte c'e' spesso fotografato un pezzo di sonda con colori
vivaci? Serve a fare lo stesso tipo di trattamento: sai che colori hai
messo sulla sonda e correggi quanto ripreso dalla telecamera in modo che
i colori risultanti siano il piu` vicino possibile alla realta`. 
hai mai sentito quanto diversamente suonano due diffusori? E qual e` il
piu` fedele? 
Franco