Se connecter
Se connecter

ou
Créer un compte

ou

Sujet Les compressions du signal numérique

  • 25 réponses
  • 9 participants
  • 2 615 vues
  • 9 followers
Sujet de la discussion Les compressions du signal numérique
:!: Il ne s'agit pas ici d'un thread sur la compression dynamique. Je parle de compression du débit numérique (mp3, aac et autres...)
Hello tout le monde,

Je vais m'attaquer sous peu à la rédaction d'un dossier le plus complêt possible sur les différentes compressions du signal numérique.

Le point de départ est que tous les domaines du son (radio, ciné, télé, musique, diffusion internet) font appel à divers procédés de réduction du débit numérique. Or, peu de techniciens n'ont ne serait-ce qu'une vague idée du fonctionnement de ces procédés ni de leur influence réelle sur leur travail une fois arrivé chez l'auditeur. Je cherche à savoir si il est possible de tenir compte d'une compression future lors du mastering.

Je suis à la recherche de plusieurs choses :
1) des études déjà menées sur les compressions destructives
2) des livres / liens expliquant précisément les procédés utilisés et les principes des différents formats.
3) de techniques utilisées par les ingénieurs du son pour tenir compte de la compression future de leur travail et minimiser son impact destructif.

Dans l'idéal, j'aimerai faire un comparatif des différents formats de compression (mp3, aac etc.) et éventuellement trouver des techniques applicables au mastering pour optimiser le signal en vue d'une compression future.

Je suis vraiment au début de ma recherche et toute contribution m'intéresse :)

A+

Mes réalisations : http://www.rallu-sound.ch

[ Dernière édition du message le 01/11/2012 à 00:06:10 ]

Afficher le sujet de la discussion
11
Très intéressant tout ça !!

Site officiel et boutique en ligne du Studio Delta Sigma https://www.studiodeltasigma.com

12
Salut , tres interessant le sujet dans lequel tu t'aventure la :)

Concernant le mp3, tu peux t'interesser ( plus ou moins profondément ) à la transformée de fourier , c'est un procedé mathématique utilisé lors de la compression en mp3 .

http://www.guardian.co.uk/technology/2002/apr/04/internetnews.maths

[edit] Si j'ai bien retenu ce que j'ai vu en cours , lors d'une conversion en mp3 , on extrait le spectre de fourier du signal audio et on retire ensuite l'ensemble des fréquences considérées comme inaudible ou inutiles .

[ Dernière édition du message le 02/11/2012 à 10:22:33 ]

13
Flag, j'attends l'article avec impatience. C'est un domaine très intéressant, je ne puis malheureusement pas t'aider, désolé...
14
Le modèle utilisé par le mp3 et l'AAC qui permet de représenter le signal audio est un modèle "Sinusoïdes + Bruit".


Le modèles "Sinusoïdes" a été historiquement introduit dans cette publication qui traitait de la modélisation de la parole :
R.J. McAulay and T.F. Quatieri, "Speech analysis & synthesis based on a sinusoidal representation", IEEE Trans. on ASSP, Vol. 34, No. 4, August 1986.

Le principe est le suivant :
- Le signal est découpé dans le temps en trames successives de 10ms à 20ms.
- Sur chaque trame une analyse spectrale est réalisée (FFT ou autres, parce qu'il existe d'autres technique plus efficaces, comme la décomposition en sous-espace comme Matrix-Pencil dites "hautes-résolutions", etc.)
- On récupère les "pics" au dessus d'un certain seuil dans le spectre d'amplitude et les phases associées (une FFT le spectre d'amplitudes ET de phases).
- Le contenu de la trame est alors synthétisé comme une somme de sinusoïdes :
s_j(t) = ∑ a_i_j * sin( ω_i_j*t + φ_i_j ) où
- s_j est le signal de là j-ème trame.
- a_i_j est l'amplitude de la i-ème sinusoïde de la j-ème trame.
- ω_i_j sa pulsation (=2*π*f_i, où f_i est la fréquence).
- φ_i_j est la phase (au début de la trame).

- De trame en trame, les paramètres des sinusoïdes sont appairés : On essaie de reconstruite la "trajectoire" d'une composante sinusoïdale de trame à trame (un peu comme les lignes horizontale d'un spectrogramme).

