Sign in

username:

password:



Not a member?

Search speechcoding



Search tips

Subscribe to speechcoding



speechcoding by Keywords

ACELP | ADPCM | AMBE | AMR | AMR-NB | CELP | Codebook | DTMF | G.723 | G.726 | G.729 | GSM | Interpolation | LPC | LSF | LSP | MELP | PCM | Perceptual | Pitch | PSOL | QCELP | Quantization | SMV | VAD | Vocoder


Discussion Groups

See Also

Embedded SystemsFPGAElectronics

Discussion Groups | Speech Coding | Method of Finding LPC Coefficients for Digital Filter

Technical discussions related to Speech Coding (all itu and other vocoders, ACELP, CELP, AMR, etc)

  

Post a new Thread

Method of Finding LPC Coefficients for Digital Filter - alexandra3753 - Jun 28 12:03:23 2009

Hi, I'm doing some speech processing using Linear Predictive Coding, and
I'm trying to use MATLAB to find the feedback coefficients, ai, for a digital
filter of the form 

y[n] = x[n] + Ʃ(ai * y[n-i]) 

(sum goes from i = 1 to i = N where N is the order of the filter) 

where n is the index of the sample point, y[n] is the output, x[n] is a pulse
input with period equal to the pitch period of the speech segment, and the
y[n-i] are the past outputs. I'm pretty sure the feedforward coefficients in
this case should be b = [1 0 0 0....0] of length N +1, so I ignore them in the
formula. 

I wrote a program which will solve for the ai's by simply looping through and
plugging in each value of y[n], a 0 for x[n] and the previous values for y[n],
but now I'm confused: 

Once I solve for my ai's, I can plug them back in and get my vector y[n], since
that's what I used to solve for the coefficients in the first place... but when
I use the filter function in MATLAB 

y = filter(b,a,x(n)); 

where x(n) is the pulse input, I thought y should be equal or at least close to
my original output vector y[n], but it isn't. Also, when I use the freqz
function 

[H,F] = freqz(b,a,# of points,sampling frequency); 
plot(F,20*log10(abs(H))); 

The plot does not look like the frequency spectrum of the original signal, and
does not get better as I increase the order of the filter. This tells me my
coefficients must be wrong. When I use the built-in MATLAB function 

a = lpc(y,N) (where N is again the filter order) 

I get coefficients that are nothing like the ones I found, and when I use the
filter function on them, the y is nothing like the original y[n]. However, the
plot of the spectral envelope looks just like it should, so obviously the
coefficients are correct. 

I know the built-in lpc function is using the autocorrelation method, but I
don't understand why my method of finding the coefficients isn't working! 

I must be missing something, as I'm very new to signal processing. Could you
please help me figure out what I'm doing wrong? Why am I not getting the right
results by simply plug in present output, present pulse input and past outputs
to solve for the coefficients? 

Don't ask me why I can't just use the built-in MATLAB lpc function :) ... I just
need to know why my method isn't working or whether it would work if I fixed
something that I'm doing wrong.
Any help/suggestions would be very very much appreciated! 

Thank you! Alexandra.

______________________________
DSPRelated.com's 50,000th member announced! Details Here.



(You need to be a member of speechcoding -- send a blank email to speechcoding-subscribe@yahoogroups.com )