In many vocoders, such as LPC-10, G.723, G.728, G.729, and Speex, for example, Linear Predictive Coding (LPC) filters are used to whiten incoming speech signals, and encode much of their shape. This is accomplished on the encode side by performing a finite impulse response (FIR) filter given by
yn = xn + a1xn − 1 +…+ akxn − k
where k is the order of the filter and is usually between 8 and 16. Then, signal yn and the coefficients ai are encoded. On the decode side, this is reversed by performing the Infinite Impulse Response (IIR) filter given by
xn = yn − a1xn − 1 −…− akxn − k.
This creates stability concerns. If poles of the transfer function
H(z) = 1 / ( 1 + a1z−1 +…+ a1z−k )
are not within the unit circle in the complex plane, then the filter is unstable and can cause signals to increase in power without bound.
There are some things that can be done to guarantee the stability of these filters. First, the LPC coefficients are not encoded directly. This is because small differences, like those caused by quantization, can cause large changes in the locations of the zeros of the filter H. Instead, the coefficients are converted to another form, such as reflection coefficients (RC) or Line Spectral Frequencies (LSF) which are more resilient to quantization noise.
Another method that is also employed to guarantee the stability of the LPC filter in the decoder, is the use of Bandwidth Expansion (BWE). This is accomplished by creating a new filter that is similar to the original, but more likely to be stable. What is done is that all of the poles of the original filter are contracted toward the origin by a constant factor γ, which should be a number slightly less than 1. Generally γ is between 0.95 and 0.999.
What can be done in real time as a vocoder is running, is that after the LPC coefficients are computed, they can be checked for stability. If they are not stable, BWE can be applied. The filter will then be rechecked for stability, and if necessary, BWE applied again. This continues until the filter is stable, or until a limit is reached for the number of times BWE can be applied. This limit is usually around 20 iterations. If this limit is reached, a decision is reached that the filter is so ill-behaved that it is not encoding useful information and all of the coefficients are set to 0.