Main Content

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

信号の圧伸

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

関数 compand は、µ 則と A 則の 2 種類の圧伸器をサポートします。この関数のリファレンス ページには、両方の圧縮器の原理が説明されています。

指数信号の量子化と圧縮

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

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');