磁力計のサンプリング レートとジッターに関して、助けを求めたいと思います。私は何人かの人々と一緒に、高速磁場サンプリング アプリケーションを含むプロジェクトに取り組んでいます。発生したジッターやその他の問題を回避するためのアルゴリズムを開発しましたが、何らかの方法でサンプリング レートを改善したいと考えています。サンプリング レートを改善すると、アプリケーションでより良い結果を得ることができます。Samsung Nexus S を使用しており、実行したテストによると、サンプリング レートが 15 ミリ秒から 20 ミリ秒の間であり、場合によっては 50 ミリ秒付近でピークに達することが観察されました (これは連続したイベントの間です)。
これらの問題に対する解決策を開発するためにさまざまなアプローチを試みてきましたが、これまでのところ成功していません。最初に、現在の磁力計 (AK8973) デバイス ドライバーを変更することを考えましたが、デバイス ドライバーが正しいセンサー動作モード、データ読み取りを直接実装し、センサー ハードウェアのタイミング制約を尊重するため、ボトルネックはそこにあり得ないことにすぐに気付きました。2 つ目の方法として、Android NDK を使用してサンプルを取得する小さなコードを開発し、連続するイベント間、つまりサンプル間で取得した時間を Java レベルで開発したコードと比較しました。残念ながら、結果はほとんど同じでした。最終的な代替手段として、現在、イベントが API によってどのように処理され、Java に渡されるかを理解しようとしています。とはいえ、ボトルネックがそこにある場合は、d 問題を解決するためにコードを変更してみてください。ただし、ボトルネックが基盤となるハードウェア API にあるのかソフトウェア API にあるのかはわかりません。
NDK に使用したコードは、Android のドキュメント (NativeActivity) で提供されている例と、グーグルで見つけた他の例 (Google グループやその他の記事) に基づいています。私たちが見つけた記事は非常に興味深いものです ( Native Sampling、Sensor Sampling Performance )。ネイティブ サンプリングによりパフォーマンスが向上することが報告されていますが、私たちの場合はそうではないようです。
より高いサンプリング レートを取得することが実際に可能かどうか、または誰かが既に解決策を開発しているかどうかを知りたいです。ボトルネックはソフトウェア レベルですか、それともハードウェア レベルですか? 上記の記事では、カスタム ライブラリ (FreeMotion) は、ドライバーと直接連携するため、元のセンサー ライブラリの代わりとして、より優れたパフォーマンス結果を提供できると述べられています。以前にこのライブラリを使用したことがある人はいますか? もしそうなら、結果を教えていただけますか?