next up previous contents
Seguinte: Cálculo do Pitch e Acima: Codificação, Compressão ou Análise Anterior: Codificação, Compressão ou Análise   Conteúdo

Coeficientes LPC

O objectivo do LPC é encontrar os melhores coeficientes $a_{i}$ do predictor, ou seja, os que melhor representam o frame que está a ser analisado. A escolha mais comum para a optimização destes coeficientes é pelo critério da raiz quadrada do erro. Note-se que esta abordagem não é única e que a optimização dos parâmetros é um vasto tópico.

Assim sendo, o que se quer é encontrar os coeficientes de forma a minimizar a função do chamado erro quadrático dada por:


\begin{displaymath}
E = \sum_{n=0}^{L-1} [e[n]]^2 = \sum_{n=0}^{L-1} [ x[n] - \sum_{i=1}^{N} a_{i} x[n-i] ]^2
\end{displaymath}

O processo de encontrar estes coeficientes pode ser feito fazendo todas as derivadas $\frac{d E}{d a_{i}}$ iguais a zero:


\begin{displaymath}
\frac{d E}{d a_{i}} = \frac{d}{d a_{i}} \sum_{n=0}^{L-1} [ x[n] - \sum_{i=1}^{N} a_{i} x[n-i] ]^2 = 0
\end{displaymath}

O que resulta na equação:


\begin{displaymath}
y[n] = \sum_{i=1}^{p} a_{i} R(i-j) = - R(j)
\end{displaymath}

para 1 $<$= j $<$= p, onde R é a autocorrelação do sinal x(n) e p o número de coeficientes calculados para cada frame.

As equações acima descritas são chamadas de equações normais ou equações de Yule-Walker. Em forma de matriz, as equações podem ser escritas de maneira equivalente como R * a = r, onde a matriz de autocorrelação R é uma matriz de Toeplitz1 com elementos ri,j = R(i-j) e o vector r é o vector de autocorrelação rj = R(j) e o vector a é o vector dos parâmetros $a_{i}$.

Calcular a solução da matriz R * a = r é um processo relativamente pesado em termos de computacão. O método de eliminação de Gauss é provavelmente a solução mais antiga para resolver matrizes mas este não tira proveito eficazmente da simetria de R e r.

Um algoritmo bem mais rápido é o da recursividade de Levinson, proposto por N. Levinson em 1947 e modificado mais tarde em 1959 por J. Durbin, originando o nome Levinson-Durbin para este algoritmo que recursivamente calcula a solução da matriz.

Os coeficientes $a_{i}$ do filtro são então calculados usando este algoritmo que parte da auto-correlação R(m).

A auto-correlação requere que algumas suposições iniciais sejam feitas, nomeadamente, que x[n] seja considerado zero fora do frame actual.

A auto-correlação do sinal x[n] é dada por:


\begin{displaymath}
R(m) = \sum_{i=0}^{N-i} x[i] x[i-m]
\end{displaymath}

Para um filtro de ordem N = 10, temos então:


\begin{displaymath}
R =
\left( \begin{array}{ccccccccccc}
R(0) & R(1) & \dots &...
...& \vdots \\
R(9) & R(8) & \dots & R(0)\\
\end{array} \right)
\end{displaymath}


\begin{displaymath}
r =
\left( \begin{array}{c}
R(1)\\
R(2)\\
\vdots\\
R(10)\\
\end{array} \right)
\end{displaymath}

Os coeficientes $a_{i}$ do filtro são encontrados resolvendo o sistema Ra = r. O algoritmo de Levinson-Durbin permite chegar à solução com $O(N^2)$ em vez de $O(N^3)$ usando o conhecimento de que a matriz R é uma matriz de Toeplitz.

Recursividade de Levinson Durbin:

$ E^{(0)} = R(0) $

$ k_{i} = [ R(i) - \sum_{j=1}^{(i-1)} \alpha_{j}^{i-1} R(i-j) ] /
E^{(i-1)} \hspace{2.5 mm} com \hspace{1 mm} i = 1,2, \dots, 10 $

$ \alpha_{i}^{(i)} = k_{i} $

$ \alpha_{j}^{(j)} = \alpha_{j}^{(i-1)} - k_{i} \alpha_{(i-j)}^{(i-1)}
\hspace{2.5 mm} com \hspace{1 mm} j = 1,2, \dots, i-1 $

$ E^{(i)} = (1 - k_{i}^2) E^{(i-1)} $

Resolve-se para i = 1,2, ..., 10 e depois atribui-se:


\begin{displaymath}
a_{i} = - \alpha_{i}^{10}
\end{displaymath}


next up previous contents
Seguinte: Cálculo do Pitch e Acima: Codificação, Compressão ou Análise Anterior: Codificação, Compressão ou Análise   Conteúdo
2003-07-23