Main Content

dpcmenco

Encode using differential pulse code modulation

Syntax

indx = dpcmenco(sig,codebook,partition,predictor)
[indx,quants] = dpcmenco(sig,codebook,partition,predictor)

Description

indx = dpcmenco(sig,codebook,partition,predictor) implements differential pulse code modulation to encode the vector sig. partition is a vector whose entries give the endpoints of the partition intervals. codebook, a vector whose length exceeds the length of partition by one, prescribes a value for each partition in the quantization. predictor specifies the predictive transfer function. If the transfer function has predictive order M, predictor has length M+1 and an initial entry of 0. The output vector indx is the quantization index.

For more about the format of predictor, see Differential Pulse Code Modulation. For a description of the formats of partition and codebook, see Quantization.

[indx,quants] = dpcmenco(sig,codebook,partition,predictor) is the same as the syntax above, except that quants contains the quantization of sig based on the quantization parameters. quants is a vector of the same size as sig.

Note

If predictor is an order-one transfer function, the modulation is called a delta modulation.

Examples

collapse all

This example implements a simple case of DPCM that quantizes the difference between the value of the current signal sample and the value of the previous sample. For this case, the predictor is just y(k) = x (k - 1). It then encodes a sawtooth signal, decodes it, plots both the original and the decoded signals, and computes the mean square error between the original and decoded signals.

partition = [-1:.1:.9];
codebook = [-1:.1:1];
predictor = [0 1];      % y(k)=x(k-1)
t = [0:pi/50:2*pi];     % Time samples
x = sawtooth(3*t);      % Original signal

Quantize x using DPCM encoding.

encodedx = dpcmenco(x,codebook,partition,predictor);

Try to recover x from the modulated signal by using DPCM decoding. Plot the original signal and the decoded signal. The solid line is the original signal, while the dashed line is the recovered signal.

decodedx = dpcmdeco(encodedx,codebook,predictor);
plot(t,x,t,decodedx,'-')

Figure contains an axes object. The axes object contains 2 objects of type line.

Compute the mean square error between the original signal and the decoded signal.

distor = sum((x-decodedx).^2)/length(x)
distor = 
0.0327

To optimize a DPCM-encoded and -decoded sawtooth signal, use the dpcmopt function with the dpcmenco and dpcmdeco functions. Testing and selecting parameters for large signal sets with a fine quantization scheme can be tedious. One way to produce partition, codebook, and predictor parameters easily is to optimize them according to a set of training data. The training data should be typical of the kinds of signals to be quantized with dpcmenco.

This example uses the predictive order, 1, as the desired order of the new optimized predictor. The dpcmopt function creates these optimized parameters, using the sawtooth signal x as training data. The example goes on to quantize the training data itself. In theory, the optimized parameters are suitable for quantizing other data that is similar to x. The mean square distortion for optimized DPCM is much less than the distortion with nonoptimized DPCM parameters.

Define variables for a sawtooth signal and initial DPCM parameters.

t = [0:pi/50:2*pi];
x = sawtooth(3*t);
partition = [-1:.1:.9];
codebook = [-1:.1:1];
predictor = [0 1];      % y(k)=x(k-1)

Optimize the partition, codebook, and predictor vectors by using the dpcmopt function and the initial codebook and order 1. Then generate DPCM encoded signals by using the initial and the optimized partition and codebook vectors.

[predictorOpt,codebookOpt,partitionOpt] = dpcmopt(x,1,codebook);
encodedx = dpcmenco(x,codebook,partition,predictor);
encodedxOpt = dpcmenco(x,codebookOpt,partitionOpt,predictorOpt);

Try to recover x from the modulated signal by using DPCM decoding. Compute the mean square error between the original signal and the decoded and optimized decoded signals.

decodedx = dpcmdeco(encodedx,codebook,predictor);
decodedxOpt = dpcmdeco(encodedxOpt,codebookOpt,predictorOpt);
distor = sum((x-decodedx).^2)/length(x);
distorOpt = sum((x-decodedxOpt).^2)/length(x);

Compare mean square distortions for quantization with the initial and optimized input arguments.

[distor, distorOpt]
ans = 1×2

    0.0327    0.0009

References

[1] Kondoz, A. M., Digital Speech, Chichester, England, John Wiley & Sons, 1994.

Version History

Introduced before R2006a