quantiz
量子化インデックスと量子化された出力値を作成
構文
説明
例
quantiz
関数が分割とコードブックを使用してどのように実数ベクトル samp
を新規ベクトル quantized
(エントリは -1、0.5、2、または 3 のいずれか) に割り当てるかを示します。
サンプル データを生成し、partition
ベクトルと codebook
ベクトルを指定します。間隔が異なる個別のエンドポイントをベクトル要素の値として定義することにより、partition
ベクトルを指定します。partition
ベクトルで定義された各間隔の要素の値をもつ codebook
ベクトルを指定します。codebook
ベクトルは、partition
ベクトルより 1 要素長くなければなりません。
samp = [-2.4, -1, 0, 0.2, 0.8, 1.2, 2,3, 3.5, 5]; partition = [0, 1, 3]; codebook = [-1, 0.5, 2, 3];
データ サンプルを量子化します。入力サンプル データ、量子化インデックス、および入力データに対応する量子化された出力値を表示します。
[index,quantized] = quantiz(samp,partition,codebook); [samp; index; quantized]'
ans = 10×3
-2.4000 0 -1.0000
-1.0000 0 -1.0000
0 0 -1.0000
0.2000 1.0000 0.5000
0.8000 1.0000 0.5000
1.2000 2.0000 2.0000
2.0000 2.0000 2.0000
3.0000 2.0000 2.0000
3.5000 3.0000 3.0000
5.0000 3.0000 3.0000
スカラー量子化の性質を説明するために、この例では正弦波を量子化する方法を示します。元の信号と量子化された信号をプロットして、正弦曲線を構成する x 個のシンボルと、量子化された信号を構成するドットを対比させます。各ドットの垂直座標は、ベクトル コードブック内の値です。
t
で定義された時間にサンプリングされた正弦波を生成します。間隔が異なる個別のエンドポイントをベクトル要素の値として定義することにより、partition
入力を指定します。partition
ベクトルで定義された各間隔の要素の値をもつ codebook
入力を指定します。コードブック ベクトルは、分割ベクトルより 1 要素長くなければなりません。
t = [0:.1:2*pi]; sig = sin(t); partition = [-1:.2:1]; codebook = [-1.2:.2:1];
サンプリング後の正弦波で量子化を実行します。
[index,quants] = quantiz(sig,partition,codebook);
量子化された正弦波とサンプリング後の正弦波をプロットします。
plot(t,sig,'x',t,quants,'.') title('Quantization of Sine Wave') xlabel('Time') ylabel('Amplitude') legend('Original sampled sine wave','Quantized sine wave'); axis([-.2 7 -1.2 1.2])
大きな信号の集合に対し、微細な量子化方式を使用してパラメーターのテストや選択を行うのは手間のかかる作業です。分割パラメーターとコードブック パラメーターを簡単に生成する方法の 1 つは、一連の "学習データ" に従ってそれらを最適化することです。学習データは、量子化する典型的な種類の信号でなければなりません。
この例では、lloyds
関数を使用して、Lloyd アルゴリズムに従って分割およびコードブックを最適化します。このコードは、おおまかな初期推定から開始して、正弦波信号の 1 区間の分割とコードブックを最適化します。この例では、次に、quantiz
関数を 2 回実行し、最初の partition
入力および codebook
入力の値と、最適化された partitionOpt
入力および codebookOpt
入力の値を使用して、量子化されたデータを生成します。この例では、最初の量子化と最適化された量子化の歪みも比較します。
正弦波信号と初期量子化パラメーターの変数を定義します。lloyds
関数を使用して分割とコードブックを最適化します。
t = 0:.1:2*pi; sig = sin(t); partition = -1:.2:1; codebook = -1.2:.2:1; [partitionOpt,codebookOpt] = lloyds(sig,codebook);
初期および最適化後の分割ベクトルとコードブック ベクトルを使用して、量子化された信号を生成します。quantiz
関数は、平均二乗歪みを自動的に計算して 3 番目の出力引数として出力します。量子化の平均二乗歪みを初期および最適化後の入力引数と比較して、最適化された量子化値を使用すると歪みがどの程度少なくなるかを確認します。
[index,quants,distor] = quantiz(sig,partition,codebook);
[indexOpt,quantOpt,distorOpt] = ...
quantiz(sig,partitionOpt,codebookOpt);
[distor, distorOpt]
ans = 1×2
0.0148 0.0022
サンプリングされた正弦波、量子化された正弦波、および最適化後の量子化された正弦波をプロットします。
plot(t,sig,'x',t,quants,'.',t,quantOpt,'s') title('Quantization of Sine Wave') xlabel('Time') ylabel('Amplitude') legend('Original sampled sine wave', ... 'Quantized sine wave', ... 'Optimized quantized sine wave'); axis([-.2 7 -1.2 1.2])
入力引数
入力信号。ベクトルで指定します。この入力で、この関数で量子化を実行するためのサンプリング後の信号を指定します。
データ型: double
異なる範囲の明確な端点。行ベクトルとして指定します。この入力は、実数値の集合において、オーバーラップしないで隣接する値の範囲を定義します。この入力内にある値は厳密に昇順でなければなりません。このベクトルの長さは、分割区間数よりも 1 小さくなければなりません。
例: [0
, 1
, 3
] は、入力行ベクトルを 4 つのセット {X: X ≤ 0
}、{X: 0
< X ≤ 1
}、{X: 1
< X ≤ 3
}、および {X: 3 < X} に分割します。
データ型: double
各分割の量子化値。行ベクトルとして指定します。この入力は、スカラー量子化における各分割の値を規定します。このベクトルの長さは分割間隔の数と等しくなければなりません。つまり、このベクトルの長さは、partition
入力の長さより 1 長くなければなりません。
データ型: double
出力引数
量子化信号の平均二乗歪み。正のスカラーとして返されます。適切な分割値およびコードブック値を選択することによってこの歪みを減少させることができます。分割値とコードブック値の最適化の詳細については、関数 lloyds
を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)