Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

As a programmer who hasn't had any higher mathematical training, I sometimes find mathematical equations described in books or online that I'd like to implement in my programs, but they have symbols in them that I'm unfamiliar with. Or they use symbols that I'm familiar with in an unfamiliar way. It's very frustrating, especially as I can't even tell what area of mathematics to start hunting for them in.

Right now, I'm trying to figure out this:


I've mostly figured out the actual equations shown there (the summation symbol wasn't too hard to find via Wikipedia, and I finally figured out that the big open-brace was a way of showing if-then equations), but I'm stuck on the two things in the initial paragraph. The first one, between "The cepstrum coefficients" and "can be estimated"... what do the "Q" and "q=0" mean in that? And in the one between "from the LPC coefficients" and "using a recursion procedure:", the "p" and "q=1"?

share|cite|improve this question
The most frustrating part about all of this is that usually before one of these equations ends up in someone's paper, the author has already prototyped the algorithm by writing an actual program. Once they're sure it works, they convert it into greek for the paper because apparently the more greek you have the more likely your paper is to be accepted and published. – MooseBoys Feb 4 at 8:44
up vote 13 down vote accepted

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.

share|cite|improve this answer
Are the extra cases where $q=0$ and $q>p$ included in your answer? – Roland Feb 3 at 23:40
@Roland What do you mean? From what I can read in the question, the tuple $(a_q)_{1\leq q \leq p}$ only includes $a_1,\dots, a_p$. There is not $a_q$ defined for $q=0$ or $q> p$. – Clement C. Feb 3 at 23:42
Not for $a_q$, but for $\operatorname{ceps}[0] = \ln(Q)$ and $\operatorname{ceps}[q]$ for $p<q\leq Q$, you need a different formula. – Roland Feb 3 at 23:47
Yes. i didn't spell it out: see the "etc.". – Clement C. Feb 3 at 23:56
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;


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

should really be

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


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

To avoid integer division.

share|cite|improve this answer

$\{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.$$

share|cite|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.