# LPC codec for dummies...

Started by October 9, 2009
```Hello everyone,

firstly, this is my first post and I am completely new to DSP. I was
previously only interested in graphics/trigonometry problems, however, I'm
currently very interested in developing a LPC codec for my own hobby.

I know this is a complex problem, and perhaps not the realm of an
enthusiast, but I hope it is never too late to learn.

I have read several papers; Park-LPC-tutorial, tony robinsons page and

I am not very familiar with the maths involved and would like to clear a
few points:

All papers talk about samples; i.e. to predict the next 'sample', I should
calculate the sum of the past n-'samples', weighted by the linear
prediction coefficients.
A sample in my mind is a set of values, representing a quantized sound. so
how can i apply the calculation to a set of values? or am i
misunderstanding?

Also, if there is any java source code for an encode/decode method of LPC,
it would greatly help me learn how to use this. Could anyone share? or, if
not - would anyone mind writing some very basic pseudo code for me to
understand?

I'm afraid I don't understand Matlab code or the mathematical notation
used in the papers I have.

Cheers.

```
```
rewindgamez wrote:
> Hello everyone,
>
> firstly, this is my first post and I am completely new to DSP. I was
> previously only interested in graphics/trigonometry problems, however, I'm
> currently very interested in developing a LPC codec for my own hobby.
>
> I know this is a complex problem, and perhaps not the realm of an
> enthusiast, but I hope it is never too late to learn.

If you are looking for a recipe, this is not going to work.

L. Rabiner "Digital Speech Processing..."
M. Condoz "Digital Speech Coding..."

If you are looking for solution, hire a consultant.

> I have read several papers; Park-LPC-tutorial, tony robinsons page and

Superficial online junk.

> I am not very familiar with the maths involved and would like to clear a
> few points:
>
> All papers talk about samples; i.e. to predict the next 'sample', I should
> calculate the sum of the past n-'samples', weighted by the linear
> prediction coefficients.
> A sample in my mind is a set of values, representing a quantized sound. so
> how can i apply the calculation to a set of values? or am i
> misunderstanding?
>
> Also, if there is any java source code for an encode/decode method of LPC,
> it would greatly help me learn how to use this. Could anyone share? or, if
> not - would anyone mind writing some very basic pseudo code for me to
> understand?

/*
Calculation of LPC filter koeffs using Levinson - Durbin recursion.

*acf = ponter to array of autocorrelation function values acf[0],
acf[1]....acf[lpc_order]

*lpc = pointer to filter koeffs calculated by function
a[0],a[1]...a[lpc_order-1]

lpc_order = the order of LPC
*/

float lpc(float *acf, float *lpc, int lpc_order)
{

int i,j;
float tmp0,E,Pk;
float *tmp;

tmp=(float *)alloca(lpc_order*sizeof(float));

E=acf[0];
for(i=0;i<lpc_order;i++) lpc[i]=0.0;

for(i=0;i<lpc_order;i++)
{
tmp0=acf[i+1];
for(j=0;j<i;j++) tmp0-=lpc[j]*acf[i-j];

if(fabs(tmp0)>=E) break;

lpc[i]=Pk=tmp0/E;
E-=tmp0*Pk;
for(j=0;j<i;j++) tmp[j]=lpc[j];
for(j=0;j<i;j++) lpc[j]-=Pk*tmp[i-j-1];
}

return E;
}

> I'm afraid I don't understand Matlab code or the mathematical notation
> used in the papers I have.
>
> Cheers.

IHTH

DSP and Mixed Signal Design Consultant
http://www.abvolt.com
```
```On 9 Okt, 21:47, "rewindgamez" <thesamuraieleph...@hotmail.co.uk>
wrote:
> Hello everyone,
>
> firstly, this is my first post and I am completely new to DSP. I was
> previously only interested in graphics/trigonometry problems, however, I'm
> currently very interested in developing a LPC codec for my own hobby.
>
> I know this is a complex problem, and perhaps not the realm of an
> enthusiast, but I hope it is never too late to learn.
>
> I have read several papers; Park-LPC-tutorial, tony robinsons page and
>
> I am not very familiar with the maths involved and would like to clear a
> few points:
>
> All papers talk about samples; i.e. to predict the next 'sample', I should
> calculate the sum of the past n-'samples', weighted by the linear
> prediction coefficients.
> A sample in my mind is a set of values, representing a quantized sound. so
> how can i apply the calculation to a set of values? or am i
> misunderstanding?

A 'sample' in the DSP context, is just a number. In the
real world, the number could representa anything (sound
pressure, acceleration, voltages, currents, temperatures,
whatever) but as soon as the physical signal was sampled
by and ADC, the data are nothing but numbers.

The basic idea behind prediction is to use the samples
(numbers) already available to you, to predict the sample
(number) that arrives next. The better you can do that,
the better the codec.

One way to do this, is to use the temperature reading today
to predict the temperature outdoors tomorrow. In my parts
of the world, it is autumn, heading towards winter, so

1) Temperatures are low
2) They tend to get lower every day

Using the calendar as starting point my first guess for
early October would be +5C. The next day I read the
temperature, to find, say, +3C. So I adjust my guess:
I was too high with my first guess, so I adjust down;
temperatures are dropping, so I adjust down some more.
Next guess for tomorrow is -1C. The next day I read,
to find 0C, and I adjust again.

This is what prediction is all about: Use the numbers
you already have, and what knowledge or assumptions
about rates of change are reasonable, to predict the
next data point as accurately as possible, before you
actually see the data points.

If you can do this very well, you only have to transmit
or store the recipe for the predictor, and a couple of
extra numbers. Which takes far less bandwith or space
than the raw data.

> Also, if there is any java source code for an encode/decode method of LPC,
> it would greatly help me learn how to use this. Could anyone share? or, if
> not - would anyone mind writing some very basic pseudo code for me to
> understand?
>
> I'm afraid I don't understand Matlab code or the mathematical notation
> used in the papers I have.

Start working on it. It's like with music: You can get so
far just by practice and talent. But at some point you will
need to learn how to read notes if you want to proceed.

Rune
```
```Thanks both for the help.

The C code is most helpful for me to understand the filtering. And -
thanks for the advice on the books, I'm going to check in the library for
those.

The weather example is a very good example, even if already familiar with
the concept it does help to crystalize it.

As for learning the mathematical notation, I have tried several times, and
in some areas I am familiar (vectors, cross products, dot products,
trigonometry), but for others (statistics, etc.) I am terrible.

I will perhaps look for some excercise books as I am terribly out of
practice.

Once again,

thankyou both for the help and pointers!
```
```rewindgamez wrote:
..
> A sample in my mind is a set of values, representing a quantized sound. so
> how can i apply the calculation to a set of values? or am i
> misunderstanding?
>

In this case it means individual sample values in a soundfile, or as
received from a soundcard, i.e. "sample" as in "sample rate".

There is an example of LPC audio processing in Csound, very much in the
context of speech analysis for resynthesis (analysis utility
"lpanal",and opcodes "lpread" and "lpreson"). May not entirely suit what
you are looking for (and definitely not cutting-edge implementation!),
but could be a reasonable starting point. If you have not come across
Csound before (see www.csounds.com) , you will find it a very rich
resource for all sorts of musical processing.

Also look at the LPC example in the musicdsp archive:

http://www.musicdsp.org/archive.php?classid=2#137

It even employs Levinson-Durbin recursion, which should satisfy even the
most  critical responders on this list. You may find the musicdsp
mailing list a more simpatico forum generally, for music-related
investigations.

Richard Dobson
```
```Vladimir Vassilevsky <nospam@nowhere.com> wrote in
news:4fidna0AL436B1LXnZ2dnUVZ_tmdnZ2d@giganews.com:

> If you are looking for a recipe, this is not going to work.
> If you are looking for solution, hire a consultant.

Translation:  I'm a pompous, arrogant jerk.

```
```
> Vladimir Vassilevsky <nospam@nowhere.com> wrote in
> news:4fidna0AL436B1LXnZ2dnUVZ_tmdnZ2d@giganews.com:
>
>
>
>>If you are looking for a recipe, this is not going to work.
>>If you are looking for solution, hire a consultant.
>
>
>
> Translation:  I'm a pompous, arrogant jerk.

Jimmy, nobody argues that you are pompous and arrogant jerk. So what?
Have you done any interesting DSP work lately?

VLV

```
```If you have any questions, I will help you.

You can reach me at dsp_cph_@_yahoo.dk

Remove the underscores.

```