このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
指数信号の量子化と圧縮
ハイ ダイナミック レンジで信号を送信すると、長さの等しい区間を使用する量子化で桁落ちと信号の歪みが生じる可能性があります。圧伸は、送信側で量子化の前に対数演算を適用して信号を圧縮し、受信側で逆の操作を適用して信号を拡張してフル スケールに戻す操作です。圧伸により、多くの量子化レベルを指定せずに信号の歪みを回避できます。指数信号に 6 ビット量子化を使用したときの歪みを、圧伸を行う場合と行わない場合について比較します。元の指数信号、量子化信号、拡張信号をプロットします。
指数信号を作成してその最大値を計算します。
sig = exp(-4:0.1:4); V = max(sig);
同じ長さの間隔を使用して信号を量子化します。partition 値と codebook 値を設定し、6 ビットの量子化と仮定します。平均二乗歪みを計算します。
partition = 0:2^6 - 1; codebook = 0:2^6; [~,qsig,distortion] = quantiz(sig,partition,codebook);
μ 則方式を適用するように構成した関数 compand
を使用して信号を圧縮します。量子化を適用し、量子化した信号を展開します。圧伸した信号の平均二乗歪みを計算します。
mu = 255; % mu-law parameter csig_compressed = compand(sig,mu,V,'mu/compressor'); [~,quants] = quantiz(csig_compressed,partition,codebook); csig_expanded = compand(quants,mu,max(quants),'mu/expander'); distortion2 = sum((csig_expanded - sig).^2)/length(sig);
量子化の平均二乗歪みを、圧伸と量子化を組み合わせた場合の平均二乗歪みと比較します。圧伸して量子化した信号の歪みは、量子化した信号の歪みより 1 桁少なくなっています。長さの等しい区間は指数信号の対数に適していますが、指数信号そのものには適していません。
[distortion, distortion2]
ans = 1×2
0.5348 0.0397
元の指数信号、量子化信号、拡張信号をプロットします。低い信号レベルでの量子化信号エラーを強調表示するため、軸にズームインします。
plot([sig' qsig' csig_expanded']); title('Comparison Between Original, Quantized, and Expanded Signals'); xlabel('Interval'); ylabel('Apmlitude'); legend('Original','Quantized','Expanded','location','nw'); axis([0 70 0 20])