Overblog Suivre ce blog
Editer la page Administration Créer mon blog
/ / /

 

 

cC.gifodage très bas débit de la parol. Ce type de codage est très intéressant 

 

 

 

 

Les applications de ce type de codage sont multiples.

 

astronaute-02.jpg

 

 

Le codage très bas débit de la parole s'avère très robuste dans des

 

situations de fortes perturbations ou lorsque le message doit parcourir de très grandes distances (dans le cadre du programme des missions vers la planète Mars par exemple).

 

 

 

 

C'est pourquoi, malgès l'apparence rudimentaire, ce type de transmission a toute sa place au sein des nouvelles technologies.

 

 

 

 

3.3.1.1  -  Approche automatique du traitement bas débit

 

LPC 10

 

Le codeur OTAN LPC 10

 

 

    Ce codeur est un standard défini pour convertir un signal vocal analogique en un signal numérique grâce à un codage type LPC (Linear Predictive Coding). Le premier objectif de ce standard était de faciliter l'interopérabilité des systèmes de communications gouvernementales qui utilisaient un débit de 2400 bit/s pour les signaux vocaux.


    La première partie de ce codeur consistait en l'échantillonnage du signal de parole à 8kHz. Cet échantillonnage était évidemment précédé d'un filtrage par respect du théorème de Shannon. Typiquement, ce filtre était un passe-bande qui offrait une plage de fréquences allant de 100 à 3600Hz. Toutes cette première partie, que ne l'on distingue pas sur la figure suivante, ne sera pas à implémenter sous Matlab car on supposera que les échantillons à coder seront déjà dans le format désiré.

 

    Le schéma suivant montre le fonctionnement de l'ensemble codeur/décodeur LPC 10.


Codeur_lpc10.jpg

    La partie supérieure du schéma est le sujet de ce projet. C'est la partie effectuant le codage du signal de parole. Elle est constituée de deux actions : l'analyse spectrale et la détection du fondamental.

Ces actions seront appliquées typiquement sur des fenêtres coulissantes de 30ms.

 

L'analyse spectrale se fera grâce à une analyse LPC d'ordre 10. Après codage, les coefficients résultants de cette analyse LPC seront communiqués à un filtre de synthèse permettant de recréer l'enveloppe spectrale approchée (approximation des coefficients pour le codage) du signal. Nous n'implémenterons pas ici le codage binaire, mais il faut savoir qu'à chaque approximation des coefficients correspond un code binaire. La détection du fondamental se fera via un algorithme  de détection relativement simple, les résultats seront transmis après codage à un générateur d'impulsions périodiques recréant les pitchs locaux du signal de parole. Le décodeur est donc un organe de synthèse, ce qui signifie que le signal de sortie ne sera qu'un signal approché du signal d'entrée. Cela est essentiellement dù à l'approximation au niveau du codage du pitch et des coefficients.


implémentation du codage sous Matlab.

 

%Programme réalisant le codage LPC-10

%Ce codage demande une analyse spectrale

%et une recherche de la fréquence fondamentale (le pitch)

function [ parcor1, parcor2, VF1, VF2]=LPC10(signal);

parcor1=0;

parcor2=0;

VF1=0;

VF2=0;

[Y,FS,MODE,FORMAT]=loadwav(signal);

N=floor(length(Y)/240); %nombre de fenêtres distinctes!! de 30ms

M=3*N;                  %nombre de fenêtres de 80ms

Y=Y(1:N*240);

for i=1:(M-2);

    temp = hamming(240).*Y(((i-1)*80+1):(((i-1)*80)+240));

    %$$$$$$$$$$$$$$$$$$$ANALYSE SPECTRALE$$$$$$$$$$$$$$$$$$$$$$%

    [A,G] = LPC(temp,10);

    ra=lpcar2rf(A);     %LPCAR2RF Convert ar coefficients to PARCOR                         %(reflection)coefficients AR=(RF)

    ramod=codLPC10(ra);

    parcor1 = [parcor1 ra]

    parcor2 = [parcor2 ramod];

    %$$$$$$$$$$$$$$$$DETECTION DU FONDAMENTAL$$$$$$$$$$$$$$$$$$%

    F=pitchp(8000,temp);

    F0=pitchcod(F);

    VF1=[VF1 F];

    VF2=[VF2 F0];

   

end;

 


Les Fonctions / implémentation Matlab

 

 

Fonction 1

 

%Programme appelant les diff�rentes matrices en fonction du Ki

%Effectue ensuite une comparaison

