Modérateurs: Modération Forum DIY, Modération Forum Installations, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: JM1111, Sub113 et 73 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

Message » 30 Oct 2009 20:19

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:
Image

Voici le même sinus échantillonné à 88.2khz, qui représente l'objectif à atteindre pour avoir un suréchantillonage parfait:
Image

Voici l'échantillon obtenu par interpolation linéaire du signal a 44.1k:
Image

On constate qu'on obtient un signal triangulaire plutôt qu'un sinus, ce qui correspond à de la distorsion.
apolon34
 
Messages: 2176
Inscription Forum: 24 Mar 2003 15:57
Localisation: Rouen (76)
  • offline

Message » 30 Oct 2009 20:56

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
  • offline

Message » 30 Oct 2009 21:18

Tu as tout un tas de bases polynomiale ... egalement des spline.
akira9a
 
Messages: 1556
Inscription Forum: 14 Nov 2008 16:20
Localisation: Paris
  • offline

Message » 30 Oct 2009 21:20

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.
jalhoucine
 
Messages: 3406
Inscription Forum: 19 Sep 2003 16:34
Localisation: Paris
  • offline

Message » 30 Oct 2009 21:23

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. :D
akira9a
 
Messages: 1556
Inscription Forum: 14 Nov 2008 16:20
Localisation: Paris
  • offline

Message » 30 Oct 2009 21:25

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 ?
apolon34
 
Messages: 2176
Inscription Forum: 24 Mar 2003 15:57
Localisation: Rouen (76)
  • offline

Message » 30 Oct 2009 21:33

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.
akira9a
 
Messages: 1556
Inscription Forum: 14 Nov 2008 16:20
Localisation: Paris
  • offline

Message » 30 Oct 2009 21:35

Si tu veux des sinus, tu peux faire de la transformation de Fourier.


Tu te mets des gouttes dans le blair. :mdr:
Désolé mais là, votre langage m'est inconnu.... :o
breizheau
 
Messages: 15483
Inscription Forum: 23 Oct 2005 12:30
Localisation: Roanne (42)
  • offline

Message » 30 Oct 2009 21:50

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
  • offline

Message » 30 Oct 2009 21:51

breizheau a écrit:
Si tu veux des sinus, tu peux faire de la transformation de Fourier.


Tu te mets des gouttes dans le blair. :mdr:
Désolé mais là, votre langage m'est inconnu.... :o


le désert c'est fini? DUBAI est ruiné?
jalhoucine
 
Messages: 3406
Inscription Forum: 19 Sep 2003 16:34
Localisation: Paris
  • offline

Message » 30 Oct 2009 21:52

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
  • offline

Message » 30 Oct 2009 22:57

Dubai est fini depuis 7 mois. :wink:
breizheau
 
Messages: 15483
Inscription Forum: 23 Oct 2005 12:30
Localisation: Roanne (42)
  • offline

Message » 31 Oct 2009 0:05

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.
apolon34
 
Messages: 2176
Inscription Forum: 24 Mar 2003 15:57
Localisation: Rouen (76)
  • offline

Message » 31 Oct 2009 15:35

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:
Image

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)
  • offline

Message » 31 Oct 2009 16:02

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
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
  • offline


Retourner vers Discussions Générales

 
  • Articles en relation
    Dernier message