固定小数点プログラム開発の手間を省ける組み込み機器向けDSPコアを開発 ──15人日でMP3デコーダを開発可能に
2.FitDSPの基本概念
「算術方式として浮動小数点を用いるとディジタル信号処理のアプリケーション・プログラムの開発は楽だが,ハードウェア・コストの問題から固定小数点演算プロセッサを使わざるを得ない」.これを突き詰めていくと,ソフトウェア/ハードウェアそれぞれに適した算術方式の不一致に問題がありそうです.
●算術方式の問題を解消するブロック浮動小数点
こうした算術方式の不一致の問題は,ブロック浮動小数点算術方式を用いて解決できます.ブロック浮動小数点ということばを初めて耳にされる読者の方も多いかもしれません.しかし,実はかなり古い技術です.筆者が知る限りでは,1963年のRounding Errors in Algebraic Processesという書籍1)の中ですでに一般的な考えかたとして紹介されています.
ブロック浮動小数点は,いわば固定小数点と浮動小数点のそれぞれの長所を組み合わせた算術方式です.複数のデータ・ワードを組(ブロック)とし,データ・ブロックに対して一つの指数を対応させます.指数は,データ・ブロック内で最大値を持つデータ・ワードが正規化されるように設定します.ここで,「正規化する」とは,(上位ビット方向へのシフトによって)仮数が冗長な符号ビットを含まない状態にすることを意味します.図1(c)がそのようすを示しています.
固定小数点で精度の低下を防ぐためには,指数をうまく設定して,実際の信号が取りうる値とカバーできる値の範囲を合わせればよいことを述べました.ブロック浮動小数点は,この指数の設定を入力データに合わせて自動的に行うための手法です.
「ブロック浮動小数点ということばを聞いたことのない読者の方が多いのではないか?」と予想するのには,理由があります.それは,ブロック浮動小数点をディジタル信号処理アプリケーションの実装に用いた例が,さほど多くないからです.
代表的な実用例は高速フーリエ変換(FFT:fast Fourier transform)です2).ご存じのようにFFTでは,同じデータに対して繰り返し演算を施します.さらに演算の途中結果を語長の長いアキュムレータに保持しておけず,いったん語長の短いデータ・メモリに格納しなければなりません.固定小数点を用いた場合,このような演算の繰り返しが精度を大きく低下させます.そのためにFFTの実装ではブロック浮動小数点を使うことがあります.