Method of Finding LPC Coefficients for Digital Filter
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);
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.