What do $\{ceps_q\}_{q=0}^Q$ and $\{a_q\}_{q=1}^p$ mean?

The $Q$ is a parameter, and $q$ is a variable ranging from $0$ to $Q$: basically, you have $Q+1$ parameters $\textrm{ceps}_0,\dots, \textrm{ceps}_Q$; or, in programming terms, you have an array $\textrm{ceps}[0\dots Q]$.

Similarly, the LPC coefficients are a list of $p$ values $a_1,\dots, a_p$ (i.e., $a_q$ for $q=1\dots p$), where $p$ is another parameter.

The recursion procedure explains how to compute value $Q+1$ values in $\textrm{ceps}[0\dots Q]$, recursively, starting with $\textrm{ceps}[0]$ and then applying the formula: $$ \textrm{ceps}[1] = a_1 + \sum_{k=1}^0 \frac{k-1}{1}a_k \textrm{ceps}[1-k] = a_1 $$ then $$ \textrm{ceps}[2] = a_2 + \sum_{k=1}^1 \frac{k-2}{2}a_k \textrm{ceps}[2-k] = a_2 - \frac{1}{2}a_1 \textrm{ceps}[1] = a_2-\frac{a_1^2}{2} $$ etc.


Number[] a = new Number[p + 1]; // range from 1 to p

... some stuff to initialize a ...

Number[] ceps = new Number[Q + 1]; // range from 0 to Q

ceps[0] = ln(G);
for (int q = 1; q <= p; q++) {
  Number sum = a[q];
  for (k = 1; k <= q - 1; k++) {
    sum += (k - q) / q * a[k] * ceps[q - k];
  }
  ceps[q] = sum;
}

for (int q = p + 1; q <= Q; q++) {
  Number sum = 0;
  for (int k = 1; k <= p; k++) {
    sum += (k - q) / q * a[k] * ceps[q - k];
  }
  ceps[q] = sum;
}

Edit:

(k - q) / q * a[k] * ceps[q - k]

should really be

((Number)(k - q))/((Number)q) * a[k] * ceps[q - k]

or

a[k] * ceps[q - k] * (k - q) / q

To avoid integer division.


$\{ceps_q\}_{q=0}^Q$ is the finite sequence (or array or vector in programmese) $$ceps_0,ceps_1,\ldots, ceps_Q.$$

Likewise, $\{a_q\}_{q=1}^p$ denotes $$a_1,a_2,\ldots, a_p.$$