あふれと精度

ADSP-2191のアキュームレーターは40ビットあります。これは符号1ビット、整数部8ビット、小数部31ビットからなる固定的な書式を持ち、多桁の演算をささえるに足るビット数です。

16x16ビットの符号付き固定小数点乗算の積は小数部が30ビットからなります。また、その絶対値は±1の範囲におさまります。このことから、40ビットのアキュームレーターは16ビットの積和を256回繰り返しても決して丸め誤差もあふれによる誤差も生じないことがわかります。ところが、257回やると様相が変わってきます。

積和を257回以上おこなうと、あふれが生じる可能性が出てきます。ADSP-2191は±1の範囲を超える数に対しては後から飽和演算を行うことができますが、40ビットアキュームレーターからあふれ出てしまう演算に対してはなすすべなくラップ・アラウンドを起こします。つまりFIRフィルタのタップ数が256を超えると、比較的安全な飽和をとれずにラップ・アラウンドが起きる可能性があるということです。

実際には256を超えるタップ数といってもそれほど気をつける必要はありません。例えば係数列は正の数と負の数が混ざって出てきますので、少々大きなタップ数であっても中間結果が打ち消しあって安全な処理が可能です。

他方で、これはシステムとして安定であっても正しい結果でないという点では問題です。なんにせよ大きなタップ数となると話は別です。低域を扱う長いフィルタに極低周波が入力されると、計算結果があふれることは多分に発生します。このばあい演算結果は異常になります。

FIRフィルタの出力最大値がどのくらいの大きさになるかは、インパルス応答h(k)のL1ノルムと呼ばれる値を計算することで計算できます。h(k)のL1ノルムとは|h(k)|の総和です。

この対策として多倍精度演算をソフトウェアで行う例が多くあります。このためにははじめから多倍精度演算を行えるようアーキテクチャーが設計されていなければなりません。そういったDSPであれば、最小のステップ数で多倍精度化できます。このアプローチでは整数部に割り当てるビット数を増やして中間結果のあふれを避けるのが普通です。

ADSP-2191はこういったアプローチに向いていません。一応桁上げのための機構はありますが、多倍精度演算を行うにはあまりにもレジスタ数が少なく、また三項演算命令とはいえ、結果を格納するレジスタが固定されているという不自由さもあります。

適材適所ともいいますので。多倍精度演算を行わなければならないようならはじめからより高級なプロセッサを使ったほうがいいのではないか、よく考えて設計を進める必要があります。

⇒次はDSPマイコン

2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |