Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

compand

μ 則または A 則圧縮器/伸張器による情報源符号化

説明

out = compand(in,param,v) は、入力データ シーケンスで μ 則圧縮を実行します。param 入力は μ 則圧縮の値を指定し、μ 則圧縮器計算の mu 値に設定しなければなりません (実際には 255 の μ 則値が使用されます)。v は、入力データ シーケンスのピーク振幅を指定します。

out = compand(in,param,v,method) は、入力データ シーケンスで μ 則または A 則圧縮や伸張を実行します。param は、μ 則圧伸器または A 則圧伸器の値 (実際には 255 の μ 則値と 87.6 の A 則値が使用されます)。method は、入力データ シーケンスで実行する関数の圧縮器または伸張器のタイプを指定します。

すべて折りたたむ

データ シーケンスを生成します。

data = 2:2:12
data = 1×6

     2     4     6     8    10    12

μ 則圧縮器を使用してデータ シーケンスを圧縮します。mu の値を 255 に設定します。圧縮されたデータ シーケンスの範囲は 8.1 ~ 12 です。

compressed = compand(data,255,max(data),'mu/compressor')
compressed = 1×6

    8.1644    9.6394   10.5084   11.1268   11.6071   12.0000

μ 則伸張器を使用して圧縮されたデータ シーケンスを伸張します。伸張したデータ シーケンスは元のデータ シーケンスとほぼ同一になります。

expanded = compand(compressed,255,max(data),'mu/expander')
expanded = 1×6

    2.0000    4.0000    6.0000    8.0000   10.0000   12.0000

元のデータ シーケンスと伸張されたデータ シーケンスの差を計算します。

diffvalue = expanded - data
diffvalue = 1×6
10-14 ×

   -0.0444    0.1776    0.0888    0.1776    0.1776   -0.3553

データ シーケンスを生成します。

data = 1:5;

A 則圧縮器を使用してデータ シーケンスを圧縮します。A の値を 87.6 に設定します。圧縮されたデータ シーケンスの範囲は 3.5 ~ 5 です。

compressed = compand(data,87.6,max(data),'A/compressor')
compressed = 1×5

    3.5296    4.1629    4.5333    4.7961    5.0000

A 則伸張器を使用して圧縮されたデータ シーケンスを伸張します。伸張したデータ シーケンスは元のデータ シーケンスとほぼ同一になります。

expanded = compand(compressed,87.6,max(data),'A/expander')
expanded = 1×5

    1.0000    2.0000    3.0000    4.0000    5.0000

元のデータ シーケンスと伸張されたデータ シーケンスの差を計算します。

diffvalue = expanded - data
diffvalue = 1×5
10-14 ×

         0         0    0.1332    0.0888    0.0888

μ 則パラメーターを設定します。

mu = 255;

指数信号を作成してその最大値を計算します。

sig = exp(-4:0.1:4);
V = max(sig);

同じ長さの間隔を使用して信号を量子化します。partition 値と codebook 値を設定し、6 ビットの量子化と仮定します。平均二乗歪みを計算します。

partition = 0:2^6 - 1;
codebook = 0:2^6;
[~,~,distortion] = quantiz(sig,partition,codebook);

関数 compand を使用して信号を圧縮します。量子化を適用し、量子化した信号を展開します。圧伸した信号の平均二乗歪みを計算します。

compsig = compand(sig,mu,V,'mu/compressor');
[~,quants] = quantiz(compsig,partition,codebook);
newsig = compand(quants,mu,max(quants),'mu/expander');
distortion2 = sum((newsig - sig).^2)/length(sig);

平均二乗歪みを比較します。圧伸を実行したときの方が歪みが小さくなります。これは、長さの等しい区間は指数信号の対数に適していて、指数信号そのものには適していないためです。

[distortion, distortion2]
ans = 1×2

    0.5348    0.0397

元の指数信号と圧伸した信号をプロットします。

plot([sig' compsig']);
title('Comparison between Original signal and Companded Signal');
xlabel('Interval');
ylabel('Apmlitude');
legend('Original','Companded','location','nw');

入力引数

すべて折りたたむ

入力データ シーケンス。行ベクトルとして指定します。この入力で、関数で圧縮または伸張を実行するデータ シーケンスを指定します。

データ型: double

圧伸器の μ 値または A 値。正のスカラーとして指定します。実際に利用されている一般的な値は µ = 255 および A = 87.6 です。

データ型: double

入力データ シーケンスで実行する関数の圧縮器または伸張器計算のタイプ。

  • mu/compressor

  • mu/expander

  • A/compressor

  • A/expander

データ型: char | string

入力データ シーケンスのピーク振幅。正のスカラーとして指定します。

データ型: double

出力引数

すべて折りたたむ

圧縮または伸張された信号。正の行ベクトルとして返されます。out のサイズは、入力引数 in のサイズと一致します。

アルゴリズム

音声処理などの用途では、量子化の前に (圧縮器と呼ばれる) 対数演算を使用するのが一般的です。圧縮器の逆演算は、"伸張器" と呼ばれます。圧縮器と伸張器を組み合わせて、"圧伸器" と呼ばれます。

与えられた信号 x に対して、(µ 則) 圧縮器の出力は、以下のようになります。

y=log(1+μ|x|)log(1+μ)sgn(x).

µ は圧伸器の µ 則パラメーター、log は自然対数、sgn は符号関数 (MATLAB® では sign) です。

入力信号 x の µ 則の伸張は、逆関数 y-1 で求められます。

y1=sgn(y)(1μ)((1+μ)|y|1)         for -1y1

与えられた信号 x に対して、(A 則) 圧縮器の出力は、以下のようになります。

y={A|x|1+logAsgn(x)(1+log(A|x|))1+logAsgn(x)for 0|x|1Afor 1A<|x|1

A は圧伸器の A 則パラメーター、log は自然対数、sgn は符号関数 (MATLAB では sign) です。

入力信号 x の A 則の伸張は、逆関数 y-1 で求められます。

y1=sgn(y){|y|(1+log(A))Aexp(|y|(1+log(A))1)Afor 0|y|<11+log(A)for 11+log(A)|y|<1

参照

[1] Sklar, Bernard. Digital Communications: Fundamentals and Applications. Englewood Cliffs, NJ: Prentice-Hall, 1988.

R2006a より前に導入