function ramod=codLPC10(ra)

i=1;

ramod=ra;

X=Kone(i);

[a,b]=size(X);

for i=1:a,

if (X(i,1)<=ra(1,2))&(ra(1,2)<=X(i,2))

ramod(1,1)=X(i,3);

end;

end;

 

Fonction 2

% Reflection Coefficients 1 and 2 (for k(1) and k(2))

function X = Kone(i)

X = [ -1 -0.9844 -0.9844; -0.9843 -0.9688 -0.9688; -0.9687 -0.9531 -0.9531;

-0.9530 -0.9375 -0.9375; -0.9374 -0.9063 -0.9218; -0.9062 -0.8750 -0.8906;

-0.8749 -0.8281 -0.8438; -0.8280 -0.7656 -0.7812; -0.7655 -0.6875 -0.7187;

-0.6874 -0.6094 -0.6406; -0.6093 -0.5313 -0.5625; -0.5312 -0.4219 -0.4688;

-0.4218 -0.3125 -0.3593; -0.3124 -0.2032 -0.2500; -0.2031 -0.0938 -0.1406;

-0.0937 0.0937 0.0313; 0.0938 0.2031 0.1406; 0.2032 0.3124 0.2500; 0.3125 0.4218 0.3593;

0.4219 0.5312 0.4688; 0.5313 0.6093 0.5623; 0.6094 0.6874 0.6406; 0.6875 0.7655 0.7187;

0.7656 0.8280 0.7812; 0.8281 0.8749 0.8438; 0.8750 0.9062 0.8906; 0.9063 0.9374 0.9218;

0.9375 0.9530 0.9375; 0.9531 0.9687 0.9531; 0.9688 0.9843 0.9688; 0.9844 1 0.9844];

 

Fonction 3

function [f0]= pitchp(sr,xin)

% Copyright (c) 1995 Philipos C. Loizou

cn1=rceps(xin);

 

LF=floor(sr/500);

HF=floor(sr/70);

cn=cn1(LF:HF);

[mx_cep ind]=max(cn);

 

if mx_cep > 0.09 & ind >LF

f0= sr/(LF+ind);

else f0=0;

end

 

Fonction 4

 

% Pitch and voicing : encoding

function [F0]= pitchcod(F)

X = [50 52 51; 52 53.5 53; 53.5 55 54; 55 56.5 56; 56.5 58 57; 58 60 59; 60 62 61;

62 64 63; 64 66 65; 66 68 67; 68 70 69; 70 72.5 71; 72.5 75.5 74; 75.5 78.5 77;

78.5 81.5 80; 81.5 85 83;85 89 87; 89 93 91; 93 97.5 95; 97.5 101.5 100; 101.5 104 103; 

104 106.5 105; 106.5 109.5 108; 109.5 112.5 111; 112.5 116 114; 116 119.5 118;

119.5 123 121; 123 127 125; 127 131 129; 131 135.5 133; 135.5 140.5 138;

140.5 145.5 143; 145.5 151 148; 151 157 154; 157 164 160; 164 170.5 167; 170.5 179 174; 

179 187 184; 187 195 190; 195 202.5 200; 202.5 207.5 205; 207.5 213 210; 213 219 216;

219 225 222; 225 231.5 228; 231.5 238.5 235; 238.5 246 242; 246 254 250; 254 262 258;

262 271 266; 271 281 276; 281 291 286; 291 302 296; 302 314 308; 314 326.5 320;

326.5 340.5 333; 340.5 356 348; 356 372.5 364; 372.5 390.5 381; 390.5 450 400];

i=1;

F0=F;

[a,b]=size(X);

for i=1:a,

   if (X(i,1)<=F)&(F<X(i,2))

   F0=X(i,3);

   end;

end;

 


  Plus de détail sur l"implémentation de ce codeur sous Matlab document au format pdf

 

 

 

 

 

 

ALISP

Automatic Language Independent Speech  Processing est  une approche automatique permettant un codage de la parole  à très bas débit, mais pas seulement.

Le codeur LPC 10

Partager cette page

Repost 0
Published by

Présentation

  • : Le blog de outilsrecherche
  • Le blog de outilsrecherche
  • : Blog d'un thésard qui partage ses connaissances et ses recherches. Logiciels, environnements, notes perso, Parole, reconnaissance automatique, modélisation, acoustique, biologie, cognition, neuro-sciences, langage, audition, production de la parole traitement du signal et informatique
  • Contact

Recherche

Archives

Liens