C'est ce qui est représenté dans cette image :
Spectrogram_-_mot%C3%A1ngo_mwa_basod%C3%A1.png


Quand l'appairage est réalisé, les paramètres des sinusoïdes sont interpolés par des polynômes. Pour la "phase" c'est un peu sioux, enfin, disons que l'on a trop l'habitude d'avoir une "fréquence constante".

Ce qu'il y a dans la sinusoïde est un angle qui évolue au cours du temps : φ(t)
La pulsation (proportionnelle à la fréquence) est la variation instantanée de cet angle, autrement dit sa dérivée :
ω(t) = dφ(t)/dt

Si on le prend dans l'autre sens, la phase est l'intégrale de la pulsation :
φ(t) = ∫ ω(t).dt

Dans le cas où ω(t) est une constante (le cas du signal stationnaire), on retrouve :
φ(t) = ω*t + φ0
où φ0 est la phase à l'origine.


Dans le modèle de McAulay et Quatieri, la pulsation est considérée constante lors de l'analyse, mais "variable" lors de la synthèse : les paramètres ω et φ sont interpolés de trame à trame en évitant des sauts de phases qui pourraient être audibles (on s'arrange pour que la phase à la fin de la trame précédente soit égale à la phase au début de la trame suivante, ce qui n'est pas assuré par l'étape d'analyse).

McAulay et Quatieri ont alors observé ceci : Pour un signal de parole, les voyelles (partie voisées) pouvaient être identifiées en remarquant que les trajectoires des paramètres des sinusoïdes pouvaient être crées facilement et qu'elles évoluaient continument.
En revanche, pour les consonnes, les paramètres des sinusoïdes évoluent de façon erratique et il est impossible de retrouver des trajectoires bien définies.



C'est là qu'arrive le modèles "Sinusoïdes + Bruit" pour la musique introduit dans cette publication :
X. Serra and J. Smith III, "Spectral Modeling Synthesis: A Sound System Based on a Deterministic plus Stochastic Decomposition", Computer Music Journal, Vol. 14, No. 4, Winter 1990.

Les consonnes ne sont pas des "signaux harmoniques" et ne sont pas non plus des "sommes de sinusoïdes indépendantes" : Ce sont plutôt des "bruits" ou encore des "processus stochastiques".
https://fr.wikipedia.org/wiki/Processus_stochastique

Pour la faire simple, ça revient à dire qu'à chaque instant 't' la valeur du signal 's(t)' se comporte comme une variable aléatoire.
Essayer de décrire son spectre par des sinusoïdes est inefficace : il vaut mieux le décrire avec des outils statistiques comme sa densité de probabilité, sa valeur moyenne, son écart-type, etc.

C'est d'ailleurs exactement ce que l'on fait lorsque que l'on parle de "densité spectrale de puissance", la puissance est vu comme issue d'un processus stochastique dont on calcul la moyenne des fréquences.
https://fr.wikipedia.org/wiki/Densit%C3%A9_spectrale_de_puissance


