固定小数点プログラム開発の手間を省ける組み込み機器向けDSPコアを開発 ──15人日でMP3デコーダを開発可能に
●固定小数点では信号処理品質が開発者の能力に依存
次に,開発する組み込み機器にこの機能検証用モデルを実装します.機能検証用モデルをターゲット・プロセッサ用のプログラムに変換するわけです.ターゲット・プロセッサが浮動小数点演算ユニット(FPU;floating point unit)を備えている場合,この変換作業は簡単です.それは,機能検証用モデルで用いる算術方式と,ターゲット・プロセッサの算術方式が一致しているからです.機能検証用モデルを,ターゲット・プロセッサ用コンパイラを用いてコンパイルすると,必要なターゲット・プロセッサ用プログラムが生成されます.
次に,固定小数点しか扱えないプロセッサを用いた場合を考えます.図2では,固定小数点でカバー可能な値域が複数表示されています.指数を持たない固定小数点データ・フォーマットでは,仮数が表現できる値域は-1.0と1.0の間に固定されます.これでは自然界の信号を表現できません.そこで,プログラムの中で指数を設定し,広い値域に対応します.ある一つの固定小数点値を,状況に応じて読み替えるわけです.プログラム内の設定によって,どのような値にも指数を設定できるので,理想的には浮動小数点よりも広い値域をカバーすることができます.
プログラム内で指数を設定できるということは,設定を誤る可能性もあるということです.指数の設定に誤りがあった場合,何が起こるのでしょうか?図2は,カバーする値の範囲(値域)によって,取りうる値の間隔(精度)が変化していくようすを示しています.このように,同じ値を表現する際に,設定した指数によって実現できる精度が変化します.指数をうまく設定して,カバーできる値の範囲と実際の信号が取る値の範囲を合わせれば,高い精度を達成できます.
カバーできる値の範囲を必要より狭く設定し,実際の信号値がその範囲を超えてしまった場合,その信号を表現できないという問題が発生します.この場合,カバーできる値の範囲の上限値/下限値で代用(クリッピング)します.クリッピングは,固定小数点を用いた信号処理の品質を低下させる要因の一つです.一方,クリッピングの発生を恐れるあまり,カバーできる値の範囲を広く取りすぎる可能性もあります.このような場合には,信号の精度が低下し,信号処理品質が劣化します.
「理論的に信号の取りうる値の範囲が決まるのだから問題ないはずだ」と考えられるかもしれません.しかし,理論的には取りうる値の範囲が-10.0から10.0までの信号を実際の機器の環境で測定したところ,ほとんどの場合について-5.0と5.0の間に信号が収まっていたというような例はよくあります.
固定小数点を用いて高い信号処理品質を達成するには,さまざまな入力信号を用いて,出力信号が実際にどのような値を取りうるのかを評価する必要があります.さらに,その評価に基づいて,ソフトウェア開発者が最適な指数値をプログラム中で設定する必要があります.このため,信号処理品質は評価作業を行う技術者,および評価結果に基づいて実際にプログラム中で指数の値を設定していくソフトウェア開発者のスキルに依存します.