メインコンテンツ

dpcmdeco

差分パルス符号変調を使った復号化

説明

sig = dpcmdeco(indx,codebook,predictor) は、ベクトル indx を復号化する差分パルス コード復調 (DPCM) を実装します。

[sig,quanterror] = dpcmdeco(indx,codebook,predictor) は、量子化された予測誤差 quanterror を返します。

すべて折りたたむ

DPCM の符号化と復号化を使用して、現在の信号サンプルの値と前のサンプルの値の差を量子化します。この例では、予測子 y(k)=x(k-1) を使用します。次に、ノコギリ波信号を符号化して復号化し、元の信号と復号化された信号の両方をプロットし、元の信号と復号化された信号の間の平均二乗誤差を計算します。

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

DPCM 符号化を使用して x を量子化します。

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

DPCM 復号化を使用して、変調信号から x を復元します。元の信号と復号化された信号をプロットします。実線は元の信号を示し、破線は復元された信号を示します。

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

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

元の信号と復号化された信号の間の平均二乗誤差を計算します。

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

DPCM 符号化され、DPCM 復号化されたノコギリ波信号を最適化するには、dpcmopt関数を、dpcmenco関数およびdpcmdeco関数と共に使用します。大きな信号の集合に対し、微細な量子化方式を使用してパラメーターのテストや選択を行うのは手間のかかる作業です。分割、コードブック、および予測子のパラメーターを簡単に生成する方法の 1 つは、一連の "学習データ" に従ってそれらを最適化することです。学習データは、dpcmenco で量子化する典型的な種類の信号でなければなりません。

この例では、予測次数 1 を新しい最適化予測子の目的の次数として使用します。dpcmopt 関数は、ノコギリ波信号 x を学習データとして使用し、これらの最適化パラメーターを作成します。この例では、学習データ自体を量子化します。理論上、最適化パラメーターは、x と同様のその他のデータの量子化に適しています。最適化された DPCM の平均二乗歪みは、最適化されていない DPCM パラメーターによる歪みよりもはるかに小さくなります。

ノコギリ波信号と初期 DPCM パラメーターの変数を定義します。

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)

dpcmopt 関数と初期コードブックおよび次数 1 を使用して、分割、コードブック、および予測子のベクトルを最適化します。次に、初期および最適化後の分割ベクトルとコードブック ベクトルを使用して、DPCM 符号化された信号を生成します。

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

DPCM 復号化を使用して、変調信号から x を復元します。元の信号と復号化され最適化された復号化信号の間の平均二乗誤差を計算します。

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

量子化の平均二乗歪みについて、初期の入力引数と最適化後の入力引数で比較します。

[distor, distorOpt]
ans = 1×2

    0.0327    0.0009

入力引数

すべて折りたたむ

復号化する信号。ベクトルとして指定します。

データ型: double

予測誤差量子化コードブック。ベクトルとして指定します。

データ型: double

予測伝達関数。ベクトルとして指定します。一般に、M 次の伝達関数は [0, n1, n2, ... nM] の形式になります。

データ型: double

メモ

dpcmopt 関数を使用して入力パラメーター codebookpartition、および predictor を推定できます。

出力引数

すべて折りたたむ

復号化された信号。ベクトルとして指定します。

データ型: double

量子化された予測誤差。ベクトルとして指定します。

データ型: double

参照

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

バージョン履歴

R2006a より前に導入