最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

信号の圧伸

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

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

指数信号の量子化と圧縮

指数信号の量子化を圧縮した場合と圧縮しない場合で行い、平均二乗歪みを比較します。

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

Mu = 255;

指数信号を作成して最大値を求めます。

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

同じ長さの間隔を使用して信号を量子化します。6 ビット量子化として引数 partition および codebook を設定します。

partition = 0:2^6-1;
codebook = 0:2^6;
[~,~,distor] = 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');
distor2 = sum((newsig-sig).^2)/length(sig);

平均二乗歪みを比較します。出力から、圧縮が使用されたときの方が歪みが小さいことがわかります。これは、長さの等しい区間は sig の対数に適していて、sig 自体には適していないためです。

[distor, distor2]
ans = 1×2

    0.5348    0.0397

信号とその圧縮信号をプロットします。

plot([sig' compsig'])
legend('Original','Companded','location','nw')