What do $\{ceps_q\}_{q=0}^Q$ and $\{a_q\}_{q=1}^p$ mean?
Solution 1:
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.
Solution 2:
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.