Encode using differential pulse code modulation (DPCM).
qidx = dpcmenco (sig, codebook, partition, predictor)
Determine position of the prediction error in a strictly monotonic table (partition). The predictor vector describes a m-th order prediction for the output according to the following equation y(k) = p(1)sig(k-1) + p(2)sig(k-2) + ... + p(m-1)sig(k-m+1) + p(m)sig(k-m) , where the predictor vector is given by predictor = [0, p(1), p(2), p(3),..., p(m-1), p(m)].
[qidx, q] = dpcmenco (sig, codebook, partition, predictor)
Also return the quantized values.
[qidx, q, d] = dpcmenco (...)
Also compute distortion: mean squared distance of original sig from the corresponding quantized values.
See also: dpcmdeco, dpcmopt, quantiz.
The following code
predictor = [0 1]; nbits = 4; delta = 2^(-nbits+1); codebook = [-1+delta/2 : delta : 1-delta/2]; partition = (codebook(1:end-1) + codebook(2:end))/2; t = linspace (0, 2*pi, 128); x = sawtooth (2*t, 0.25); [idx, xq, distor] = dpcmenco (x, codebook, partition, predictor); xr = dpcmdeco (idx, codebook, predictor); plot (t, x, 'k--','linewidth',1, t, xr, 'b-','linewidth',1); xlim ([0 2*pi]); xlabel ('t'); ylabel ('x(t)'); legend ('original', 'dpcm'); title ( sprintf ('distortion = %.3f', distor) );
Produces the following figure
Figure 1 |
---|
Package: communications