[Clam-devel] lpc formant extraction question

Xavier Amatriain xavier at create.ucsb.edu
Tue Jun 19 08:41:22 PDT 2007


Hi Abe and all, (and now already back from Spain!)

abe escribió:
> From what I understand, the Levinson-Durbin is a preceding step.  Let 
> me explain it b/c I think it helps me understand it better and also 
> b/c maybe someone will catch me if I'm making a mistake...
> The general procedure is
> windowing->autocorrelation coefficients->LPC coefficients->formants.
> The Levinson-Durbin recursion is the step that goes from the 
> autocorrelation coefficients to LPC coefficients. For a linear 
> prediction order of p, you use the previous p samples in a linear 
> model to predict the p+1 sample.  The p coefficients of this linear 
> model are the LPC coefficients.  To get these, you do the 
> Levinson-Durbin algorithm which uses the auto correlation coefficients 
> to recursively solve the LPC coefficients from 1 (first order filter)  
> to p (pth order filter).
> To get the formants, you have to solve the linear model of the LPC 
> coefficients, which I think is just finding the roots of a polynomial 
> or the poles of the filter.  The LPC coefficients are real valued, but 
> the roots are complex.  The arg/angle of the root/pole is the formant 
> frequency and the magnitude is the formant bandwidth.
>
> I've read up on it the first week of the SoC, so I think I understand 
> it, but if I'm mistaken or missing something let me know.
You are right. I am not familiar with Sandra's code either. What I would 
say is that there are plenty of examples of implementations of the method
"out there" so it should be easy to follow. The classical paper 
(although only available if you have IEEE subscription, I think) is the 
one by Snell and Milinazzo:

http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel4/89/5813/00222882.pdf?arnumber=222882

Then you have a bunch of more efficient implementations that have come 
up after that. For instance:

Fast formant estimation by complex analysis of LPC coefficients: 
http://www.eurasip.org/content/Eusipco/2004/defevent/papers/cr1750.pdf

Note also that there are even advanced methods that combine root finding 
with spectral methods such as those based on spectral segments or peaks:

A Robust Formant Extraction Algorithm Combining Spectral Peak Picking 
and Root Polishing

http://www.hindawi.com/GetArticle.aspx?doi=10.1155/ASP/2006/67960&e=ref

But a simple root finding, although inefficient, might do at first.

> Are there any particular libraries that I should look at?
Definitely the ones to look at are Boost´s implementation of BLAS: 
http://www.boost.org/libs/numeric/ublas/doc/index.htm
and Lapack++ (http://math.nist.gov/lapack++/). I am not sure you can use 
Boost to find roots directly so maybe you have to
turn to Lapack.






More information about the clam-devel mailing list