組み込みアプリケーション用の固定小数点三角法


9

組み込みアプリケーションで回転(およびその他の)変換を行う必要があります。これには、sin()、cos()およびtan()関数が必要です。私はあなたがルックアップテーブルを使用できることを知っています、そしてそれは私が自分の研究をすることを見つけることができた唯一の解決策ですが、そこに良い固定小数点トリガーライブラリがありますか?

アプリケーションにcortex M3を使用することを考えているので、アプリケーションをすばらしく保つために、できるだけ浮動小数点から離れたいと思います。


2つの考え:回転の従来のプリミティブ実装はCORDICアルゴリズムです。また、ベンダーが、検討していたM3と競合するCortex M4を提供しているかどうかを確認することもできます。
Chris Stratton、2013年

4
ルックアップテーブルを使用したくないのはなぜですか。それは罪とcosのために非常にうまく機能します。sinとcosをアルゴリズムで行うと、時間がかかります。唯一の利点は、使用されるプログラムメモリ領域が少ないことですが、それはアプリケーションで本当に重要ですか?
Olin Lathrop 2013年

@OlinLathrop、私は他の人が見つけたものを知りたいです:おそらく私が見つけていないメモリ空間を節約しながら少しのエラーで問題をすばやく解決するいくつかの効率的な方法はありますか?私が知っていることから(そして私は間違っている可能性があります)、標準ライブラリを使用してアルゴリズムで解決するための最大の問題は、すべての計算が浮動小数点で行われ、FPUなしですべて数値で行わなければならないことです。これは恐ろしく非効率的です。 ..ルックアップテーブルの最大の問題は、次のとおりです。また、その精度要件が変更された場合でも、プログラムメモリは十分ですか?
ボブ

どのくらい正確が必要ですか?適度なサイズのルックアップテーブルは、ほとんどの組み込みsin / cosニーズに十分対応できます。1025テーブルエントリを使用すると、4096の角度解像度が得られます。その時点で、線形相互運用により、テーブルエントリ間の精度が向上します。サインルックアップに関する多くの誤った神話があるようです。詳細については、electronics.stackexchange.com / a / 16516/4512で私の回答を参照してください。
Olin Lathrop 2013年

私はあなたの言っていることを聞き、正弦関数のルックアップテーブルの概念を理解しましたが、コードが制限されている場合(プロジェクトは常にコード空間を満たす)、これを処理するよりコンパクトな方法はありますか?それが私が尋ねた理由です:そこに貢献している才能のある人々がたくさんいます、そして彼らがより良い何かを見つけたかどうか知りたいのですが。
ボブ

回答:


6

組み込みアプリケーションで三角法を行うための優れたアプローチは、必要な関数に多項式近似を使用することです。コードはコンパクトで、データはいくつかの係数で構成され、必要な演算は乗算と加算/減算だけです。多くの組み込みシステムにはハードウェア乗算器があり、優れたパフォーマンスを提供します。


1
誰かが、浮動小数点命令を使用しない組み込みアプリケーション用に最適化されたCのこのバージョンをリリースしましたか?多項式近似のいずれかの側に高いエラーがあるため、異なるセグメントに異なる多項式を使用してエラーを減らすなどのトリックを使用するのに適しています...
Bob

1
ジェネリックCは、非整数の固定小数点データ型と演算を直接サポートしていないため、このデータ型の最適化は、プラットフォーム固有のものになる傾向があります。たとえば、ほとんどのDSPは、ハードウェアで固定小数点の小数データ型を直接サポートしています。Cから、独自のライブラリを介してこれにアクセスします。
Dave Tweed


ジェネリックCは_Fractデータ型を通じてサポートを得ていますが、ほとんどのマイクロコントローラー実装にはベンダー固有のライブラリがあります。私はすべての固定小数点のニーズにlibmathq15を使用しています。これまでに仕事をしました。
slightlynybbled

_Fract私のがらくたの一部です。それがC委員会によって「標準化」されたという事実は嫌いです。多くの状況では意味をなさないすべてに対してQ15またはQ31を使用することを強制し、それらの状況の助けなしに立ち往生してしまいます。
Jason S

3

このために固定小数点Cortexライブラリを使用することに反対していますか?

q31_t arm_sin_q31(q31_t x)
Q31データの三角関数正弦関数の高速近似。

から:

CMSIS-DSP:さまざまなデータタイプ用の60を超える関数を含むDSPライブラリコレクション:固定小数点(小数q7、q15、q31)および単精度浮動小数点(32ビット)。ライブラリは、Cortex-M0、Cortex-M3、およびCortex-M4で使用できます。

2次補間のルックアップテーブルを使用しますが、かなり高速です。これを線形補間に適用すると、速度は上がりますがエラーが増えます。

また、Cortex M4に必ずしもFPUが搭載されているわけではないことにも注意してください。もしそうなら「M4F」と呼ばれるのを見たことがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.