Complete Communications Engineering

In any Internet Protocol (IP) or wireless based application, such as Voice over IP (VoIP), packet loss is
an inevitable part of life. In these situations, there are basically two methods that can be used. The first is Forward Error Correction (FEC), where packet information is added to earlier packets. In this case, when a packet is lost, we simply retrieve the relevant information from the previously received packets and proceed as if nothing has happened. This method is used in many applications where a loss of the information contained in a single packet will severely impact the user experience, such as file transfers.

While some vocoders, such as SILK, do use FEC, it can significantly increase the bitrate of the resulting stream. This is a significant disadvantage since many vocoders, such as G.723.1, G.729 and iLBC, are designed to use as small a bitrate as possible. Instead, many vocoders will use Packet Loss Concealment or error concealment to hide the fact that a packet has been lost. In this methodology, important information for reconstructing each packet is stored by the decoder. In the case of a lost packet, this information is extrapolated in order to hide the loss and smoothly move into the next received packet.

Typically, in a Linear Prediction based vocoder, such as SILK, the information retained is the pitch lag, the Long Term Prediction (LTP) coefficients, the Linear Predictive Coding (LPC) coefficients, and the signal used to excite the LPC filter. When a packet is lost, the LPC coefficients have a small bandwidth expansion applied to them, typically with a coefficient of .99, to reduce their energy slightly. This helps to hide the lost packet by reducing its energy between two packets with more energy, so that it is less discernible to the human ear. Then, the previous frame’s excitation signal is run through the LPC and LTP filters to create the signal for the missing packet.

Then, when a packet is received, a transition is applied to smoothly return to the intended signal. This is accomplished by measuring the energy in the last concealment packet and the following received packet. Then, the received packet signal is multiplied by linear increasing coefficients so that it smoothly transitions from a level consistent with the energy of the concealment frame to the level it is supposed to be at.