Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

差分パルス符号変調

この節の概要

Quantizing a Signal の節の量子化では、送信される信号について "事前の" 知識は必要ありません。実際には、多くの場合、過去の信号送信に基づいて現在の信号に関して経験に基づく推定を行うことができます。そのような経験に基づく推定を使って信号を量子化することを "予測量子化" といいます。最も一般的な予測量子化法は、差分パルス符号変調 (DPCM) です。

関数 dpcmencodpcmdeco、および dpcmopt を使用すると、線形予測子を使用して DPCM 予測量子化器を実装できます。

DPCM の用語

このような量子化器の符号化器を決定するには、パーティションの表現コードブックの表現で説明した分割とコードブックだけでなく、"予測子" を指定しなければなりません。 予測子は、各手順で経験に基づく推定を行うために DPCM 符号化器が使用する関数です。線形予測子は、以下の形式です。

y(k) = p(1)x(k-1) + p(2)x(k-2) + ... + p(m-1)x(k-m+1) + p(m)x(k-m)

ここで、x は元の信号を表し、y(k)x(k) の値を予測します。p は実数の m 組です。x 自身を量子化する代わりに、DPCM 符号化器は、"予測誤差" x-y を量子化します。上記の整数 m は、"予測次数" と呼ばれます。m = 1 である特殊な場合は、"デルタ変調" と呼ばれます。

予測子の表現

x の以前の値に基づく信号 xk 番目の値の推定が次のように表される場合を考えてみます。

y(k) = p(1)x(k-1) + p(2)x(k-2) +...+ p(m-1)x(k-m+1) + p(m)x(k-m)

この場合のツールボックス関数に対応する予測子ベクトルを次に示します。

predictor = [0, p(1), p(2), p(3),..., p(m-1), p(m)]

メモ

予測子ベクトルの最初の 0 は、ベクトルを有限インパルス応答 (FIR) フィルターの多項式伝達関数として考えると理解できます。

例:DPCM 符号化と復号化

DPCM のシンプルで特殊なケースでは、信号の現在の値と前の手順の値との差を量子化します。したがって、予測子は y(k) = x (k - 1) です。以下の符号は、この方式を実装し、ノコギリ波の符号化と復号化、および元の信号と復号化された信号のプロットを行います。実線は元の信号を示し、破線は復元された信号を示します。この例は、元の信号と復号化された信号の間の平均二乗誤差も計算します。

predictor = [0 1]; % y(k)=x(k-1)
partition = [-1:.1:.9];
codebook = [-1:.1:1];
t = [0:pi/50:2*pi];
x = sawtooth(3*t); % Original signal
% Quantize x using DPCM.
encodedx = dpcmenco(x,codebook,partition,predictor);
% Try to recover x from the modulated signal.
decodedx = dpcmdeco(encodedx,codebook,predictor);
plot(t,x,t,decodedx,'--')
legend('Original signal','Decoded signal','Location','NorthOutside');
distor = sum((x-decodedx).^2)/length(x) % Mean square error

出力は以下のようになります。

distor =

    0.0327

DPCM パラメーターの最適化

この節の概要

量子化パラメーターの最適化の節では、信号の歪みを最小化する量子化パラメーターを求めるために関数 lloyds で学習データを使用する方法を説明しています。

この節では、前の節で紹介した 2 つの関数 (dpcmencodpcmdeco) と関数 dpcmopt を一緒に使用する同様の手順を説明します。

メモ

dpcmopt で使用する学習データは、dpcmenco で実際に量子化する典型的な種類の信号でなければなりません。

例:最適化および非最適化された DPCM パラメーターの比較

この例は、前の節の例に似ています。前の例では、わかりやすいが計画的ではない方法で predictorpartition、および codebook を作成しましたが、この例では、同じコードブック (initcodebook) を新しい "最適化された" コードブック パラメーターの初期推定として使用します。この例では、予測次数 1 を新しい最適化予測子の目的の次数としても使用します。関数 dpcmopt は、ノコギリ波信号 x を学習データとして使用し、これらの最適化パラメーターを作成します。この例では、学習データ自身の量子化も行います。理論上、最適化パラメーターは、x と同様のその他のデータの量子化に適しています。ここでは、平均二乗歪みは、前の例の歪みよりも小さいことに注意してください。

t = [0:pi/50:2*pi];
x = sawtooth(3*t); % Original signal
initcodebook = [-1:.1:1]; % Initial guess at codebook
% Optimize parameters, using initial codebook and order 1.
[predictor,codebook,partition] = dpcmopt(x,1,initcodebook);
% Quantize x using DPCM.
encodedx = dpcmenco(x,codebook,partition,predictor);
% Try to recover x from the modulated signal.
decodedx = dpcmdeco(encodedx,codebook,predictor);
distor = sum((x-decodedx).^2)/length(x) % Mean square error

出力は以下のようになります。

distor =

    0.0063