[0001] La présente invention concerne un procédé de codage numérique, en particulier de
signaux de parole.
[0002] Une des meilleures méthodes actuelles de compression des signaux pour réduire le
débit tout en maintenant une bonne qualité est la technique de prédiction linéaire
à excitation par codes CELP (Code Excited Linear Prediction). Ce type de codage est
largement utilisé, essentiellement dans des systèmes de transmission par voie terrestre
ou satellite, ou dans des applications de stockage. Toutefois, la première génération
de codeurs CELP qui utilisait des répertoires stochastiques était très complexe à
mettre en oeuvre et nécessitait de grandes capacités de mémoire. Une deuxième génération
de codeurs CELP est alors apparue : les codeurs CELP à répertoire algébrique. Ils
sont moins complexes à mettre en oeuvre et nécessitent moins de mémoire, mais les
gains sont encore insuffisants.
[0003] La technologie du codage CELP à répertoire algébrique a encore été améliorée par
l'introduction des codeurs ACELP (Algebraic Code Excited Linear Prediction) qui utilisent
un répertoire algébrique associé à une recherche focalisée à seuils adaptatifs permettant
d'ajuster la complexité du calcul. Cependant, la quantité de mémoire vive requise
reste encore importante.
[0004] Les codeurs CELP appartiennent à la famille des codeurs à analyse par synthèse, dans
lesquels on utilise le modèle de synthèse au codeur. Les signaux à coder peuvent être
échantillonnés à la fréquence téléphonique (
Fe=8kHz) ou une fréquence plus élevée, par exemple à 16 kHz pour le codage en bande
élargie (bande passante de 0 à 7 kHz). Selon l'application et la qualité désirée,
le taux de compression varie de 1 à 16 : les codeurs CELP fonctionnent à des débits
de 2 à 16 kbit/s en bande téléphonique, et à des débits de 16 à 32 kbit/s en bande
élargie.
[0005] Dans un codeur numérique de type CELP, le signal de parole est échantillonné et converti
en une suite de trames de L échantillons. Chaque trame est synthétisée en filtrant
une forme d'onde extraite d'un répertoire (appelé aussi dictionnaire), multipliée
par un gain, à travers deux filtres variant dans le temps. Le répertoire d'excitation
est un ensemble de
K codes ou formes d'ondes de
L échantillons. Les formes d'ondes sont numérotées par un index entier
k, k allant de 0 à
K-1,
K étant la taille du répertoire. Le premier filtre est le filtre de prédiction à long
terme. Une analyse "LTP" (Long Term Prediction) permet d'évaluer les paramètres de
ce prédicteur à long terme et ainsi d'exploiter la périodicité des sons voisés (par
exemple : les voyelles) ; cette corrélation à long terme est due à la vibration des
cordes vocales. Le second filtre est le filtre de prédiction à court terme. Les méthodes
d'analyse par prédiction linéaire "LPC" (Linear Prediction Coding) permettent d'obtenir
ces paramètres de prédiction à court terme, représentatifs de la fonction de transfert
du conduit vocal et caractéristiques du spectre du signal. Le procédé utilisé pour
déterminer la séquence d'innovation est la méthode d'analyse par synthèse : au codeur,
toutes les séquences d'innovation du répertoire d'excitation sont filtrées par les
deux filtres LTP et LPC, et la forme d'onde sélectionnée est celle produisant le signal
synthétique le plus proche du signal de parole original selon un critère de pondération
perceptuelle.
[0006] Dans un codeur CELP, l'excitation du modèle de synthèse est donc constituée par des
formes d'ondes extraites d'un répertoire. Selon le type de ce répertoire, on distingue
deux sortes de codeurs CELP. Les répertoires des premiers codeurs CELP étaient constitués
de formes d'ondes stochastiques. Ces répertoires sont obtenus soit par apprentissage
soit par génération aléatoire. Leur inconvénient majeur est leur manque de structure
qui nécessite de les stocker et entraîne une complexité de mise en oeuvre élevée.
Le répertoire d'excitation du premier codeur CELP était un dictionnaire stochastique,
composé d'un ensemble de 1024 formes d'ondes de 40 échantillons gaussiens. Ce codeur
CELP ne fonctionnait pas en temps réel sur les calculateurs les plus puissants de
l'époque. D'autres dictionnaires stochastiques permettant de diminuer et la mémoire
et le temps de calcul nécessaires ont été introduits ; cependant, tant la complexité
que la capacité de mémoire requise restaient importantes.
[0007] Pour remédier à cet inconvénient, une autre catégorie de répertoires a été proposée
: les répertoires algébriques fortement structurés qui n'ont pas besoin d'être stockés
et dont la structure permet de développer des algorithmes rapides pour leur mise en
oeuvre. A. Gersho, dans son article "Advances in Speech and Audio Compression" (Proc.IEEE,
Vol.82, N°6, Juin 1994, pages 900-918), a présenté une bonne synthèse des travaux
en codage CELP et établit un inventaire des différents répertoires proposés dans la
littérature. Un des codeurs CELP utilisant un répertoire algébrique est le codeur
ACELP.
[0008] Les codeurs ACELP (voir WO 91/13432) ont été proposés comme candidats à plusieurs
normalisations: normalisation UIT (Union Internationale des Télécommunications) à
8kbit/s, normalisation UIT pour la visiophonie RTC à 6,8 kbit/s-5,4 kbit/s. Les modules
de prédiction à court terme, d'analyse LTP et de pondération perceptuelle sont similaires
à ceux utilisés dans un codeur CELP classique. L'originalité du codeur ACELP réside
dans le module de recherche au signal d'excitation. Le codeur ACELP présente deux
intérêts majeurs : une grande flexibilité en débit et une complexité de mise en oeuvre
ajustable. La flexibilité en débit provient de la méthode de génération du répertoire.
La possibilité de régler la complexité est due à la procédure de sélection de la forme
d'onde qui utilise une recherche focalisée à seuils adaptatifs.
[0009] Dans un codeur ACELP, le répertoire d'excitation est un ensemble virtuel (dans le
sens où il n'est pas stocké), généré algébriquement. Le générateur de codes algébriques
produit en réponse à un index
k, k variant de 0 à
K-1, un vecteur code de
L échantillons ayant très peu de composantes non nulles. Soit
N le nombre de composantes non nulles. Dans certaines applications, la dimension des
mots de code est étendue à
L+N, et les
N dernières composantes sont nulles. On suppose ici, sans affecter la généralité de
l'exposé, que
L est un multiple de
N. Les mots de code
ck sont donc composés de
N impulsions. Les amplitudes des impulsions sont fixes (par exemple ±1). Les positions
autorisées pour l'impulsion p sont de la forme
i allant de 0 à
L'-1, où
L'=
L/
N. Dans le cas où
L'=(
L+
N)/
N, la position peut être supérieure ou égale à
L, et l'impulsion correspondante est alors simplement annulée. L'index de la forme
d'onde
ck est obtenu de manière directe par la relation

et la taille du répertoire est de :
K = (
L')
N.
[0010] La sélection d'une forme d'onde dans un répertoire CELP s'effectue en recherchant
celle qui minimise l'erreur quadratique entre le signal original pondéré et le signal
synthétique pondéré. Ceci revient à maximiser la quantité
Crk=
Pk2/α
k2, où
Pk=(
D.ckT), et α
k2=∥
ck.HT∥
2 =(
ck.U.ckT), et (.)
T désigne la transposition matricielle.
D est un vecteur-cible qui dépend du signal d'entrée, du signal synthétique passé et
du filtre composé des filtres de synthèse et de pondération perceptuelle. Soit
h le vecteur de la réponse impulsionnelle de ce filtre composé :

H est la matrice LxL triangulaire inférieure de Toeplitz formée à partir de cette
réponse impulsionnelle. U = H
T.H est la matrice de covariance de
h. En notant U(i,j) l'élément de la matrice U à la ligne i et à la colonne j (0≤i,j<L),
l'élément U(i,j) est égal à :

[0011] Dans un codeur ACELP, si la forme d'onde
ck est composée de N impulsions de positions pos
i(q,k),q et d'amplitude S
q (0≤q<N), le produit scalaire
Pk du vecteur-cible
D avec une forme d'onde
ck et l'énergie α
k2 de la forme d'onde filtrée
ck ont pour expression :

et

[0012] Un des avantages du répertoire ACELP est qu'il donne lieu à une méthode sous-optimale
efficace de sélection de la meilleure forme d'onde. Cette recherche s'effectue en
imbriquant les boucles de recherche des impulsions. Pour une boucle d'ordre q, l'indice
i
q=(pos
i,q-q)/N codant la position varie dans l'ensemble [0,...,L'-1]. On accélère l'exploration
en calculant avant d'entrer dans la procédure de recherche un seuil adaptatif pour
chaque boucle. On n'entre dans la boucle de recherche de l'impulsion q que si une
quantité partielle Cr
k(q-1), calculée à partir des impulsions 0 à q-1 précédemment déterminées dans les
boucles supérieures, dépasse un seuil calculé pour la boucle q-1. La quantité partielle
peut être :
Crk(q-1)=Pk2 (q-1) /α
k2 (q-1) ou
Crk(q-1)=Pk2(q-1), où
αk2(q-1) est l'énergie de la forme d'onde composée des impulsions 0 à q-1 de c
k filtrée, et P
k(q-1) est le produit scalaire du vecteur-cible D avec la forme d'onde composée des
impulsions 0 à q-1 de c
k.
[0013] Le calcul des critères partiels est simplifié par le caractère récursif de
Pk(q) et
αk2(q). En effet, les suites {
Pk(q)}
q=0,...,N-1 et {α
k2(q)}
q=0,...,N-1 sont calculées par récurrence de la manière suivante :

