| Signal Processing Toolbox | ![]() |
2nレベルの量子化した整数入力を復号化して浮動小数点出力を行います。
表示
y = udecode(u,n)
y = udecode(u,n,v)
y = udecode(u,n,v,'SaturateMode')
詳細
y = udecode(u,n)
は、整数u個の符号化した多次元配列から量子化した浮動小数点値を復号化や再構成する演算の逆を行います。入力引数nは、2と32の間の整数です。整数nは、入力に対して、2n量子化レベルであることを設定し、uの中の要素は、つぎのいずれかになります。
入力は、実数または、ある整数データタイプ(uint8, uint16, uint32, int8, int16, int32)からなる複素数になります。オーバフロー(uの中の要素が、上で指定した範囲を超えている)は、範囲を設定している区間の端の点で飽和しています。出力yは、uと同じ次元です。そして、出力yの要素は、[-1,1]の範囲の値になります。
y = udecode(u,n,v)
は、出力yが範囲[-v,v](vのデフォルト値は1です)の中に入るようにuを復号化します。
y = udecode(u,n,v,' は、SaturateMode')
uを復号化し、文字列'SaturateMode'に従って、入力のオーバフロー([-v,v]の範囲外の要素)を取り扱います。文字列には、つぎのいずれかを使います。
'saturate':飽和オーバフロー。これは、オーバフローを取り扱うデフォルトの方法です。uの値が設定範囲 [-2n/2, (2n/2) - 1]を超える要素は、この区間の端の点の近いほうの値を採用します。[0 2n-1]を超える要素は、この区間の端の点の近いほうの値を採用します。wrap': つぎの書式に従って、値を処理します。uの値が設定範囲 [-2n/2, (2n/2) - 1] を超える要素は、u = mod(u+2^n/2,2^n)-(2^n/2))の式を使って、設定範囲に入るように処理します。n-1] を超える要素は、u = mod(u,2^n)の式を使って、設定範囲に入るように処理します。例題
u = int8([-1 1 2 -5]); % 符号付き8ビットの整数文字列を作成 ysat = udecode(u,3) % 3ビットの整数文字列に復号化 ysat = -0.2500 0.2500 0.5000 -1.0000
uの中の最後の要素は飽和して、デフォルトのピーク入力値1になっていることに注意してください。ピーク入力値を変更しましょう。
ysatv = udecode(u,3,6) % ピーク入力値を 6 に設定します。 ysatv = -1.5000 1.5000 3.0000 -6.0000
これでも、最後の要素はまだ飽和しています。もう一つの処理法を使ってみましょう。
ywrap = udecode(u,3,6,'wrap') ywrap = -1.5000 1.5000 3.0000 4.5000
yprec = udecode(u,5) yprec = -0.0625 0.0625 0.1250 -0.3125
アルゴリズム
アルゴリズムは、ITU-T Recommendation G.701に設定されている一様復号化の定義を忠実に実現しています。整数入力値は、2n個の一様に分布している整数値の一つを範囲[-v, v]の中の量子化された浮動小数点数に一様にマッピングします。許される最小の整数入力値が -v に、最大の整数入力値がvに、マッピングされます。オーバフローしている値は、設定に従って、処理されます。
参考
uencode 浮動小数点データの量子化や符号化
参考文献
General Aspects of Digital Transmission Systems: Vocabulary of Digital Transmission and Multiplexing, and Pulse Code Modulation (PCM) Terms, International Telecommunication Union, ITU-T Recommendation G.701, March, 1993.
| tripuls | uencode | ![]() |