[Clam-devel] lpc formant extraction question

abe abe.kazemzadeh at gmail.com
Wed Jun 13 19:54:49 PDT 2007


Hi Everyone,

I wanted to 1) update the list about what I'm working on, 2) to ask 
about a feature that I'm looking for, and 3) ask for any general input 
anyone feels like giving.

1) I'm working on formant extraction, which  aims to get a 
parameterization of speech sounds (vowels, mainly) based on a model that 
relates the the vocal tract shape to the spectral envelope of the 
sound.  You can see a nice example of a formant synthesizer, where the 
input to the system (the vocal folds vibrations) is filtered by the 
formants to create the output sound.  The formant extraction is the 
opposite of this, getting the formants from the speech input (and the 
by-product/residual is the vocal fold vibration). 

The usefulness of this is that the first formant corresponds to the size 
of the cavity below the constriction created by the tongue (you can hear 
it by flicking your adam's apple when making different vowels) and the 
second formant corresponds to the cavity between the constriction of the 
tongue and the lips (you can hear it by flicking your cheek or 
whistling). The third and higher formants are related to rounding of the 
lips and more complex sounds like english 'r'. The way I'm planning to 
do this is to use the LPC, which is  thankfully already implemented.  
I've been looking at the code, but I'm not  quite sure how to get what I 
want...

2) The LPC autocorrelation returns the filter coefficients for the the 
model of the vocal tract.  What I'm trying to get is the poles that are 
obtained by solving the polynomial represented by the LPC coefficients 
(these are the formants).  By looking at the code I wasn't able to 
exactly tell whether I can do this or not. 

One place I looked was in the LPModel.*xx code.  There's a comment in 
LPModel.cxx that mentions the poles, but it seems like it's actually 
getting the spectrum and if it is getting the poles, I don't see how to 
access them in a public method. 

The other place I looked was the matrix operations that are defined in 
clam.  I consulted the matlab 'roots' function, which could be used to 
get the roots/poles from the filter coefficients.  I realized that I 
should find code that gets the eigen values of a matrix.  Grepping thru 
the src files (find .. -name "*xx" -exec grep -iHn eigen '{}' ';') 
showed that the functions that I was looking for have been commented 
out.  I'm drawing a preliminary conclusion that they aren't implemented, 
but I wanted to double check about this.

3) If you made it to this point in my long email, youre a true 
champion.  You probably have  lots of miscellaneous advice to give me...

Thanks,
Abe

/************************
Abe Kazemzadeh
CS PhD Student
SAIL Lab
University of Southern California
*************************/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: abe.kazemzadeh.vcf
Type: text/x-vcard
Size: 255 bytes
Desc: not available
URL: <http://lists.clam-project.org/pipermail/clam-devel-clam-project.org/attachments/20070613/9bedbddf/attachment-0003.vcf>


More information about the clam-devel mailing list