IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Signal Discussion :

Méthode LPC (Voice processing)


Sujet :

Signal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2012
    Messages : 6
    Par défaut Méthode LPC (Voice processing)
    Bonjour à tous,

    Je suis un jeune étudiant (ou plutôt vieux suivant les points de vues), actuellement en échange à Buenos Aires, je bosse sur des projets de traitement de la parole ou de la voix.

    Bref, je m'essaye sur quelques petits algorithmes en mettant en pratique les notions de bases du traitement de la parole. Notamment la méthode LPC (Linear Predictive Coding), outil puissant et surtout très simple permettant de rapidement modéliser pendant un court instant le conduit vocal par un filtre linéaire.

    Pour l'instant, je veux simplement extraire les coefficients d'une frame donnée, préalablement fenêtrée par une fenêtre de Hamming afin d'optimiser le calcul des coefficients. De ces coefficients je veux construire le signal prédit puis faire la différent signal vrai-signal prédit pour extraire le pitch.

    Mon problème est le suivant, je calcule les coefficient via une fonction coefslpc.m , faisant appel à la fonction matlab très pratique car déjà codée.

    je la met pour information :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    %%
    %%%
    %   x : data waveform
    %   p : filter order
    %   fs: sample frequency
    %   overlap: between 0 and 1
    %   w_t = windows time
    function [Coefs frames] =CalculCoefsLPC(x,p,fs,overlap,w_t)
     
     
        %Window design
        size_w = w_t*fs;  
        w = hamming(size_w);  %Hamming windows
     
        l_x = length(x);
        Coefs = zeros(floor(l_x/size_w),p+1); %%Frame Matrix
        frames = zeros(floor(l_x/size_w),size_w);
     
        for i=1:round(floor(l_x/size_w)/overlap)
     
            if ((i-1)*round(size_w*overlap)+size_w)> l_x
                %%%We ignore lasts samples don't care about it
            else
            frames(i,:)=x((i-1)*round(size_w*overlap)+1:(i-1)*round(size_w*overlap)+size_w).*w;
            Coefs(i,:)=lpc(x((i-1)*round(size_w*overlap)+1:(i-1)*round(size_w*overlap)+size_w).*w,p);
            end
        end
     
     
     
    end
    Cette fonction fonctionne très bien, je recupère en sortie ma matrice de frame fenetrée et mes coefficients associés.

    Ensuite, je veux prédire mon signal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    %%
    % Z : Windowed frame
    % coefs : LPC coefficients corresponding to this frame
    % N : frame size (in samples)
    % 
    function predic = CalculExcitation(Z,coefs)
     
        p = length(coefs)-1;
        predic = zeros(1,length(Z));
     
        for n=(1+p):length(Z)
     
            for i=p:-1:1
                predic(n)= predic(n) + coefs(i)*Z(n-i);
            end
     
        end
     
     
     
    end
    Et là malheur, le signal prédit a la bonne forme si je le compare au frame dont il est issu, mais a une amplitude 40 fois inférieur, je ne comprends d'où cela provient ? Auriez-vous une idée ? Je ne fais pas de pre-emphasis (j'ai essayé avec, le résultat est presque pire, ni de sous échantillonage .. bref je bloque vraiment.

    Si quelqu'un connait un peu ce domaine et a une idée je suis vraiment preneur.

    Merci de m'avoir lu. Je reste à disposition pour vos questions.

    Au revoir.

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2012
    Messages : 6
    Par défaut Résolu
    Bonjour à tous,

    J'ai finalement résolu mon problème, j'ai mal lu la documentation matlab.

    J'explique pour ceux qui auront ce problème un jour (ou pas).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     for i=p:-1:1
                predic(n)= predic(n) + coefs(i)*Z(n-i);
            end

    Ici mon indice va de p à 1, il doit s'arrêter à 2 car selon la théorie, le vecteur prédit par la LPC est un vecture [a1 a2 a3...ap] mais a1 est tjrs egal à 1 ce n'est pas vraiment un coefficient à proprement dit, et la théorie nous dit que

    \hat{x}(n) = somme de k=1 à p de ak*s(n-k) , mais il faut penser à s'arrêter à 2 pour ne pas prendre en compte ce 1, de plus il convient de mettre un signe - comme le stipule la doc lpc de matlab

    Voilà !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Méthode LPC
    Par enit2010 dans le forum MATLAB
    Réponses: 1
    Dernier message: 02/12/2010, 21h27
  2. Précisions sur la class Process et la méthode waitFor()
    Par Pierre.B dans le forum Général Java
    Réponses: 13
    Dernier message: 28/08/2009, 16h51
  3. Réponses: 5
    Dernier message: 20/05/2008, 12h49
  4. Réponses: 12
    Dernier message: 10/08/2006, 09h44
  5. Cryptage en C selon la méthode de césat
    Par shenron dans le forum C
    Réponses: 2
    Dernier message: 31/05/2002, 08h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo