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.

# Method of Finding LPC Coefficients for Digital Filter

Started by ●June 28, 2009