2011-06-22 16 views
2

私は最近、固定小数点のコーディングに取り組んでいます。固定小数点の開発

ADCから16ビットのサンプルがあり、16ビットのフィルタ係数で乗算すると、結果は32ビットの固定小数点数になる可能性がありますか?今は32ビットの固定小数点DSPをターゲットにしているので問題ありません。しかし、別の16ビットの固定小数点係数で何かを掛けたいのであれば、私はオーバーフローを起こすでしょうか?それで中間裁断を行う必要があるのですか?最終的に私は結果を16ビットDACに送る必要があるので、とにかく切り捨てられます。

これをMATLABで経験した人はいますか?

EDIT固定小数点ツールボックスがあります。私が理解できないことは、今は16ビットのワード長の数値を設定し、最大の製品長を16に設定し、別の16ビットのワードでそれを乗算するとエラーになります。固定小数点ツールボックスが本当に私を助けてくれるのか、エラーを防ぐためにすべての切り捨てを実行する必要がある場合はどうすればいいですか?私は、私の入力が16ビットで32ビットレジスタを持っていることを考えれば、固定小数点ツールボックスを使用して最良の丸め/オーバーフロー条件を保証する方法の例を探しています。

おかげ

+1

Matlabには固定小数点ツールボックスがありますが、私はそれにアクセスできないと推測しています。それは本当にあなた自身に実装されています。これらの目的のために既に書かれた可能性のあるコードについては、Mathworks Webサイトを検索することもできます。 – Phonon

+0

@Phonon私は固定小数点ツールボックスを持っています。編集をご覧ください、ありがとうございます。 – NickHalden

答えて

4

あなたが述べたように、16ビットの乗算は32ビットの結果をもたらす可能性があります。続けて、固定小数点表記法が16.16であると仮定しています。

2回目の乗算を実行するには、まず最初のmulの結果を16ビット戻します。結果が現在の16.16形式に戻ったので、2番目のmul(「...別の16ビットの固定小数点係数で乗算したい場合は...」)に進んでください。この2回目の乗算の後、結果を16ビットシフトして16.16表記を復元します。

DACの値を出荷する前に、固定小数点表記を残して整数型に戻す必要があると思います。これを行うには、値を16ビットだけシフトします。固定小数点表記を残す前に、結果を丸めることを検討することがあります。正の固定小数点数を仮定すると、最終的な右シフトの前に結果に0.5fを加算することによってこれを達成できます。 (16.16では、0.5fは2^15です。)

いつものように、連続的な固定小数点演算は、左辺のオーバーフローを避けるために注意深く検討する必要があります。オーバーフローを防ぐために、操作を並べ替えたり、因数分解することができます。ウェブには、tutorialを助ける多くの良いチュートリアルがあります。

matlabで固定小数点演算を実行する場合、ビットシフト機能は使用するのに十分です:reference。もちろん、固定小数点ツールボックスを使用すると、これをすべて簡単に行うことができます。

+0

私は固定小数点ツールボックスを持って、私の質問の編集を参照してください。 – NickHalden

関連する問題