切り捨てによるサンプルのビット深度の削減

16-bit 24bit audio quantization
切り捨てによるサンプルのビット深度の削減

デジタルオーディオ信号のビット深度を24ビットから16ビットに減らす必要があります。

上位16ビットのみを取得します(つまり、 各サンプルの切り捨て)は、比例計算(out = in * 0xFFFF / 0xFFFFFF)を行うことと同等ですか?

  0  2


ベストアンサー

切り捨てる前に、切り捨てられたしきい値のすぐ下で、慎重に作成されたノイズ信号を元の信号に追加することにより、より良いサウンドの結果が得られます(a.k.a. ディザリング)。

3


私はあなたが `(in * 0xFFFF)/ 0xFFFFFF`を意味すると仮定します。その場合、はい。

1


http:// tttp://en.wikipedia.org/wiki/Dither#Digital_audio [ディザリング]ノイズを追加することにより、一般的により良い結果が得られます。 これの鍵は、ノイズの形状です。 popula * http://en.wikipedia.org/wiki/POW-R [pow-r] *ディザリングアルゴリズムは、多くのデジタルオーディオワークステーションアプリケーション(CakewalkのSONAR、Logicなど)で非常に人気のある特定の形状を持っています。 。

pow-rの完全な忠実度が必要ない場合は、かなり低い振幅でhttp://en.wikipedia.org/wiki/Colors_of_noise[noise]をいくつか生成し、それを信号にミックスすることができます。 これにより、量子化効果の一部がマスクされることがわかります。

1


`x * 0xffff / 0xffffff`は非常に面倒ですが、サンプルが署名されている場合は良い方法ではありません-おそらく一般的には良い方法ではありません。

はい、ソース範囲の最大値をデスティネーション範囲の最大値と一致させたいのですが、そこで使用される値は符号なし範囲のみであり、量子化ステップの分布は、使用することが非常にまれであることを意味します可能な最大の出力値。

サンプルが署名されている場合、正のピーク値は0x7fffと0x7fffffになり、負のピーク値は-0x8000と-0x800000になります。 最初の問題は、+ 1が0x7fffに等しいか、-1が-0x8000に等しいかを決定することです。 後者を選択した場合、それは単純なシフト操作です。 両方を取得しようとすると、ゼロはゼロでなくなります。

その後、除算がゼロに丸められるという問題があります。 これは、他の値と比較して多すぎる値がゼロに丸められることを意味します。 これにより歪みが発生します。

正のピーク値に従ってスケーリングする場合、正しい形式は次のようになります。

out = rint((float)in * 0x7fff / 0x7fffff);

少し釣り回れば、おそらく整数演算で除算を行わずに効率的な方法を見つけることができます。

この形式は、任意の入力に対して最も近い利用可能な出力値に正しく丸める必要があり、可能な最大の入力値を可能な最大の出力値にマップする必要がありますが、範囲全体に散在する量子化ステップのい分布があります。

ほとんどの人が好む:

out = (in + 128) >> 8;
if (out > 0x7fff) out = 0x7fff;

この形式は、正の値がわずかにクリップする可能性がありますが、量子化のステップは均等に分散される点まで、物事を少しだけ大きくします。

右シフトが負の無限大に向かって丸められるため、128を追加します。 _average_量子化エラーは-128で、128を追加してこれを修正し、0を正確に0に保ちます。 0x7fffffの入力値では0x8000の結果が得られるため、オーバーフローのテストが必要です。これを16ビットワードに格納すると、負のピーク値が得られます。

Cの人は右シフトと除算の動作に関する仮定に穴を開けることができますが、明確にするためにそれらを見落としています。

ただし、他の人が指摘しているように、一般的にディザリングなしでオーディオのビット深度を減らすべきではありません。理想的にはノイズシェーピングです。 TPDFディザは次のとおりです。

out = (in + (rand() & 255) - (rand() & 255)) >> 8;
if (out < -0x8000) out = -0x8000;
if (out > 0x7fff) out = 0x7fff;

繰り返しますが、 `rand()`の使用に関する大きな問題は、明確にするために見落とします。

0


タイトルとURLをコピーしました