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