Acoustic passion

Acoustic passion

Reconstitution analogique, upsampling avec Foobar + SoX

Bonjour a tous !

 

Sur cet article je vais aborder l'importance de la reconstitution du signal d'origine, autrement dit le processus qui intervient dans le DAC.

 

Dans la théorie, pour reconstituer un signal parfaitement converti par un ADC, il faut utiliser un oversampling de facteur infini (si on reste en numérique) puis un filtrage passe-bas parfait a la fréquence de nyquist.

 

Le problème, c'est qu'en pratique, la conversion ADC n'est pas parfaite : le filtrage s'effectue de façon analogique pour supprimer les fréquence supérieures a la fréquence de sampling ("aliasing"), donc il est loin d'être parfait (déphasage, pente de coupure faible, etc.).

 

Idem lors de la conversion DAC, on ne peut pas reconstituer le signal avec un filtre parfait, car les mêmes restrictions s'appliquent : on reproduit les samples avec des rampes de courants constants (qui créent donc de la distorsion et des harmoniques), et parfois on applique par dessus un filtrage analogique passe-bas (pour supprimer, justement, ces harmoniques).

 

L'idée est donc que l'on suppose avoir un bon signal numérique (donc correctement enregistré : avec un haute fréquence de sampling, puis correctement downsamplé en numérique a 44.1 ou

48khz).

 

On va donc appliquer un upsampling numérique, avant de sortir en analogique, de sorte que le signal numérique=>analogique soit mieux converti (les rampes de courants constants seront plus fréquentes et plus proches du signal parfait a reconstituer, et les harmoniques/distorsions seront de fréquences bien plus élevées donc beaucoup moins audibles, si elles sont audibles !).

 

Pour cela, on va donc utiliser la fréquence de sampling maximale disponible avec la carte son, et lui envoyer un signal de cette même fréquence, que l'on aura pris soin d'upsamplé correctement a partir de la fréquence d'origine. Par exemple, pour ma part avec une carte M-AUDIO DELTA1010LT, je règle en fréquence de carte son un sampling de 96khz, il faudra donc que j'upsample les musiques de 44.1khz a 96khz correctement pour que le DAC reconstitue ensuite le signal analogique a partir d'un signal numérique de 96khz (ce qui sera mieux réalisé qu'une conversion numérique de 44.1khz vers analogique directement).

 

Pour cela, j'utilise foobar avec le plugin SoX. En effet, lorsque vous n'utilisez pas d'effets DSP, c'est windows (ou autre chose) qui s'occupe de gérer la compatibilité entre le flux de lecture et le flux envoyé a la carte son, donc l'upsampling est réalisé a la volé dans des conditions douteuses et peu remarquables.

 

Vous pouvez télécharger le composant SoX pour foobar ici : http://www.hydrogenaudio.org/forums/index.php?showtopic=67373

 

(normal version: Attached File  foo_dsp_resampler_0.7.9.zip ( 131.55K ) Number of downloads: 2109)

 

La qualité de l'upsampling est déterminée par le filtre passe-bas appliqué au signal "upsamplé". Ce filtre passe-bas a en effet un inconvénient : une résonance, comme tout les filtres.

 

Cette résonance peut-être symétrique l'impulsion (filtre a phase linéaire), située après l'impulsion (filtre a phase minimale), ou répartie de façon intermédiaire (par exemple 30% de résonance avant et 70% après).

 

L'amplitude et la durée de cette résonance est dûe la courbure d'atténuation du filtrage. Plus la pente est importante, plus la résonance est importante (en durée et amplitude donc). Pour diminuer la résonance, il faut donc une pente plus faible.

 

Le but pour supprimer les aliasings est de supprimer toute fréquence > a 1/2 le sampling rate d'origine, si on a une pente trop faible, et qu'on veut atteindre un certain seuil d'atténuation après la fréquence de nyquist (pour du 44.1khz une fréquence de 22050hz donc), il faut commencer a filtre plus bas dans le spectre : on augmente donc la bande de transition du filtre pour diminuer la résonance.

 

Par exemple, si on veut -90dB a 22050hz, il faut commencer a filtrer 1000hz en dessous (c'est un exemple), si on veut toujours -90dB a 22050hz mais avec une pente 2 fois plus faible (donc résonance moindre), il faut commencer a filtrer 2000hz en dessous : on a doublé la bande de transition donc diminué la pente du filtre par un facteur 2.

 

On peut aussi jouer sur le seuil de réjection pour diminuer la résonance : en effet pour une même bande de transition, un seuil de réjection plus faible entraîne une pente de filtrage plus faible, donc une résonance plus faible. Mais plus le seuil de réjection est faible, plus la distorsion générée est importante.

 

 

On doit donc trouver un compromis bande de transition (pas trop grande sinon on perd des signaux, pas trop faible sinon la résonance est trop forte) et seuil de réjection.

 

Enfin, il existe un 3ème paramètre sur lequel on peut influer pour contrôler l"audiblité de cette résonance. Des études ont démontrées que la prérésonance (résonance située avec un pic d'impulsion) est plus audible que la postrésonance (résonance située après le pic d'impulsion). Il faut donc contrôler la répartition de cette pré/post résonance, pour trouver un compromis permettant d'obtenir une résonance aussi inaudible que possible, donc un ratio pré/post résonance approprié.

 

Le plugin SoX de foobar dont je vous ai parlé précédemment permet d'agir sur 2 paramètres : la bande de transition et la répartition de la pré/post résonance. Il permet également d'agir sur le seuil de réjection, mais d'une façon trop simplissime (a mon avis) pour être efficace :

 

- on a soit un seuil de réjection de -19.5dB a la fréquence de nyquist (en cochant la case "allow aliasing"="autoriser l'aliasing") : je juge ce seuil de réjection trop faible

- soit un seuil de réjection de -100.0dB a la fréquence de nyquist (en décochant cette même case) : je juge ce seuil de réjection trop important.

 

Pour moi un seuil idéal de réjection serait situé autour de -70/-80dB environ.

 

Maintenant que les choses sont posées, je termine cet article par le post qui suit, sur lequel vous trouverez :

 

1- Une comparaison SoX vs PPHS

2- Une comparaison entre filtre a phase minimale, phase linéaire, phase intermédiaire, et la recherche des paramètres que je juge optimum pour le resampling avec SoX

 

Enfin, sur la réponse suivante, vous trouvez les réglages de SoX que j'utilise et que je conseille donc pour réaliser le filtrage passe-bas de l'upsampling.

 

Je vous souhaite une bonne lecture et j'espère que vous aurez une amélioration notable :

 

http://smf.petoindominique.fr/index.php?topic=2003.msg38273#msg38273



08/08/2012
2 Poster un commentaire

Inscrivez-vous au blog

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 20 autres membres