et

où pos
i(p,k),p est la position de la p-ième impulsion de c
k et S
p son amplitude. L'énergie α
k2 de la forme d'onde c
k filtrée et le produit scalaire P
k de c
k avec le vecteur-cible D sont obtenus à l'issue de la récurrence (q=N-1).
[0014] Le calcul des K suites {α
k2(
q)}
q=0,...,N-1, pour k variant de 0 à K-1, nécessite de connaître des éléments de la matrice U de
covariance de la réponse impulsionnelle h du filtre composé. Dans le codeur ACELP
antérieur, tous les éléments U(i,j) de la matrice U sont calculés et stockés. La matrice
U possède les propriétés suivantes qui sont utilisées lors du calcul de ses L
2 éléments ;
- propriété de symétrie :
U(i,j) = U(j,i), pour 0≤i,j<L
- propriété de récurrence sur les diagonales : U(i-1,j-1)=U(i,j)+h(L-i).h(L-j), pour
0<i,j<L et U(i,L-1)=U(L-1,i)=h(0).h(L-1-i), pour 0≤i<L
[0015] Cependant, un calcul de la matrice U exploitant au maximum ces deux propriétés nécessite
encore :
. L(L+1)/2 multiplications et L(L-1)/2 additions,
. L2 chargements en mémoire.
[0016] En conclusion, la technique ACELP nécessite un grand nombre de chargements en mémoire
et une mémoire de taille importante. Il faut en effet stocker :
- le signal d'entrée (typiquement 80 à 360 mots de 16 bits),
- la matrice de covariance (402 à 602 mots de 16 bits),
- les signaux intermédiaires et leurs mémoires (typiquement 2 à 3K mots de 16 bits),
- le signal de sortie (typiquement 80 à 200 mots ou octets).
[0017] Il apparaît clairement que la taille de la matrice de covariance occupe une place
prépondérante. On note que, pour une application donnée, l'espace mémoire nécessaire
pour les signaux intermédiaires est incompressible ; si on veut réduire la taille
mémoire globale, il semble donc qu'il ne soit possible que de jouer sur la taille
de la mémoire nécessaire à la matrice de covariance. Or, jusqu'à présent, les experts
savaient que cette matrice était symétrique par rapport à la diagonale principale
et que certains termes n'étaient pas utiles, mais ils pensaient que ces derniers étaient
disposés dans la matrice sans un ordre déterminé.
[0018] Une première idée pour diminuer l'espace mémoire nécessaire pour la matrice de covariance
reposait sur l'exploitation de la propriété de symétrie de cette matrice. Mais, l'expérience
a montré que le stockage de la demi-matrice entraîne des calculs d'adresse plus compliqués
lors de la recherche de l'excitation ACELP, module déjà très complexe (50% du temps
CPU typiquement). Le gain en mémoire perdait alors tout intérêt face à l'augmentation
de la complexité.
[0019] Un but principal de la présente invention est de proposer un procédé de codage de
type ACELP qui réduise notablement la taille de la mémoire nécessaire au codeur.
[0020] L'invention propose ainsi un procédé de codage de parole à prédiction linéaire et
excitation par codes (CELP), dans lequel on numérise un signal de parole en trames
successives de L échantillons, on détermine de manière adaptative d'une part des paramètres
de synthèse définissant des filtres de synthèse, et d'autre part des paramètres d'excitation
incluant pour chaque trame des positions d'impulsions d'un code d'excitation de L
échantillons appartenant à un répertoire algébrique prédéterminé et un gain d'excitation
associé, et on transmet des valeurs de quantification représentatives des paramètres
déterminés. Le répertoire algébrique est défini à partir d'au moins un groupe de N
ensembles de positions d'impulsion possibles dans des codes d'au moins L échantillons,
un code du répertoire étant représenté par N positions d'impulsion appartenant respectivement
aux N ensembles d'un groupe. La détermination des paramètres d'excitation relatifs
à une trame comporte la sélection d'un code du répertoire qui maximise la quantité
Pk2/α
k2 dans laquelle
Pk=
D.ckT désigne le produit scalaire entre le code c
k du répertoire et un vecteur cible D dépendant du signal de parole de la trame et
des paramètres de synthèse, et α
k2 désigne l'énergie sur la trame du code c
k filtré par un filtre composé des filtres de synthèse et d'un filtre de pondération
perceptuelle. Le calcul des énergies α
k2 comporte un calcul et une mémorisation de composantes d'une matrice de covariance
U = H
T.H où H désigne une matrice triangulaire inférieure de Toeplitz à L lignes et L colonnes
formée à partir de la réponse impulsionnelle h(0), h(1),..., h(L-1) dudit filtre composé.
Les composantes mémorisées de la matrice de covariance sont seulement, pour au moins
un groupe de N ensembles, celles de la forme :

avec 0≤p<N et celles de la forme :

avec 0≤p<q<N, pos
i,p et pos
j,q désignant respectivement les positions d'ordre i et j dans les ensembles dudit groupe
contenant des positions possibles pour les impulsions p et q des codes du répertoire.
[0021] De cette façon, on ne stocke que les termes effectivement utilisés lors de la recherche
de l'excitation ACELP, ce qui permet de réduire considérablement la mémoire nécessaire.
Par exemple, dans le cas où le répertoire algébrique a la structure (1) définie ci-dessus
avec un seul groupe de N ensembles, le nombre d'éléments de la matrice U à stocker
est de L+L
2 (N-1) /2N au lieu de L
2 dans le cas du codeur ACELP antérieur, de sorte que la réduction d'espace mémoire
est de [L
2(N+1)/2N]-L mots de mémoire vive, soit plusieurs kilooctets pour les valeurs habituelles
de L et N.
[0022] De préférence, les composantes mémorisées de la matrice de covariance sont structurées,
pour un groupe, sous la forme de N vecteurs de corrélations et N(N-1)/2 matrices de
corrélations. Chaque vecteur de corrélations R
p,p est associé à un numéro d'impulsion p dans les codes du répertoire (0≤p<N), et est
de dimension L
p' égale au cardinal de l'ensemble dudit groupe contenant des positions possibles pour
l'impulsion p, avec des composantes i (0≤i<L
p') de la forme R
p,p(i) = U(pos
i,p,pos
i,p). Chaque matrice de corrélations R
p,q est associée à deux numéros d'impulsion différents p,q dans les codes du répertoire
(0≤p<q<N), et a
Lp' lignes et
Lq' colonnes avec des composantes de la forme R
p,q(i,j)=U(pos
i,p,pos
j,q) à la ligne i et à la colonne j (0≤i<L
p' et 0≤i<L
q'). Ce mode de rangement des composantes de la matrice de covariance facilite leur
accès lors de la recherche de l'excitation ACELP, de façon à réduire ou au moins ne
pas accroître la complexité de ce module.
[0023] Le procédé selon l'invention est applicable à divers types de codes algébriques,
c'est-à-dire quelle que soit la structure des ensembles de positions possibles pour
les différentes impulsions des codes du répertoire. La procédure de calcul des vecteurs
de corrélations et des matrices de corrélations peut être rendue relativement simple
et efficace lorsque, dans un groupe de N ensembles, les ensembles de positions possibles
pour une impulsion des codes du répertoire ont tous le même cardinal L' et que la
position d'ordre i dans l'ensemble des positions possibles pour l'impulsion p (0≤i<L',
0≤p<N) est donnée par :

