Salut à tous,
Je cherche à déterminer quelle peut être la meilleure méthode d'interpolation d'un signal audio.
La question concerne un oversampling numérique, d'un facteur entier pour faire au plus simple (x2, x3, etc...)
La question n'est pas innocente, le but au final serait de programmer un DSP ou autre pour implémenter cette fonction au sein d'un dac.
Dans mes recherches, j'ai trouvé la méthode classique de filtrage fir. Elle semble donner de bons résultat mais souffre d'un problème d'oscillation (ringing), d'autant plus que le filtre est long.
Le plus simple consiste à doubler les échantillons, on retrouve les mêmes données mais un sample rate doublé. Le problème c'est qu'on a alors le même filtrage en sortie à effectuer, ce qui supprime pas mal d'intérêt au processus.
Dans le simple, il y a l'interpolation linéaire (calculer la moyenne des échantillons dans le cas du x2)
J'ai trouvé aussi sur wikipedia l'interpolation bicubique.
Je suppose que les programmes spécialisés doivent utiliser d'autres algorithmes.
Le but serait de rassembler les infos et de faire un test final comparatif à l'écoute en suréchantillonant un morceau de musique et d'écouter les différences.
Pour visualiser les choses, voici un sinus de 11025hz échantillonné a 44100hz:
Voici le même sinus échantillonné à 88.2khz, qui représente l'objectif à atteindre pour avoir un suréchantillonage parfait:
Voici l'échantillon obtenu par interpolation linéaire du signal a 44.1k:
On constate qu'on obtient un signal triangulaire plutôt qu'un sinus, ce qui correspond à de la distorsion.
|
20 messages • Accèder à une page • 1, 2
|
Modérateurs: Modération Forum DIY, Modération Forum Installations, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 45 invités
Discussions générales sur le DIY Audio : choix des HP, comparaisons des principes : clos vs BR, etc
Meilleure méthode interpolation numérique
- apolon34
- Messages: 2176
- Inscription Forum: 24 Mar 2003 15:57
- Localisation: Rouen (76)
interpolation polynomiale serait peut être plus adapté pour ton étude : la tu vas obtenir un sinus.
- jalhoucine
- Messages: 3406
- Inscription Forum: 19 Sep 2003 16:34
- Localisation: Paris
Tu as tout un tas de bases polynomiale ... egalement des spline.
- akira9a
- Messages: 1556
- Inscription Forum: 14 Nov 2008 16:20
- Localisation: Paris
je ne me souviens plus très bien ( loin les études) mais le spline c'est un cas particulier d'interpolation polynomiale?
En tout cas l'interpolation linéaire ne me semble pas adaptée à ton cas.
En tout cas l'interpolation linéaire ne me semble pas adaptée à ton cas.
- jalhoucine
- Messages: 3406
- Inscription Forum: 19 Sep 2003 16:34
- Localisation: Paris
Oui c'est une cas particulier d'interpolation lineaire. L'interet est que ca donne de bons resultats pour des polynomes de degre reduit. En plus y a plein de routines disponibles a droite a gauche.
- akira9a
- Messages: 1556
- Inscription Forum: 14 Nov 2008 16:20
- Localisation: Paris
Je vais regarder du côté de l'interpolation polynomiale, mais comme son nom l'indique, elle donne un polynome et pas un sinus, non ?
Pour faire des tests d'écoute comparatifs, quelqu'un connait un bon morceau de musique libre de droits ?
Pour faire des tests d'écoute comparatifs, quelqu'un connait un bon morceau de musique libre de droits ?
- apolon34
- Messages: 2176
- Inscription Forum: 24 Mar 2003 15:57
- Localisation: Rouen (76)
En fait les interpolations te donnent des bouts de polynomes recolles ensemble. Tu prends quelques point et tu ajuste un polynome. Puis tu calcules les points intermediaires (interpolation) a partir de ce polynome. Ensuite tu prends les points suivants et tu recommences.
Si tu veux des sinus, tu peux faire de la transformation de Fourier.
Si tu veux des sinus, tu peux faire de la transformation de Fourier.
- akira9a
- Messages: 1556
- Inscription Forum: 14 Nov 2008 16:20
- Localisation: Paris
Si tu veux des sinus, tu peux faire de la transformation de Fourier.
Tu te mets des gouttes dans le blair.
Désolé mais là, votre langage m'est inconnu....
- breizheau
- Messages: 15470
- Inscription Forum: 23 Oct 2005 12:30
- Localisation: Roanne (42)
akira9a a écrit:Si tu veux des sinus, tu peux faire de la transformation de Fourier.
c'est un peu chaud la transformation de Fourier pour ce que veut faire notre ami.
Je pense qu'avec une interpolation polynomiale de degré intermédiaire (peut être 3 ou 4) on peut arriver à bien approximer une sinusoïde.
- jalhoucine
- Messages: 3406
- Inscription Forum: 19 Sep 2003 16:34
- Localisation: Paris
breizheau a écrit:Si tu veux des sinus, tu peux faire de la transformation de Fourier.
Tu te mets des gouttes dans le blair.
Désolé mais là, votre langage m'est inconnu....
le désert c'est fini? DUBAI est ruiné?
- jalhoucine
- Messages: 3406
- Inscription Forum: 19 Sep 2003 16:34
- Localisation: Paris
JAL Houcine a écrit:akira9a a écrit:Si tu veux des sinus, tu peux faire de la transformation de Fourier.
c'est un peu chaud la transformation de Fourier pour ce que veut faire notre ami.
Je pense qu'avec une interpolation polynomiale de degré intermédiaire (peut être 3 ou 4) on peut arriver à bien approximer une sinusoïde.
Oui oui je pense aussi.
- akira9a
- Messages: 1556
- Inscription Forum: 14 Nov 2008 16:20
- Localisation: Paris
Dubai est fini depuis 7 mois.
- breizheau
- Messages: 15470
- Inscription Forum: 23 Oct 2005 12:30
- Localisation: Roanne (42)
Le problème c'est que je suis pas un super matheux et la plupart des papiers sur le sujet sont très théoriques et je n'ai absolument aucune idée de la façon dont on implémente tout ça pour de vrai.
Pour commencer avec les algos simple, voici un court extrait de Hotel California de Eagles, dans sa version originale 16bits 44.1k:
version originale
Le même morceau, suréchantillonné a 88.2khz en doublant les échantillons:
version doublee
La version interpolation linéaire:
Interpolation linéaire
La version interpolée cubique:
interpolation cubique
La version cubique doit avoir un soucis ou bien dépassement de capacité sur les passages forts ( a la fin).
Pour ma part rien de flagrant, j'attends vos commentaires.
Pour commencer avec les algos simple, voici un court extrait de Hotel California de Eagles, dans sa version originale 16bits 44.1k:
version originale
Le même morceau, suréchantillonné a 88.2khz en doublant les échantillons:
version doublee
La version interpolation linéaire:
Interpolation linéaire
La version interpolée cubique:
interpolation cubique
La version cubique doit avoir un soucis ou bien dépassement de capacité sur les passages forts ( a la fin).
Pour ma part rien de flagrant, j'attends vos commentaires.
- apolon34
- Messages: 2176
- Inscription Forum: 24 Mar 2003 15:57
- Localisation: Rouen (76)
J'ai mis a jour la version interpolation cubique qui souffrait visiblement d'un soucis de programmation.
Voici le résultat obtenu avec le signal du début:
Au dessous en rouge c'est le signal originel.
Maintenant question bête, comment calculer un sinus qui passerait par 4 points par exemple ?
Voici le résultat obtenu avec le signal du début:
Au dessous en rouge c'est le signal originel.
Maintenant question bête, comment calculer un sinus qui passerait par 4 points par exemple ?
- apolon34
- Messages: 2176
- Inscription Forum: 24 Mar 2003 15:57
- Localisation: Rouen (76)
avec 4 points tu peux résoudre les équations d'une interpolation polynomiale de degré 3 de types lagrange.Cela donnera une bonne approximation de ta sinusoide.
regarde ici, il y a un algorithme tout prêt :
http://homeomath.imingo.net/lagrange.htm
Tu rentres tes points et il te sort le polynome correspondant
regarde ici, il y a un algorithme tout prêt :
http://homeomath.imingo.net/lagrange.htm
Tu rentres tes points et il te sort le polynome correspondant
Dernière édition par jalhoucine le 31 Oct 2009 16:04, édité 1 fois.
- jalhoucine
- Messages: 3406
- Inscription Forum: 19 Sep 2003 16:34
- Localisation: Paris
|
20 messages
• Page 1 sur 2 • 1, 2
Retourner vers Discussions Générales
|