L'idée de X. Serra est la suivante :
- On fait une analyse en sinusoïdes comme le faisaient McAulay et Quatieri d'un signal réel x(t).
- On reconstruit les trajectoires des paramètres des sinusoïdes. Si ces trajectoires sont trop courtes (i.e. si elles n'existent que sur 1 à 3 trames) on les rejette. On interpole les trajectoires retenues.
- On resynthétise le signal à partir de l'analyse pour obtenir un signal approximatif s(t) ≈ x(t)
- On calcule un résidu r(t) = x(t) - s(t). En gros, celui-ci contient tout ce qui reste en dehors des sinusoïdes retenues.
- r(t) est décrit comme l'enveloppe d'amplitude spectrale d'un bruit.

Normalement, r(t) ne contient aucun "pic" puisque les sinusoïdes ont été retirées.

Imagine un spectre qui a cette tête :
http://spe.obs-mip.fr/var/ezspe/storage/images/media/images/spectre-radioactivite/2680-1-fre-FR/spectre-radioactivite_large.jpg

Les pics en rouge seraient modélisés dans s(t) puis retirés de x(t) pour former r(t). Pour modéliser r(t) Serra ne s'est pas emmerdé : il traçait des segments de droites qui représentaient grosso-modo le "plafond" du résiduel en bleu.

Tu obtiens ainsi un "bruit coloré" b(t) qui présente un spectre proche de celui de r(t).
Le signal reconstruit est x(t) ≈ s(t) + b(t).



Dans le mp3 et l'AAC, c'est ce modèle qui est utilisé.

Avant l'encodage, on utilise les modèles psycho-acoustique avec les histoires de masquage &co pour supprimer des parties de s(t), on détruit de l'information.

b(t) est modélisé par un modèle auto-régressif (c'est mieux que ce que faisait X. Serra).
https://fr.wikipedia.org/wiki/Processus_autor%C3%A9gressif
C'est la base du codage LPC (linear predictive coding) que l'on retrouve dans nos GSM.
https://en.wikipedia.org/wiki/Linear_predictive_coding

Le codage LPC vient lui aussi de la modélisation de la parole. C'est ce que l'on trouve dans les trucs de chat comme TeamSpeak, Skipe, etc.
Pour la parole le codage LPC suffit (on modélise tout avec). Ça "sonne" moins bien que le mp3 mais le débit est particulièrement bas : en fait le mp3 aurait du mal à atteindre la même qualité avec un débit aussi bas, surtout que la parole est faite de plus de 50% de consonnes (en français) que le modèle sinusoïdal est inefficace à représenter.

[ Dernière édition du message le 02/11/2012 à 11:46:36 ]

15
Merci Era Tom,
c'est top tes explications !
16
Superbe travail ! Bravo !
Citation :
50% de consonnes (en français) que le modèle sinusoïdal est inefficace à représenter

Serait-ce pour cette raison que le mp3 est aussi inefficace (qualitativement) sur les attaques et sur les aigus ?

[ Dernière édition du message le 02/11/2012 à 23:00:20 ]

17
Merci, j'essaie de vulgariser sans raconter de choses fausses et en préservant une part intuitive :) Mais quand je me relis je vois les fautes d'orthographe et ça m'horripile :-p

Bien vu, si tu cherches un son que le mp3 à vraiment du mal à représenter tu peux prendre un son percussif avec un spectre de bruit plutôt aigu : une cymbale.

Pour les aigus je crois (mais c'est à vérifier) que la raison principale est que c'est là que l'on trouve les largeurs de bandes critiques les plus grandes.
Le masquage y est plus important du coup c'est là que la destruction d'information opère en priorité.
Est-ce que c'est quelque chose que tu as perçu même à un débit élevé ?
J'ai bien une autre explication mais j'y reviendrai à la fin.


Pour les attaques, les sons brefs et les transitoires la raison est liée au modèle "Sinusoïdes + Bruit", avant même l'étape de destruction de l'information (je connais un peu mieux la question parce que j'ai bossé sur cette problématique). Il y a deux phénomènes qui interviennent.


Le premier est lié à une hypothèse de travail qui permet de faire de l'analyse spectrale (en gros, qui permet de calculer des FFT) qui n'est vérifiée que de façon approximative.
Pour calculer le spectre (périodogramme) d'un signal, celui doit être stationnaire (au sens large).
https://fr.wikipedia.org/wiki/Stationnarit%C3%A9_d%27une_s%C3%A9rie_temporelle

Pour un signal sinusoïdal (ou composé d'une somme de sinusoïdes) ceci revient à supposer que les fréquences et amplitudes ne varient pas au cours du temps.
C'est bien sûr faux pour un signal audio qui renferme de la musique...

L'astuce consiste alors à découper le signal en petites fenêtres de temps (les trames dont je parlais) et de supposer que les variations des amplitudes et fréquences dans une trame sont négligeables, autrement dit, que le signal est localement stationnaire.
C'est une approche qui tient la route pour quasiment tout le signal audio, sauf les attaques qui sont par essence des variations brutales.

Le modèle "Sinusoïdes + Bruit" du mp3, de l'AAC, etc. procède pourtant de cette façon. Le signal d'une trame qui contient une attaque ou un transitoire va quand-même être considéré comme stationnaire ; la conséquence est que l'attaque va être "moyennée" ou que "l'énergie va être étalée" sur toute la durée de la trame (qui est plus longue que celle de l'attaque).

Ceci n'est pas lié à la compression ou à la destruction d'information elles-même ; c'est directement imputable à la faiblesse du modèle de départ.
Pour corriger le tir, le mp3 et l'AAC proposent des longueurs de trames variables, des trames longues et des trames courtes :
- Tant que tout se passe bien (i.e. que l'hypothèse de stationnarité semble vérifiée) les trames longues sont utilisées.
- Dès qu'une attaque est détectée, la fenêtre d'analyse est réduite et on utilise les trames courtes pour "limiter" l'étalement.

Les modèles qui sont en gestation dans les labo aujourd'hui sont des modèles "Transitoires + Sinusoïdes + Bruit", voir "Transitoires + Sinusoïdes amorties + Bruit"
L'AAC permet d'atteindre des trames plus courtes que le mp3 ; ça améliore les perfo mais ça reste un modèle "Sinusoïdes + Bruit" (ce n'est pas encore la nouvelle génération d'encodeur audio).


Le second problème est lié à une limite théorique qui limite la résolution de l'analyse spectrale si la trame est trop courte.

Si certains ont entendu parler du "principe d'incertitude d'Heisenberg" en mécanique quantique (qui a l'air vachement compliquée) ils seront peut-être surpris d'apprendre que le problème se pose également pour l'analyse temps-fréquence en traitement du signal. Ce principe (qui est en fait un théorème) a été reformulé par Gabor (celui de la décomposition en ondelettes) ; même Wikipedia en parle :
https://fr.wikipedia.org/wiki/Principe_d%27incertitude#Exemples

En gros, ce que montre ce théorème est que si le support temporel d'un signal est étroit alors sa représentation fréquentielle est large (et inversement). Plus précisément :
σt * σf > 2π (c'est la formulation de la limite théorique)

σt caractérise l'étalement temporel.
σt caractérise l'étalement fréquentiel.

Ça donne directement la relation suivante :
σf > 2π / σt

En clair, même si le signal peut être considéré stationnaire sur une trame très courte, on sera incapable de démêler les fréquences des sinusoïdes qui composent le signal en calculant une FFT parce que les "pics" seront trop étalés (jusqu'à être confondus). Si on s'y prend "bien", on peut même se retrouver avec un seul gros pâté au milieu du spectre... Et là on est content.

Pour travailler avec des trames courtes il faut alors développer une autre technique que la FFT. Les solutions sont les méthodes dites HR (Haute Résolution).
Au lieu d'estimer le périodogramme (avec une FFT) puis de relever les pics, on utilise assez souvent un "modèle paramétrique" :
- Le signal temporel est considéré comme une fonction du temps que l'on impose de façon arbitraire. On laisse tout de même quelques "degrés de libertés" i.e. des paramètres de la fonction que l'on peut/veut ajuster.
- Le problème est alors de trouver le jeu de paramètres qui permet de coller au mieux au signal réel i.e. de minimiser le résidu ou l'erreur de modélisation.

Un cas concret : On décrète que notre signal est une somme de N sinusoïdes (ça tombe bien, c'est ce que l'on veut construire à la fin).
Chaque sinusoïde est affublée de trois paramètres : son amplitude a_i, sa pulsation ω_i et sa phase initiale φ_i (i allant de 1 à N).

La fonction que l'on veut faire coller à notre signal réel est alors :
s(t) = ∑ a_i * sin( ω_i*t + φ_i )

Mathématique l'estimation des 3*N paramètres devient un problème d'optimisation : J'ai un signal réel x(t) et je veux trouver le s(t) le plus proche possible de x(t). On exprime alors l'erreur quadratique moyenne et on veut qu'elle soit la plus petite possible :
On cherche les (a_i, ω_i, φ_i) tels que < ( x(t) - s(t) )² > soit minimum.

En fait, c'est la méthode des moindres carrés.
(en vérité, dans la littérature, les méthodes réalisent le plus souvent l'estimation en 2 étapes : d'abord on trouve les pulsations par une méthode de décomposition/projection en sous-espace (le nom évoque peut-être quelque chose à celui qui a déjà utilisé ce genre d'outil), ensuite on cherche les amplitudes et phases qui minimisent l'erreur quadratique, mais l'idée générale reste la même).


L'estimation des paramètres du modèle sinusoïdal par les techniques HR est bien une approche différente de celle de la FFT.

Avec la FFT :
- On calcule un spectre d'amplitude et de phase sans connaissance, a priori, du modèle final.
- On relève les pics du spectre, que l'on va représenter par des sinusoïdes. On commence par les pics les plus importants et on poursuit avec les plus petits. On arrête dès que ceux-ci sont noyés dans le bruit.

Avec les méthodes HR :
- On impose le modèle temporel (ce qui introduit une connaissance a priori) ; dans mon exemple on impose même le nombre total de sinusoïdes "N" de façon arbitraire.
- On cherche ensuite les paramètres suivant un critère d'optimalité (minimiser l'erreur quadratique moyenne).


Si la méthode HR permet de résoudre le problème de la résolution fréquentielle pour l'analyse des trames courtes, elle en pose un autre :
- On doit choisir un "N" avant de faire l'analyse et ceci peut être problématique. Il faut donc trouver une méthode supplémentaire qui permet d'estimer l'ordre du modèle (et cette méthode ne passera pas par une FFT puisqu'elle ne permet pas d'atteindre la bonne résolution).
- Si on se plante dans le choix de N (parce qu'il en fallait N+1 ou N-1) il faut quand-même que l'algorithme qui réalise l'optimisation ne parte pas dans les choux et converge vers une solution acceptable. Ça demande un vrai savoir faire en "algorithmes numériques" ; pour donner une idée, il y a des mecs qui font des thèses de math (bac+8) sur le sujet (d'ailleurs, c'était une partie de mon sujet de thèse :-p)


J'imagine (mais je n'ai pas vérifié) que pour proposer des trames plus courtes avec l'AAC qu'avec le mp3 un effort particulier a été porté sur l'analyse spectrale HR.


Je reviens maintenant sur ce que tu évoquais avec les aigus pour fournir un complément d'explication (mais ça reste de la spéculation parce que je n'ai pas mis le nez dedans).

Dans le cas d'un encodeur, on peut/doit fixer un débit max à ne pas dépasser et l'information codées est justement l'ensemble des paramètres du modèle "Sinusoïdes + Bruit" de chaque trame.
Comme le débit est limité, le nombre de sinusoïdes l'est aussi. J'ai vu des publications où c'était cette limite qui servaient à fixer le nombre maximal de sinusoïdes pour l'analyse HR.

Or il se trouve que les algorithmes d'optimisation les plus utilisés tendent à faire converger les sinusoïdes dans le bas du spectre (là où il y a le plus d'énergie). Si le nombre de sinusoïdes a priori est sous évalué, alors le haut du spectre ne sera pas pris en compte.
Il me semble que la solution classique pour contourner ce problème est de travailler par bandes de fréquence (on répartit le nombre de sinusoïde sur chaque bandes et on réalise l'optimisation pour chaque bande). Et, comme d'hab, ça pose un autre problème : comment choisir les bandes et comment repartir les sinusoïdes entre les bandes ? Faut-il les équirépartir ? Ou bien faut-il tout de même privilégier le bas du spectre où l'on a le plus de chance de trouver des sinusoïdes ?
Je crois qu'il n'y a pas vraiment de solution totalement satisfaisante aujourd'hui.


Historiquement les méthodes HR par décomposition en sous-espace viennent du domaine médical ; elles sont utilisées dans les IRM.
Ze big expert dans le domaine, qui a fait sacrément avancé le sujet, c'est une dame : Sabine Van Huffel
http://homes.esat.kuleuven.be/~biomed/person.php?persid=17
Sur sa page on trouve des liens vers des publications sur les méthodes HR qui font toujours référence.

Elle s'est même amusée à proposer une méthode qui permet de calculer conjointement les pulsation et les facteurs d'amortissement d'un modèle de sinusoïdes amorties en haute résolution (la classe). Par contre elle n'a pas les mêmes problématiques que dans l'audio (elle s'en fout des transitoires des crash cymbals, tout ce qui l'intéresse c'est de trouver des tumeurs :| )

[ Dernière édition du message le 03/11/2012 à 02:35:32 ]

18
Après avoir travaillé sur la synthèse FM, sa modélisation...voilà bientôt 30 ans... je ne me souviens plus que de la résolution des intégrales eulériennes du second degré. J'ai bien aimé l'approche complémentaire par les moindres carrés (?):lol:
Cette expérience m'avait amené à découvrir les beautés (et les horreurs) de l'erreur expérimentale :mdr: . C'est donc dans cette voie que je me suis lancé pour me confronter au vivant (la musique).
Pour répondre à ta question, oui, j'entends les artefacts du mp3 sur des sons aigus et
ce , même à des débits de 320 kbps (au delà, autant passer en compression FLAC non destructive).
Ce que j'aime bien dans ton post, c'est de voir qu'il existe des pistes pour créer de nouveaux algorithmes.
Il est vrai qu'il me semble de mémoire que (à l'oreille) la compression effectuée par le minidisc était moins destructive et plus "musicale".
19
J'ai une question : comment se fait il que le Flac puisse compresser le poids du fichier, sans avoir de perte ? Je sais que l'algorithme est assez spécial, mais est-ce quelqu'un ici pourrait m'expliquer un peu ?
20
Le flac ne fait "pas mieux" que le zip. Bon si, il fait mieux, mais je fais un peu de provoque.

Un codage exact (ou une compression sans perte si tu préfères) se heurte toujours à une limite théorique infranchissable, quelque soit l'algorithme, et tu peux le mettre en défaut assez simplement.

Génère un son aléatoire, un bruit blanc (attention, un "vrai" avec très peu de corrélation) en stéréo (2 bruits indépendants pour les canaux de droite et de gauche) et essaie de le compresser avec FLAC : tu verras que le taux de compression sera très proche de 0% (tu n'auras pas 0 parce que les générateurs de nombres aléatoires sur ordinateur ne sont jamais parfaits).


Si tu as lu mon premier post sur la compression sans perte tu as du voir que je parlais de "table de Huffman" et que je prenais l'exemple du zip.

Le zip fait un encodage "aveugle" et construit son dictionnaire comme un bourrin. Pour qu'il atteigne des taux de compression similaire à celui du FLAC il faudrait le laisser tourner très longtemps pour qu'il trouve un dictionnaire optimal or, on ne lui en laisse pas le temps parce que l'on préfère que le temps de compression soit raisonnable (et compatible avec un usage de la vie courante).

Le FLAC est dédié à la musique et son algorithme oriente la construction du dictionnaire de façon intelligente en tirant parti de connaissance a priori sur la forme du signal à encoder (ce que ne peut pas faire le zip).
De plus, le zip est obligé de transmettre le dictionnaire, alors que le FLAC possède un dictionnaire partiellement pré-calculé (on n'est pas obligé de transmettre le dictionnaire dans sa totalité, ce qui engendre un gain de place supplémentaire).


C'est une approche assez classique, en fait, qui consiste à utiliser un modèle compact pour approcher le signal réel, puis on encode l'erreur de modélisation avec un codage exact (je n'ai pas vérifié en détail, mais c'est l'état de l'art, même pour les algo de compression d'image).


Pour t'expliquer ça simplement, il procède de manière similaire au mp3 sans la partie "destruction d'information" :

- Le signal découpé en trames.

- Les corrélations entre les canaux gauche et droit sont relevées, en passant d'un modèle "gauche/droite" à un modèle "milieu/côté".
Usuellement, un CD est mixé de façon à ce que le maximum d'information soit contenu au milieu, sauf sur quelques passages où l'on veut produire un effet particulier. Les deux codages ("gauche/droite" ou "milieu/côté" ) sont comparés dans chaque trame pour déterminé lequel est le plus efficace (et on peut passer de l'un à l'autre entre chaque trame si besoin).

- Pour chaque canal et chaque trame, on a un signal réel x(t) que l'on va modéliser par un modèle "Somme de Sinusoïdes" pour former un signal synthétique s(t).

Dans le cas d'un signal audio, la somme de sinusoïdes est un modèle "compact" (c'est du jargon d'ingé ou docteur en traitement du signal). Ceci veut dire que quelques paramètres permettent de représenter un nombre assez important d'échantillons.

Imagine une sinusoïde a * sin( ω*t + φ ) @44.1kHz sur 20 ms (une petite trame), ça représente 882 valeurs. Or pour la décrire complètement tu as seulement besoin de 3 paramètres (amplitude, pulsation et phase). Ça fait un rapport de presque 1 pour 300 valeurs.

Ensuite, d'une trame à une autre on sait que les sinusoïdes n'évoluent pas (dans la grande majorité des cas, i.e sauf sur les attaques et les transitoires) de façon brutale : au lieu de coder pour chaque sinusoïde les paramètres on ne va coder que leurs petites variations.
Les valeurs sont donc moins grandes, et peuvent être codées sur une quantité de bits plus petites que si on devait coder toute la dynamique de valeur possibles des paramètres.

D'ailleurs, même sans parler de modèle sinusoïdale, si tu prends un fichier wav et que tu calcules la différence des valeurs échantillon par échantillon, tu t’aperçois que la dynamiques des différences et bien plus petite que la dynamique totale du signal, sauf sur une attaque.
Bon, je reviens sur l'encodage lui-même.

- Pour chaque trame on a un modèle s(t) assez représentatif du signal réel x(t). Là, contrairement au mp3, il n'y a pas de destruction d'information dans s(t) (on ne retire pas les fréquences masquées).
Même si le modèle s(t) est proche de x(t) il n'est pas parfait ; il y a des erreurs. On les calcule simplement en faisant une différence : err(t) = x(t)-s(t).
Usuellement, cette erreur s'appelle un "résidu". Il présente également une dynamique plus petite que x(t) (parce que le modèle est tout de même efficace), sauf sur les transitoires.

Pour pouvoir reconstruire le signal x(t) sans perte il suffit de transmettre le modèle s(t) et le résidu err(t) :
x(t) = s(t) + err(t)

On réalise alors un codage exact de err(t), avec un algorithme similaire au zip.


Je ne crois pas que FLAC et ses "confrères" utilisent un modèle compact pour les transitoires, sinon je pense que j'en aurais entendu parler (j'ai bossé sur les modélisations de transitoires pour les encodeurs prochaines générations).
Ce qui me fait dire ça c'est qu'il s'agit d'un format gratuit, or s'il y avait eu une évolution remarquable, ou une amélioration qui sort de l'état de l'art, celle-ci aurait sans aucun doute été brevetée ;-)


On peut donc s'attendre à voir venir, un jour, un algo plus performant que FLAC. 2 pistes :

1ère piste :
Utiliser un modèle "Sinusoïdes amorties" a * exp(τ*t) * sin( ω*t + φ ).
Les études actuelles (enfin, ça presque 10 ans qu'on le sait maintenant) montrent qu'en rajoutant un seul paramètre d'amortissement "τ" on peut augmenter la longueur des trames d'un rapport 3 environ tout en conservant des résidus de modélisation équivalents.

Imagine que l'on ait N sinusoïdes dans une trame de durée T, ça fait 3*N paramètres pour un temps T. Pour coder 3 trames il faudrait transmettre 3*3*N = 9*N paramètres.
Avec la prise en compte du facteur d'amortissement ça ferait à la place 4*N paramètres pour une trame de durée 3*T.

Ce nouveau modèle est donc plus compact ; tu as rapport d'un peu plus de 2.

2nde piste :
Aujourd'hui, le résidu contient les transitoires et les attaques qui ne sont pas représenté convenablement par le modèle "Sinusoïdale". On sait déjà que les sinusoïdes amorties font mieux, mais on peut aller encore plus loin en utilisant un modèle adapté aux transitoires spécifiquement : les ondelettes par exemple.
Tu aurais un signal réel reconstruit à partir de 3 signaux :
x(t) = s(t) + a(t) + err(t)

s(t) serait constitué de trames longues avec un modèle "sinusoïdes amortie"
a(t) serait constitué de trames courtes avec un modèle de transitoire fondé sur les ondelettes.
err(t) serait le résidu compressé avec un codage exact du type zip, certainement plus efficacement qu'avec le résidu précédent parce qu'il contient moins d'information (on lui a retiré les transitoires).


Patience, ça va venir, et je te fais le pari qu'il s'agira d'un schéma très similaire à celui que je te propose et qu'il pourra faire 10 à 20% de mieux que le FLAC.

[ Dernière édition du message le 04/11/2012 à 21:14:23 ]