δ et ε étant deux entiers tels que δ>0 et ε≥0.
[0024] D'autres particularités et avantages de la présente invention apparaîtront dans la
description ci-après d'exemples de réalisation préférés, mais non limitatifs, en référence
aux dessins annexés, dans lesquels :
- les figures 1 et 2 sont des schémas synoptiques d'un décodeur et d'un codeur CELP
utilisant un répertoire algébrique conformément à l'invention ;
- les figures 3 et 4 sont des organigrammes illustrant le calcul des vecteurs de corrélations
et des matrices de corrélations dans un premier mode de réalisation de l'invention
;
- les figures 5A et 5B, qui se placent l'une au-dessus de l'autre, montrent un organigramme
de la procédure de recherche de l'excitation dans le premier mode de réalisation ;
- les figures 6 à 8 sont des organigrammes illustrant le calcul des vecteurs de corrélations
et des matrices de corrélations dans un second mode de réalisation de l'invention
; et
- la figure 9 est un organigramme illustrant une procédure sous-optimale de recherche
de l'excitation dans le second mode de réalisation.
[0025] Le processus de synthèse de parole mis en oeuvre dans un codeur et un décodeur CELP
est illustré sur la figure 1. Un générateur d'excitation 10 délivre un code d'excitation
c
k appartenant à un répertoire prédéterminé en réponse à un index k. Un amplificateur
12 multiplie ce code d'excitation par un gain d'excitation β, et le signal résultant
est soumis à un filtre 14 de synthèse à long terme. Le signal de sortie u du filtre
14 est à son tour soumis à un filtre 16 de synthèse à court terme, dont la sortie
ŝ constitue ce qu'on considère ici comme le signal de parole synthétisé. Bien entendu,
d'autres filtres peuvent également être mis en oeuvre au niveau du décodeur, par exemple
des post-filtres, comme il est bien connu dans le domaine du codage de la parole.
[0026] Les signaux précités sont des signaux numériques représentés par exemple par des
mots de 16 bits à une cadence d'échantillonnage Fe égale par exemple à 8 kHz. Les
filtres de synthèse 14, 16 sont en général des filtres purement récursifs. Le filtre
14 de synthèse à long terme a typiquement une fonction de transfert de la forme 1/B(z)
avec B(z)=1-Gz
-T. Le retard T et le gain G constituent des paramètres de prédiction à long terme (LTP)
qui sont déterminés d'une manière adaptative par le codeur. Les paramètres LPC du
filtre 16 de synthèse à court terme sont déterminés au codeur par une prédiction linéaire
au signal de parole. La fonction de transfert du filtre 16 est ainsi de la forme 1/A(z)
avec

dans le cas d'une prédiction linéaire d'ordre P (P≃10 typiquement), a
i représentant le i-ième coefficient de prédiction linéaire.
[0027] La figure 2 montre le schéma d'un codeur CELP. Le signal de parole s(n) est un signal
numérique, par exemple fourni par un convertisseur analogique-numérique 20 traitant
le signal de sortie amplifié et filtré d'un microphone 22. Le signal s(n) est numérisé
en trames successives de Λ échantillons elles-mêmes divisées en sous-trames, ou trames
d'excitation, de L échantillons (par exemple Λ=240, L=40).
[0028] Les paramètres LPC, LTP et EXC (index k et gain d'excitation β) sont obtenus au niveau
du codeur par trois modules d'analyse respectifs 24, 26, 28. Ces paramètres sont ensuite
quantifiés de façon connue en vue d'une transmission numérique efficace, puis soumis
à un multiplexeur 30 qui forme le signal de sortie du codeur. Ces paramètres sont
également fournis à un module 32 de calcul d'états initiaux de certains filtres du
codeur. Ce module 32 comprend essentiellement une chaîne de décodage telle que celle
représentée sur la figure 1. Le module 32 permet de connaître au niveau du codeur
les états antérieurs des filtres de synthèse 14, 16 du décodeur, déterminés en fonction
des paramètres de synthèse et d'excitation antérieurs à la sous-trame considérée.
[0029] Dans une première étape du processus de codage, le module 24 d'analyse à court terme
détermine les paramètres LPC (coefficients a
i du filtre de synthèse à court terme) en analysant les corrélations à court terme
du signal de parole s(n). Cette détermination est effectuée par exemple une fois par
trame de Λ échantillons, de manière à s'adapter à l'évolution du contenu spectral
du signal de parole. Les méthodes d'analyse LPC sont bien connues dans la technique,
et ne seront donc pas détaillées ici. On pourra par exemple se reporter à l'ouvrage
"Digital Processing of Speech Signals" de L.R. Rabiner et R.W. Shafer, Prentice-Hall
Int., 1978.
[0030] L'étape suivante du codage consiste en la détermination des paramètres LTP de synthèse
à long terme. Ceux-ci sont par exemple déterminés une fois par sous-trame de L échantillons.
Un soustracteur 34 soustrait du signal de parole s(n) la réponse à un signal d'entrée
nul du filtre de synthèse à court terme 16. Cette réponse est déterminée par un filtre
36 de fonction de transfert 1/A(z) dont les coefficients sont donnés par les paramètres
LPC qui ont été déterminés par le module 24, et dont les états initiaux ŝ sont fournis
par le module 32 de façon à correspondre aux p derniers échantillons du signal synthétique.
Le signal de sortie du soustracteur 34 est soumis à un filtre 38 de pondération perceptuelle.
La fonction de transfert W(z) de ce filtre de pondération perceptuelle est déterminée
à partir des paramètres LPC. Une possibilité est de prendre W(z)=A(z)/A(z/γ), où γ
est un coefficient de l'ordre de 0,8. Le rôle du filtre de pondération perceptuelle
38 est d'accentuer les portions du spectre où les erreurs sont les plus perceptibles.
[0031] L'analyse LTP en boucle fermée effectuée par le module 26 consiste, de façon classique,
à sélectionner pour chaque sous-trame le retard T qui maximise la corrélation normalisée
:

où x'(n) désigne le signal de sortie du filtre 38 pendant la sous-trame considérée,
et y
T(n) désigne le produit de convolution u(n-T)*h'(n). Dans l'expression ci-dessus, h'(0),
h'(1) ,...,h'(L-1) désigne la réponse impulsionnelle du filtre de synthèse pondéré,
de fonction de transfert W(z)/A(z). Cette réponse impulsionnelle h' est obtenue par
un module 40 de calcul de réponses impulsionnelles, en fonction des paramètres LPC
qui ont été déterminés pour la sous-trame. Les échantillons u(n-T) sont les états
antérieurs du filtre 14 de synthèse à long terme, fournis par le module 32. Pour les
retards T inférieurs à la longueur d'une sous-trame, les échantillons manquants u(n-T)
sont obtenus par interpolation sur la base des échantillons antérieurs, ou à partir
du signal de parole. Les retards T, entiers ou fractionnaires, sont sélectionnés dans
une fenêtre déterminée, allant par exemple de 20 à 143 échantillons. Pour réduire
la plage de recherche en boucle fermée, et donc pour réduire le nombre de convolutions
y
T(n) à calculer, on peut d'abord déterminer un retard T
1 en boucle ouverte par exemple une fois par trame, puis sélectionner les retards en
boucle fermée pour chaque sous-trame dans un intervalle réduit autour de T
1. La recherche en boucle ouverte consiste plus simplement à déterminer le retard T
1 qui maximise l'autocorrélation du signal de parole s(n) éventuellement filtré par
le filtre inverse de fonction de transfert A(z). Une fois que le retard T a été déterminé,
le gain G de prédiction à long terme est obtenu par :

[0032] Pour rechercher l'excitation CELP relative à une sous-trame, le signal Gy
T(n), qui a été calculé par le module 26 pour le retard optimal T, est d'abord soustrait
du signal x'(n) par le soustracteur 42. Le signal résultant x(n) est soumis à un filtre
à rebours 44 qui fournit un signal D(n) donné par :

où h(0), h(1),..., h(L-1) désigne la réponse impulsionnelle du filtre composé
des filtres de synthèse et du filtre de pondération perceptuelle, calculée par le
module 40. En d'autres termes, le filtre composé a pour fonction de transfert W(z)/[A(z).B(z)].
En notation matricielle, on a donc :

avec

et

[0033] Le vecteur D constitue un vecteur-cible pour le module 28 de recherche de l'excitation.
Ce module 28 détermine un mot de code du répertoire qui maximise la corrélation normalisée
Pk2/
αk2 dans laquelle :


[0034] L'indice k optimal ayant été déterminé, le gain d'excitation β est pris égal à β
= P
k/α
k2.
[0035] Le répertoire algébrique des codes d'excitation possible est défini à partir d'au
moins un groupe de N ensembles E
0, E
1,..., E
N-1 de positions possibles pour des impulsions d'ordre 0,1,...,N-1 et d'amplitude S
0, S
1,..., S
N-1 dans des codes d'au moins L échantillons. Un code du répertoire est représenté par
N positions d'impulsions appartenant respectivement aux ensembles E
0, E
1,..., E
N-1 d'un même groupe de N ensembles. Dans le cas général, les cardinaux L'
0, L'
1,..., L'
N-1 des ensembles E
0, E
1,..., E
N-1 peuvent être égaux ou différents, et ces ensembles peuvent être disjoints ou non.
[0036] Dans le premier mode de réalisation ci-après, on supposera qu'il y a un seul groupe
dont les N ensembles E
0, E
1,..., E
N-1 ont tous le même cardinal L', et que la position d'ordre i dans l'ensemble E
p des positions possibles pour l'impulsion p (0≤i<L', 0≤p<N) est donnée par :

