質問

私はバッファー付ポータ16ビット値に格納されたdoubleとして)いと思うようにな量子化への8bit(0-255値)。

による Wikipedia を処理することはできない。

  • Normalize16ビットの値です。I.。見に分割します。
  • Q(x)の算式によりM=8です。

いう場合、C機能を持っているところでこの量子化、なんだろうけど、日本人のC実装かったのですか?

多くの愛 ルイーズ

役に立ちましたか?

解決

d間隔[0.0, max]であると仮定すると:

unsigned char quantize(double d, double max)
{
    return (unsigned char)((d / max) * 255.0);
}

私はあなたが何を意味するかわからないんだけど、「16ビット値;」倍精度値は、IEEE-754を使用して任意のシステム上で64ビットです。あなたが別の数値型の値を持っている場合は、プロセスが効果的に同じである。

他のヒント

あなたの入力は、あなたの出力は、8ビットPCMデータであり、あなたは、中間値を兼ねるを使用している。、16のPCMデータである波形オーディオ処理、などこの音

はしかし、8ビットPCM波形データがちょうど量子化されていない、表現は、過剰128表記で符号なしの値です。 (指数は、浮動小数点数に格納されている方法など)

量子化するだけでなく、拡大縮小されるだろうだけではなく、最初の最大値を求めます。だから、擬似コードで

double dMax = max_of_all_values(); // 
...
foreach (dValue in array_of_doubles)
{
   signed char bValue = (signed char)((dValue / dMax)*127.0);
}
あなたがより高い精度が必要な場合は、あなたはラウンドではなく切り捨てることができますが、オーディオ処理では、それは切り捨て順序をランダム化、あるいは、本質的に署名した文字に倍から切り捨ての一環として、フィルタリングアルゴリズムを実行することによって、それを形作るために、一般的に良いでしょう。

注:出力は8ビットのPCMデータである場合にsigned char型が正しいのではなく、質問は特にそれを要求していないので、私はそれを残していること

編集:これはピクセルデータとして使用する場合は、符号なしの値を求めています。 Iは、(正規化されたデータからdB値は、実際に、全て陰性でなければならない)入力が符号なしの場合にジェームズは既に符号なしの値の正しい答えを与えた参照

これは、エンコーディングは「(ダブルスとして格納されている)の正の16ビット値の」本当の意味がありませんので、何であるか、あなたの質問からクリアされていません。彼らはどちらか16ビットであるか、彼らは二重のある、彼らは両方をすることはできません。

しかし、この16が1.0に正規化符号なしデータビットであると仮定すると(値が0.0の範囲に<= S <= 1.0)、すべてあなたが値整数8ビットにそれらを展開するために必要255で各サンプルを乗算することである。

unsigned char s8 = s * 255 ;

の範囲が0.0ない場合<= S <= 1.0が、0.0 <= S <= maxの次に

unsigned char s8 = s / max * 255 ;

いずれかの方法で、あなた自身を書くかもしれない1以外の「量子化」機能はありません。 (データは、おそらく圧伸された場合であるがそれほど単純ではない - すなわちμレイ又は例えば符号化されたA-法則)が、必要では間違いなく単純な算術式できなくなり、変換

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top