δ et ε étant deux entiers tels que 0≤ε<δ.
[0037] Après avoir calculé et mémorisé certains termes de la matrice de covariance U, le
module 28 procède à la recherche du code d'excitation pour la sous-trame courante.
Les composantes mémorisées de la matrice de covariance sont d'une part celles de la
forme :

structurées sous la forme de N vecteurs de corrélations R
p,p (0≤p<N) à L' composantes, et d'autre part celles de la forme:

structurées sous la forme de N(N-1)/2 matrices de corrélations R
p,q (0≤p<q<N) à L' lignes et L' colonnes.
[0038] Le calcul des N vecteurs de corrélations R
p,p est effectué par le module 28 de la manière illustrée sur la figure 3. Ce calcul
comprend une boucle indexée par un entier i décroissant de L'-1 à 0. A l'initialisation
50 de cette boucle, la variable entière k est prise égale à L-δL·N-ε (on suppose ici
L-δL'N-ε ≤ 0), et la variable d'accumulation
cor est prise égale à 0. Dans l'itération i de la boucle, les composantes R
p,p(i) sont calculées successivement pour p décroissant de N-1 à 0. La variable p est
d'abord prise égale à N-1 (étape 52). Les instructions
cor =
cor+h(k).h(k) et k=k+1 (étape 54) sont effectuées δ fois (si L-δL'N-ε < 0, les termes
h(k) avec k<0 sont pris égaux à 0). Ensuite (étape 56), la composante R
p,p(i) est prise égale à la variable d'accumulation
cor, et l'entier p est décrémenté d'une unité. Le test 58 est alors effectué sur la variable
entière p. Si p≥0, on revient à l'étape 54 pour δ exécutions des instructions correspondantes.
Si le test 58 montre que p<0, la variable entière i est décrémentée d'une unité (étape
60), puis comparée à 0 au test 62. Si i≥0, on revient avant l'étape 52 pour effectuer
l'itération suivante dans la boucle. Le calcul des N vecteurs de corrélations est
terminé lorsque le test 62 montre que i<0.
[0039] Ce calcul des N vecteurs de corrélations nécessite de l'ordre de δL'N additions,
δL'N multiplications et L'N chargements en mémoire. On remarquera que l'initialisation
50 du calcul pcurrait être différente. Par exemple, l'entier k peut également être
initialisé à L-δL'N à l'étape 50, chaque itération dans les boucles indexées par p
décroissant de N-1 à 0 étant alors constituée par δ-ε exécutions de l'étape 54, suivies
par l'étape 56 suivie par ε exécutions de l'étape 54. Le calcul reste correct parce
qu'au total δ étapes 54 sont effectuées entre deux mémorisations successives de termes
R
p,p(i).
[0040] Le calcul des N(N-1)/2 matrices de corrélations R
p,q peut être effectué par le module 28 de la manière illustrée sur la figure 4. Pour
chaque valeur de l'entier t comprise entre 1 et N-1 et de l'entier d' comprise entre
0 et L'-1, ce calcul comprend une boucle B
t,d', indexée par un entier i décroissant de L'-1-d' à 0. A l'initialisation 70 du calcul,
l'entier t est pris égal à 1. L'entier d' est ensuite pris égal à 0 à l'étape 72.
L'étape 74 correspond à l'initialisation de la boucle indexée par l'entier i. L'entier
i est initialisé à L'-1-d', l'entier j à L'-1, l'entier d à δ.(t+d'N), l'entier k
à L-δL'N-ε, et la variable d'accumulation
cor à 0. Dans l'itération i de la boucle N
t,d', les composantes R
p,p+t(i,i+d') sont calculées successivement pour p décroissant de N-1-t à 0 puis, si i>0,
les composantes R
q,q,N-t(i+d',i-l) sont calculées successivement pour q décroissant de t-1 à 0. L'itération
i commence par l'initialisation 76 des variables entières q et p à N-1 et N-1-t, respectivement.
On exécute alors δ fois l'étape 78 consistant à ajouter le terme h(k).h(k+d) à la
variable d'accumulation
cor et à incrémenter la variable k d'une unité. A l'étape 80, la composante R
p,q(i,j) est prise égale à la variable d'accumulation
cor, et les entiers p et q sont chacun décrémentés d'une unité. On effectue ensuite le
test 82 sur l'entier p. Si p≥0, on retourne avant l'étape 78 qui sera de nouveau exécutée
δ fois. Si le test 82 montre que p<0, on effectue le test 84 sur l'entier i. Si i>0,
on passe à l'étape 86 où l'entier p' est initialisé à N-1, l'entier q restant égal
à t-1. L'étape 86 est suivie par 8 exécutions successives de l'étape 88 consistant,
comme l'étape 78, à ajouter h(k).h(k+d) à la variable d'accumulation
cor et à incrémenter la variable entière k d'une unité. Ensuite, la composante R
q,p'(j,i-1) est prise égale à la variable d'accumulation
cor, et les entiers p' et q sont chacun décrémentés d'une unité, à l'étape 90. On effectue
ensuite le test 92 sur la valeur de l'entier q. Si q≥0, on revient avant l'étape 88
qui sera de nouveau exécutée δ fois. Si le test 92 montre que q<0, les entiers i et
j sont chacun décrémentés d'une unité à l'étape 94, puis on revient avant l'étape
76 pour l'exécution de l'itération suivante dans la boucle B
t,d'. Cette boucle est terminée lorsque le test 84 montre que i≤0. L'entier d' est alors
incrémenté d'une unité (étape 96), puis comparé au nombre L' (test 98). Si d'<L',
on revient avant l'étape 74 pour effectuer une autre boucle B
t,d' indexée par l'entier i. Si le test 98 montre que d'=L', l'entier t est incrémenté
d'une unité (étape 100), puis comparé au nombre N (test 102). Si t<N on revient avant
l'étape 72 pour calculer les composantes des matrices R
p,p+t et R
q,q+N-t pour la nouvelle valeur de t. Le calcul des N(N-1)/2 matrices de corrélations est
terminé lorsque le test 102 montre que t=N.
[0041] Ce calcul des N(N-1)/2 matrices de corrélations nécessite seulement de l'ordre de
δL'
2N(N-1)/2 additions, δL'
2N(N-1)/2 multiplications et L'
2N(N-1)/2 chargements en mémoire.
[0042] La recherche du code d'excitation peut être effectuée par le module 28 conformément
à l'organigramme représenté sur les figures 5A et 5B. A l'étape 120, on calcule d'abord
N-1 seuils partiels T(0),...,T(N-2), et on initialise le seuil T(N-1) à une valeur
négative, par exemple -1. Les seuils partiels T(0),...,T(N-2) sont positifs et calculés
en fonction du vecteur d'entrée D et du compromis visé entre l'efficacité de la recherche
de l'excitation et la simplicité de cette recherche. Des valeurs élevées des seuils
partiels tendent à diminuer la quantité de calculs nécessaires à la recherche de l'excitation,
tandis que des valeurs faibles des seuils partiels conduisent à une recherche plus
exhaustive dans le répertoire ACELP.
[0043] La recherche du code d'excitation comprend N boucles B
0, B
1, ..., B
N-1 imbriquées les unes dans les autres. A l'initialisation 122
0 de la boucle B
0, l'index i
0 est pris égal à 0. L'itération d'index i
0 dans la boucle B
0 comprend une étape 124
0 de calcul de deux termes P(0) et α
2(0) selon :


[0044] On effectue ensuite la comparaison 126
0 entre les quantités P
2(0) et T(0).α
2(0). Si P
2(0)<T(0).α
2(0), alors on passe à l'étape 130
0 d'incrémentation de l'index i
0 puis au test 132
0 où l'index i
0 est comparé au nombre L'. Lorsque i
0 devient égal à L', la recherche de l'excitation est terminée. Sinon, on revient avant
l'étape 124
0 pour procéder à l'itération suivante dans la boucle B
0. Si la comparaison 126
0 montre que P
2(0)≥T(0).α
2(0), alors la boucle B
1 est exécutée. Les boucles B
q, pour 0<q<N-1 se composent d'instructions identiques :
- une initialisation 122q, où on prend iq=0 ;
- pour l'itération d'index iq, le calcul 124q des deux quantités P(q) et α2(q) selon :


- pour l'itération d'index iq, une comparaison 126q entre les quantités P2(q) et T(q).α2(q) ;
- si la comparaison 126q montre que P2(q)≥T(q).α2(q), passage à la boucle Bq+1 ;
- si la comparaison 126q montre que P2(q)<T(q).α2(q), incrémentation 130q de l'index iq, puis comparaison 132q entre l'index iq et le nombre L' ;
- si la comparaison 132q montre que iq<L', retour avant l'étape 124q pour l'itération suivante ; et
- si la comparaison 132q montre que iq=L', passage à l'étape 130q-1 d'incrémentation de l'index iq-1 de la boucle supérieure.
[0045] La boucle B
N-1 se compose des mêmes instructions que les boucles précédentes. Toutefois, si la comparaison
126
N-1 montre que P
2 (N-1)≥T(N-1).α
2(N-1), alors on exécute une étape 128 avant de passer à l'étape 130
N-1 d'incrémentation de l'index i
N-1. Cette étape 128 consiste d'une part à mettre à jour le seuil T(N-1) selon : T(N-1)
= P
2(N-1)/α
2(N-1), et d'autre part à mémoriser les paramètres relatifs au code qui vient d'être
testé. Ces paramètres comprennent le gain d'excitation β pris égal à P(N-1)/α
2(N-1), et les N index i
0,i
1,...,i
N-1 permettant de trouver les positions des N impulsions du code. Les N index i
0,i
1,...,i
N-1 peuvent être compilés en un index global k donné par :

cet index k étant codé sur N.log
2(L') bits.
[0046] On constate que le rangement des composantes en matrices de corrélations permet,
au cours de la recherche en boucles imbriquées, d'adresser les composantes nécessaires
de la matrice U pour une boucle par une simple incrémentation des pointeurs i
q d'une unité, au lieu d'avoir à faire des calculs d'adresses plus compliqués comme
dans le cas du codeur ACELP antérieur.
[0047] Il est possible d'assigner plusieurs valeurs pour l'amplitude d'une ou plusieurs
impulsions des codes du répertoire. Dans ce cas, on attribue de préférence les derniers
numéros d'ordre aux impulsions en question. S'il y a n
q valeurs d'amplitude possibles pour l'impulsion q, on exécute alors n
q fois la boucle B
q de l'organigramme des figures 5A et 5B avec à chaque fois une valeur différente de
l'amplitude S
q, et on mémorise en outre à l'étape 128 le nombre de fois que la boucle B
q a été exécutée avant de rencontrer une valeur supérieure à P
2(N-1)/α
2(N-1). Ce nombre sera également transmis au décodeur qui pourra donc retrouver l'amplitude
S
q à appliquer à l'impulsion correspondante du code d'excitation.
[0048] En référence à la figure 1, le décodeur ACELP comprend un démultiplexeur 8 recevant
le flux binaire issu du codeur. Les valeurs quantifiées des paramètres d'excitation
EXC et des paramètres de synthèse LTP et LPC sont fournies au générateur 10, à l'amplificateur
12 et aux filtres 14, 16 pour reconstituer le signal synthétique ŝ, qui peut par
exemple être converti en analogique par le convertisseur 18 avant d'être amplifié
puis appliqué à un haut-parleur 19 pour restituer la parole originale.
[0049] Dans un second mode de réalisation de l'invention, on considère un répertoire algébrique
constitué à partir de M groupes de N ensembles
{E0(m),E1(m),...,
EN-1(m)} (0≤m<M) de positions possibles pour les impulsions 0,1,...,N-1 des codes. Les MN
ensembles ont tous le même cardinal L', et la position d'ordre i dans l'ensemble
Ep(m) du groupe m contenant des positions possibles pour l'impulsion p(0≤1<L', 0≤p<N, 0≤m<M)
est donnée par :

δ et ε
(0),...,ε
(m-1) étant des entiers tels que 0≤ε
(0)<...<ε
(M-1)<δ. Un code du répertoire est alors caractérisé par un index de groupe m et par N
index de position i.
[0050] Une procédure de codage optimale comparable à celle précédemment décrite conduit
au calcul de M groupes de N vecteurs de corrélations
Rp,p(m) (0≤m<M, 0≤p<N) :

et de M groupes de N(N-1)/2 matrices de corrélations
Rp,q(m) (0≤m<M, 0≤p<q<N) :

[0051] Pour calculer les composantes des M groupes de vecteurs de corrélations, on peut
procéder conformément à l'organigramme de la figure 3 avec les modifications suivantes
:
- la variable entière k est intialisée à L-δL'N à l'initialisation 50 de la boucle de
calcul ; et
- les δ exécutions de l'étape 54 et l'étape 56 sont remplacées par la séquence représentée
sur la figure 6 : l'étape 54 est d'abord exécutée δ-ε(M-1) fois avant de prendre Rp,p(M-1)(i)=cor à l'étape 55M-1 ; ensuite, pour m décroissant de M-2 à 0, on exécute ε(m+1) - ε(m) fois l'étape 54 puis on prend Rp,p(m)(i)=cor à l'étape 55m ; enfin on exécute encore ε(0) fois l'étape 54 avant de décrémenter l'entier p à l'étape 57.
[0052] Pour calculer les composantes des M groupes de matrice de corrélations, on peut procéder
conformément à l'organigramme de la figure 4 avec les modifications suivantes :
- la variable entière k est initialisée à L-δL'N à l'initialisation 74 d'une boucle
Bt,d' ;
- les δ exécutions de l'étape 78 et l'étape 80 sont remplacées par la séquence représentée
sur la figure 7 ; l'étape 78 est d'abord exécutée δ-ε(M-1) fois avant de prendre Rp,q(M-1) (i,j)=cor à l'étape 79M-1 ; ensuite, pour m décroissant de M-2 à 0, on exécute ε(m+1)-ε(m) fois l'étape 78 puis on prend Rp,q(m) (i,j)=cor à l'étape 79m ; enfin on exécute encore ε(0) fois l'étape 78 avant de décrémenter les entiers p et q à l'étape 81 ; et
- les δ exécutions de l'étape 88 et l'étape 90 sont remplacées par la séquence représentée
sur la figure 8 : l'étape 88 est d'abord exécutée δ-ε(M-1) fois avant de prendre Rq,p'(M-1) (j,i-1)=cor à l'étape 89M-1 ; ensuite, pour m décroissant de M-2 à 0, on exécute ε(m+1)-ε(m) fois l'étape 88 puis on prend Rq,p'(m) (j,i-1)=cor à l'étape 89m ; enfin on exécute encore ε(0) fois l'étape 88 avant de décrémenter les entiers p' et q à l'étape 91.
[0053] Une fois que les vecteurs de corrélations et les matrices de corrélations ont été
calculés, la recherche de l'excitation peut être simplement effectuée en exécutant
une fois pour chacun des M groupes la recherche en boucles imbriquées représentée
sur les figures 5A et 5B. Il suffit alors de mémoriser à l'étape 128 le nombre de
fois que la recherche en boucles imbriquées a été entièrement exécutée avant la recherche
courante pour obtenir l'index m du groupe permettant de reconstituer le code d'excitation
sélectionné.
[0054] On comprend donc que le second mode de réalisation généralise le premier qui correspond
au cas particulier M=1.
[0055] Le second mode de réalisation avec M>1 permet cependant de mettre en oeuvre une procédure
de recherche sous-optimale qui procure encore d'importants gains en espace mémoire.
Cette procédure consiste à ne mémoriser les vecteurs de corrélations
Rp,p(m) et les matrices de corrélations
Rp,q(m) que pour µ des index de groupe m (1≤µ<M). Le gain supplémentaire en espace mémoire
est alors d'un facteur µ/M. Cette procédure revient à subdiviser la matrice de covariance
U en sous-blocs avec l'approximation U(i,j)≈U(i-1,j-1) au sein de chaque sous-bloc.
Si le nombre d'impulsions N est important, on aura intérêt à ne pas prendre une valeur
trop faible du rapport µ/M afin de ne pas trop dégrader la qualité du codage. Un ajustement
des nombres µ et M permet de déterminer un compromis entre la qualité du codage et
l'espace mémoire nécessaire.
[0056] Lorsque cette procédure sous-optimale est mise en oeuvre, on shunte les étapes 55
m, 79
m et 89
m (figures 6 à 8) relatives à ceux des index m pour lesquels on ne mémorise pas les
vecteurs de corrélations
Rp,p(m) et les matrices de corrélations
Rp,q(m).
[0057] Si, pour simplifier l'exposé sans en affecter la généralité, on considère le cas
{M=2, µ=1} dans lequel on ne mémorise que les composantes des vecteurs
Rp,p(0) et des matrices
Rp,q(0), la recherche de l'excitation peut être effectuée conformément à l'organigramme des
figures 5A et 5B en modifiant les boucles B
q(0≤q<N) de la manière indiquée sur la figure 9. A l'étape 124
q, les termes
P(q) et α
2(q) sont calculés comme dans le cas des figures 5A et 5B relativement au groupe m=0.
Si le test 126
q montre que
P2(q)/α
2(q) est supérieur au seuil T(q), on exécute les boucles inférieures en commençant par
B
q+1 ou, si q=N-1, on effectue la mise à jour 128 du seuil et des paramètres d'excitation
qui comprennent en outre l'index m alors pris égal à 0. On passe ensuite à l'étape
125
q, qui est exécutée directement si le test 126
q montre que
P2(q)<T(q).α2(q). A l'étape 125
q, on calcule le terme P(q) relativement au groupe m=1. Le terme correspondant α
2(q) n'est pas recalculé étant donné que, dans l'approximation utilisée, on le considère
égal au terme α
2(q) précédemment calculé pour m=0. Le test 127
q consiste ensuite à comparer
P2(q) et
T(q).α2(q). Si
P2(q)/α2(q) est supérieur au seuil T(q), on exécute les boucles inférieures en commençant par
B
q+1 ou, si q=N-1, on effectue la mise à jour 128 du seuil et des paramètres d'excitation,
qui comprennent l'index m alors pris égal à 1. On passe ensuite à l'incrémentation
130
q de l'entier i
q, qui est exécutée directement si le test 127
q montre que
P2(q)<T(q).α2(q).
Exemple 1
[0058] Dans ce premier exemple mettant en oeuvre le premier mode de réalisation décrit ci-dessus,
on utilise des trames de 30 ms (soit Λ=240 échantillons à 8kHz), subdivisées en sous-trames
de 5ms (L=40). Le répertoire ACELP comprend des codes de N=4 impulsions ayant chacune
L'=11 positions possibles données par la relation (2) avec δ=1 et ε=0. Si une impulsion
occupe la dernière position, qui est supérieure ou égale à L=40, son amplitude est
annulée par le décodeur. Un code d'excitation correspond à un code tronqué du répertoire
(échantillons 0 à L-1=39 seulement), et peut donc contenir 0, 1, 2, 3 ou 4 impulsions.
La répartition des impulsions dans une sous-trame est présentée dans le tableau I.
L'allocation du débit binaire par trame est présentée dans le tableau II. 204 bits
par trame correspondent à un débit binaire de 6,8 kbit/s.
TABLEAU II
Paramètres |
Sous-trames 1 et 4 |
Sous-trames 2,3,5 et 6 |
Total par trame |
LPC |
|
|
30 |
Retard LTP(T) |
8 |
5 |
36 |
impulsions |
14+1 |
14+1 |
90 |
signe de β |
1 |
1 |
6 |
gains G et β |
7 |
7 |
42 |
Total |
|
|
204 |
[0059] De façon connue, les coefficients LPC sont convertis sous forme de paramètres de
raies spectrales (LSP) quantifiés vectoriellement. Les retards LTP, qui peuvent prendre
256 valeurs entières ou fractionnaires entre 19⅛ et 143 sont quantifiés sur 8 bits.
Ces 8 bits sont transmis dans les sous-trames 1 et 4 et, pour les autres sous-trames,
une valeur différentielle est codée sur 5 bits seulement. Le répertoire contient K=(L')
N=14641 mots de code. 14 bits sont donc nécessaires pour coder les positions, plus
un bit donnant le signe de l'impulsion p=3.
[0060] Dans cet exemple 1, la mise en oeuvre de l'invention permet de diviser par 2,5 la
taille de la mémoire requise au codeur pour stocker les composantes de la matrice
de covariance, tout en obtenant des signaux de sortie identiques à ceux que permettait
d'obtenir le codeur ACELP antérieur. La mémoire vive nécessaire pour stocker les données
et variables utile au codeur et les composantes de la matrice de covariance est ainsi
réduite de 2264+1936=4200 mots de 16 bits à 2264+770=3034 mots de 16 bits, ce qui
permet un adressage sur 12 bits compatible avec les mémoires RAM statiques et les
processeurs de traitement numérique (DSP) courants.
Exemple 2
[0061] Dans ce second exemple mettant en oeuvre le premier mode de réalisation décrit ci-dessus,
on utilise des trames de 30 ms (Λ=240) subdivisées en sous-trames de 6ms (L=48). Le
répertoire ACELP comprend des codes de N=3 impulsions ayant chacune L'=16 positions
possibles données par la relation (2) avec δ=1 et ε=0. Comme δL'N=L, les mots de codes
ne sont pas tronqués pour obtenir l'excitation qui comporte toujours N=3 impulsions.
[0062] Les paramètres LPC et LTP sont déterminés de façon semblable à l'exemple 1. Le répertoire
contient K=(L')
N=4096 mots de code. 12 bits sont donc nécessaires pour coder les positions. Le débit
binaire est alors de 158 bits par trame, soit 5,3 kbit/s.
[0063] Dans cet exemple 2, la mise en oeuvre de l'invention permet de diviser par 2,8 la
mémoire requise au codeur pour stocker les composantes de la matrice de covariance
tout en obtenant des signaux de sortie identiques (gain de 1488 mots de 16 bits permettant
un adressage sur 12 bits dans la mémoire vive).
Exemple 3
[0064] Dans ce troisième exemple mettant en oeuvre le second mode de réalisation avec la
procédure de recherche sous-optimale (µ=1), on utilise des trames de 30ms (Λ=240)
subdivisées en sous-trames de 7,5 ms (L=60). Le répertoire ACELP est construit à partir
de M=2 groupes de N=4 ensembles de positions de cardinal L'=8. Les positions sont
données par les relations (2
m) avec δ=2, ε
(0)=0 et ε
(1)=1. Les mots de code du répertoire ont une longueur δL'N=64 supérieure à la longueur
L d'une sous-trame. Ils doivent donc être tronqués (échantillons 0 à L-1=59 seulement)
pour obtenir une excitation contenant 2, 3 ou 4 impulsions. La répartition des impulsions
dans une sous-trame est présentée dans le tableau III pour le groupe m=0 et dans le
tableau IV pour le groupe m=1.

[0065] Le répertoire contient K=M.(L')
N=8192 mots de code. 13 bits sont donc nécessaires pour coder les positions, plus 4
bits donnant les signes des impulsions. Les paramètres de synthèse étant codés comme
dans le cas des exemples 1 et 2, le codeur produit 153 bits par trame, ce qui représente
un débit de 5,1 kbit/s.
[0066] Dans cet exemple, la mise en oeuvre de l'invention permet de diviser par 9,8 la taille
de la mémoire requise au codeur pour stocker les composantes de la matrice de covariance,
la réduction de mémoire vive requise étant de 3680 mots de 16 bits (416 composantes
utiles de la matrice U au lieu de (δL'N)
2=4096). Le second mode de réalisation de l'invention, appliqué sans la procédure sous-optimale,
nécessiterait de stocker 832 composantes de la matrice U.
1. Procédé de codage de parole à prédiction linéaire et excitation par codes (CELP),
dans lequel on numérise un signal de parole en trames successives de L échantillons,
on détermine de manière adaptative d'une part des paramètres de synthèse définissant
des filtres de synthèse, et d'autre part des paramètres d'excitation incluant pour
chaque trame des positions d'impulsions d'un code d'excitation de L échantillons appartenant
à un répertoire algébrique prédéterminé et un gain d'excitation associé, et on transmet
des valeurs de quantification représentatives des paramètres déterminés, dans lequel
le répertoire algébrique est défini à partir d'au moins un groupe de N ensembles (E
0, E
1, ..., E
N-1) de positions d'impulsion possibles dans des codes d'au moins L échantillons, un
code du répertoire étant représenté par N positions d'impulsion appartenant respectivement
aux N ensembles de positions d'un groupe, et dans lequel la détermination des paramètres
d'excitation relatifs à une trame comporte la sélection d'un code du répertoire qui
maximise la quantité
Pk2/α k2 dans laquelle
Pk = D.ckT désigne le produit scalaire entre le code c
k du répertoire et un vecteur cible D dépendant du signal de parole de la trame et
des paramètres de synthèse, et α
k2 désigne l'énergie sur la trame du code c
k filtré par un filtre composé des filtres de synthèse et d'un filtre de pondération
perceptuelle, le calcul des énergies α
k2 comportant un calcul et une mémorisation de composantes d'une matrice de covariance
U = H
T.H où H désigne une matrice triangulaire inférieure de Toeplitz à L lignes et L colonnes
formée à partir de la réponse impulsionnelle h(0), h(1),..., h(L-1) dudit filtre composé,
caractérisé en ce que les composantes mémorisées de la matrice de covariance sont
seulement, pour au moins un groupe de N ensembles, celles de la forme :

avec 0≤p<N et celles de la forme :

avec 0≤p<q<N, pos
i,p et pos
j,q désignant respectivement les positions d'ordre i et j dans les ensembles (E
p,E
q) dudit groupe contenant des positions possibles pour les impulsions p et q des codes
du répertoire.
2. Procédé selon la revendication 1, caractérisé en ce que, pour un groupe de N ensembles,
lesdites composantes mémorisées de la matrice de covariance sont structurées sous
la forme de N vecteurs de corrélations et N(N-1)/2 matrices de corrélations, chaque
vecteur de corrélations Rp,p étant associé à un numéro d'impulsion p dans les codes du répertoire (0 ≤ p < N)
et étant de dimension Lp' égale au cardinal de l'ensemble (Ep) dudit groupe qui contient des positions possibles pour l'impulsion p, avec des composantes
i (0≤i<Lp') de la forme Rp,p(i)=U(posi,p,posi,p), et chaque matrice de corrélations Rp,q étant associée à deux numéros d'impulsion différents p,q dans les codes du répertoire
(0≤p<q<N) et ayant Lp' lignes et Lq' colonnes, avec des composantes de la forme Rp,q(i,j) = U(posi,p,posj,q) à la ligne i et à la colonne j (0≤i<Lp' et 0≤j<Lq').
3. Procédé selon la revendication 2, caractérisé en ce que les ensembles (E
0, E
1,..., E
N-1) dudit groupe qui contiennent des positions possibles pour une impulsion des codes
du répertoire ont tous le même cardinal L', la position d'ordre i dans l'ensemble
(E
p) des positions possibles pour l'impulsion p (0≤i<L', 0≤p<N) étant donnée par :

δ et ε étant deux entiers tels que δ > 0 et ε ≥ 0.
4. Procédé selon la revendication 2, caractérisé en ce que le répertoire algébrique est
défini à partir de M groupes de N ensembles de L' positions possibles pour une impulsion
d'un code du répertoire, avec M>1, la position d'ordre i dans l'ensemble (
Ep(m)) du groupe m contenant des positions possibles pour l'impulsion p (0≤i<L', 0≤m<M,
0≤p<N) étant donnée par:

δ, ε
(0) ,..., ε
(M-1) étant des entiers tels que 0 ≤ ε
(0)<... < ε
(M-1)<δ.
5. Procédé selon la revendication 4, caractérisé en ce que les vecteurs de corrélations
(Rp,p(m)) et les matrices de corrélations (Rp,q(m)) sont mémorisés seulement pour µ des groupes, µ étant un entier tel que 1≤µ<M.
6. Procédé selon la revendication 3, 4 ou 5, caractérisé en ce que le calcul des N vecteurs
de corrélations relatifs à un groupe comprend une initialisation d'une variable entière
k et d'une variable d'accumulation cor, et une boucle indexée par un entier i décroissant de L'-1 à 0, l'itération i dans
ladite boucle comprenant les calculs successifs des composantes Rp,p(i) desdits vecteurs pour p décroissant de N-1 à 0, une composante Rp,p(i) étant prise égale à la variable d'accumulation cor après δ incrémentations de la variable entière k et δ additions correspondantes des
termes h(k).h(k) à la variable d'accumulation cor.
7. Procédé selon la revendication 3, 4 ou 5, caractérisé en ce que le calcul des N(N-1)/2
matrices de corrélations relatives à un groupe comprend, pour tout entier t dans l'intervalle
[1, N-1] et tout entier d' dans l'intervalle [0,L'-1], une initialisation d'une variable
entière k et d'une variable d'accumulation cor, et une boucle (Bt,d') indexée par un entier i décroissant de L'-1-d' à 0, l'itération i dans ladite boucle
comprenant les calculs successifs des composantes Rp,p+t(i,i+d') desdites matrices pour p décroissant de N-1-t à 0 puis, si i > 0, les calculs
successifs des composantes Rq,q+N-t(i+d',i-1) desdites matrices pour q décroissant de t-1 à 0, une composante Rp,p+t(i,i+d') ou Rq,q+N-t(i+d,i-1) étant prise égale à la variable d'accumulation cor après δ incrémentations de la variable entière k et δ additions correspondantes des
termes h(k).h(k+d) à la variable d'accumulation cor, avec d = δ.(t+d'N).
1. Verfahren zur Sprachcodierung mit linarer Prädiktion und Anregung mittels Codes (CELP),
mit Digitalisierung eines Sprachsignals in aufeinanderfolgende Raster von L Abtastproben,
adaptiver Bestimmung von Syntheseparametern, welche Synthesefilter definieren, einerseits,
und Anregungsparametern, welche für jedes Raster Impulspositionen eines Anregungscode
von L Abtastproben, der einem vorgegebenen algebraischen Verzeichnis zugehört, und
eine zugeordnete Anregungsverstärkung umfassen, andererseits, und Übertragung von
für die bestimmten Parameter repräsentativen Quantifizierungswerten, bei dem das algebraische
Verzeichnis ausgehend von mindestens einer Gruppe von N Mengen (E
0, E
1, ..., E
N-1) von möglichen Impulspositionen in Codes mit mindestens L Abtastproben definiert
ist, wobei ein Code des Verzeichnisses durch N Impulspositionen dargestellt ist, die
jeweils den N Mengen von Positionen einer Gruppe zugehören, und bei dem die Bestimmung
der Anregungsparameter relativ zu einem Raster die Auswahl eines Code aus dem Verzeichnis
beinhaltet, der die Menge P
k2/α
k2 maximiert, in der P
k = D·c
kT das Skalarprodukt zwischen dem Code c
k des Verzeichnisses und einem Zielvektor D bezeichnet, der von dem Sprachsignal des
Rasters und den Syntheseparametern abhängt, und α
k2 die Energie des durch ein aus den Synthesefiltern und einem Wahrnehmungswichtungsfilter
zusammengesetztes Filter gefilterten Code c
k an dem Raster bezeichnet, wobei die Berechnung der Energien α
k2 eine Berechnung und eine Speicherung von Komponenten einer Kovarianzmatrix U = H
T·H beinhaltet, wobei H eine absteigend dreiecksförmige Toeplitz-Matrix mit L Zeilen
und L Spalten bezeichnet, die ausgehend von der Impulsantwort h(0), h(1), ..., h(L-1)
des zusammengesetzten Filters gebildet ist,
dadurch gekennzeichnet, daß die gespeicherten Komponenten der Kovarianzmatrix für
mindestens eine Gruppe von N Mengen nur diejenigen mit der Form:

mit 0≤p<N, und diejenigen mit der Form:

mit 0≤p<q<N sind, wobei pos
i,p und pos
j,q jeweils die Positionen der Ordnung i bzw. j in den Mengen (E
p,E
q) der Gruppe bezeichnen, welche mögliche Positionen für die Impulse p und q der Codes
des Verzeichnisses enthält.
2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, daß für eine Gruppe von N Mengen
die gespeicherten Komponenten der Kovarianzmatrix in Form von N Korrelationsvektoren
und N(N-1)/2 Korrelationsmatrizen strukturiert sind, wobei jeder Korrelationsvektor
Rp,p einer Impulsnummer p in den Codes des Verzeichnisses (0 ≤ p < N) zugeordnet ist und
eine Dimension Lp, besitzt, die gleich der Kardinalzahl der Menge (Ep) der Gruppe ist, welche mögliche Positionen für den Impuls p mit Komponenten i (0≤i<Lp') der Form Rp,p(i)=U(posi,p,posi,p) enthält, und jede Korrelationsmatrix Rp,q in den Codes des Verzeichnisses (0≤p<q<N) zwei unterschiedlichen Impulsnummern p,q
zugeordnet ist und Lp, Zeilen und Lq' Spalten mit Komponenten der Form Rp,q(i,j) = U(posi,p,posj,q) in der Zeile i und in der Spalte j (0≤i<Lp, und 0≤j<Lq,) aufweist.
3. Verfahren nach Anspruch 2, dadurch gekennzeichnet, daß alle Mengen (E
0, E
1, ..., E
N-1) der Gruppe, die mögliche Positionen für einen Impuls der Codes des Verzeichnisses
enthalten, die gleiche Kardinalzahl L' besitzen, wobei die Position der Ordnung i
in der Menge (E
p) der möglichen Positionen für den Impuls p (0≤i<L', 0≤p<N) gegeben ist durch:

wobei δ und ε zwei ganze Zahlen wie δ > 0 und ε ≥ 0 sind.
4. Verfahren nach Anspruch 2, dadurch gekennzeichnet, daß das algebraische Verzeichnis
ausgehend von M Gruppen von N Mengen von L' möglichen Positionen für einen Impuls
eines Code des Verzeichnisses definiert ist, mit M>1, wobei die Position der Ordnung
i in der Menge (E
p(m)) der Gruppe m, die mögliche Positionen für den Impuls p (0≤i<L', 0≤m<M, 0≤p<N) enthält,
gegeben ist durch:

wobei δ,ε
(0),..., ε(
M-1) ganze Zahlen wie 0 ≤ ε
(0)<... < ε
(M-1)<δ sind.
5. Verfahren nach Anspruch 4, dadurch gekennzeichnet, daß die Korrelationsvektoren (Rp,p(m)) und die Korrelationsmatrizen (Rp,q(m)) nur für µ der Gruppen gespeichert werden, wobei µ eine ganze Zahl wie 1≤µ<M ist.
6. Verfahren nach Anspruch 3, 4 oder 5, dadurch gekennzeichnet, daß die Berechnung der
N Korrelationsvektoren bezüglich einer Gruppe eine Initialisierung einer ganzzahligen
Variablen k und einer Akkumulationsvariablen cor sowie eine durch eine ganze Zahl i absteigend von L'-1 bis 0 indexierte Schleife
beinhaltet, wobei die Iteration i in der Schleife die aufeinanderfolgenden Berechnungen
der Komponenten Rp,p(i) der Vektoren für p absteigend von N-1 bis 0 beinhaltet, und eine Komponente Rp,p(i) nach δ Inkrementierungen der ganzzahligen Variablen k und δ entsprechenden Additionen
der Ausdrücke h(k)·h(k) mit der Akkumulationsvariablen cor gleich der Akkumulationsvariablen cor genommen wird.
7. Verfahren nach Anspruch 3, 4 oder 5, dadurch gekennzeichnet, daß die Berechnung der
N(N-1)/2 Korrelationsmatrizen bezüglich einer Gruppe für jedes ganzzahlige t in dem
Intervall [1, N-1] und jedes ganzzahlige d' in dem Intervall [0, L'-1] eine Initialisierung
einer ganzzahligen Variablen k und einer Akkumulationsvariablen cor und eine durch eine ganze Zahl i absteigend von L'-1-d' bis 0 indexierte Schleife
(Bt,d') beinhaltet, wobei die Iteration i in der Schleife die aufeinanderfolgenden Berechnungen
der Komponenten Rp,p+t(i,i+d') der Matrizen für p absteigend von N-1-t bis 0 beinhaltet, daraufhin, falls
i > 0, die aufeinanderfolgenden Berechnungen der Komponenten Rq,q+N-t(1+d',i-1) der Matrizen für q absteigend von t-1 bis 0, und eine Komponente Rp,p+t(i,i+d') oder Rq,q+N-t(i+d',i-1) nach δ Inkrementierungen der ganzzahligen Variablen k und δ entsprechenden
Additionen der Ausdrücke h(k)·h(k+d) mit der Akkumulationsvariablen cor gleich der Akkumulationsvariablen cor genommen wird, mit d = δ·(t+d'N).
1. Code-excited linear prediction (CELP) speech coding method, comprising the steps of:
digitizing a speech signal as successive frames of L samples; adaptively determining
on the one hand synthesis parameters defining synthesis filters, and on the other
hand excitation parameters including, for each frame, pulse positions in an excitation
code of L samples belonging to a predetermined algebraic codebook and an associated
excitation gain; and transmitting quantization values representative of the determined
parameters, wherein the algebraic codebook is defined on the basis of at least one
group of N sets (E
0, E
1,..., E
N-1) of possible pulse positions in codes of at least L samples, a code from the codebook
being represented by N pulse positions belonging respectively to the N sets of positions
of a group, and wherein the determination of the excitation parameters relating to
a frame includes selecting a code from the codebook which maximizes the quantity
Pk2/αk2 in which
Pk=D.ckT denotes the scalar product of a code c
k from the codebook and a target vector D depending on the speech signal of the frame
and on the synthesis parameters, and α
k2 denotes the energy in the frame of the code c
k filtered by a compound filter made up of the synthesis filters and of a perceptual
weighting filter, the calculation of the energies
αk2 including a calculation and memory-storage of components of a covariance matrix U=H
T.H where H denotes a lower triangular Toeplitz matrix with L rows and L columns, formed
from the impulse response h(0), h(1),..., h(L-1) of said compound filter,
characterized in that the memory-stored components of the covariance matrix are
only, for at least one group of N sets, those of the form:

with 0≤p<N and those of the form:

with 0≤p<q<N, pos
i,p and pos
j,q respectively denoting the positions of order i and j in the sets (E
p,E
q) of said group containing possible positions for the pulses p and q of the codes
from the codebook.
2. Method according to Claim 1, characterized in that, for a group of N sets, said memory-stored
components of the covariance matrix are structured in the form of N correlation vectors
and N(N-1)/2 correlation matrices, each correlation vector Rp,p being associated with a pulse number p in the codes from the codebook (0≤p<N) and
being of dimension Lp' equal to the cardinal of the set (Ep) from said group which contains possible positions for the pulse p, with components
i (0≤i<Lp') of the form Rp,p(i)=U(posi,p,posi,p), and each correlation matrix Rp,q being associated with two different pulse numbers p,q in the codes from the codebook
(0≤p<q<N) and having Lp' rows and Lq' columns, with components of the form Rp,q(i,j)= U(posi,p,posj,q) in row i and in column j (0≤i<Lp' and 0≤j<Lq').
3. Method according to Claim 2, characterized in that the sets (E
0, E
1,..., E
N-1) of said group which contain possible positions for a pulse of the codes from the
codebook all have the same cardinal L', the position of order i in the set (E
p) of the possible positions for the pulse p (0≤i<L', 0≤p<N) being given by:

δ and ε being two integers such that δ > 0 and ε ≥ 0.
4. Method according to Claim 2, characterized in that the algebraic codebook is defined
on the basis of M groups of N sets of L' possible positions for a pulse of a code
from the codebook, with M>1, the position of order i in the set
(Ep(m)) of the group m containing the possible positions for the pulse p (0≤i<L', 0≤m<M,
0≤p<N) being given by:

δ, ε
(0),..., ε
(M-1) being integers such that 0 ≤ ε
(0)<...<ε
(M-1)<δ.
5. Method according to Claim 4, characterized in that the correlation vectors (Rp,p(m)) and the correlation matrices (Rp,q(m)) are stored in memory only for u of the groups, u being an integer such that 1≤µ<M.
6. Method according to Claim 3, 4 or 5, characterized in that the calculation of the
N correlation vectors relating to a group comprises an initialization of an integer
variable k and of an accumulation variable cor, and a loop indexed by an integer i decreasing from L'-1 to 0, the iteration i in
said loop comprising the successive calculations of the components Rp,p(i) of said vectors for p decreasing from N-1 to 0, a component Rp,p(i) being taken equal to the accumulation variable cor after δ incrementations of the integer variable k and δ corresponding additions of
the terms h(k).h(k) to the accumulation variable cor.
7. Method according to Claim 3, 4 or 5, characterized in that the calculation of the
N(N-1)/2 correlation matrices relating to a group comprises, for every integer t in
the interval [1, N-1] and every integer d' in the interval [0,L'-1], an initialization
of an integer variable k and of an accumulation variable cor, and a loop (Bt,d,) indexed by an integer i decreasing from L'-1-d' to 0, the iteration i in said loop
comprising the successive calculations of the components Rp,p+t(i,i+d') of said matrices for p decreasing from N-1-t to 0 and then, if i > 0, the
successive calculations of the components Rq,q+N-t(i+d',i-1) of said matrices for q decreasing from t-1 to 0, a component Rp,p+t(i,i+d') or Rq,q+N-t(i+d',i-1) being taken equal to the accumulation variable cor after δ incrementations of the integer variable k and δ corresponding additions of
the terms h(k).h(k+d) to the accumulation variable cor, with d = δ.(t+d'N).