And*_*ima 5 android android-ndk
我想寻求有关磁力计采样率和抖动的一些帮助。我正在与一些人一起开展一个涉及高速磁场采样应用程序的项目。尽管我们已经开发了一种算法来解决我们遇到的抖动和其他问题,但我们希望以某种方式提高采样率,同时,如果可能的话,尝试减少采样抖动。提高采样率将使我们的应用程序获得更好的结果。我们使用的是 Samsung Nexus S,根据我们执行的测试,我们观察到采样率在 15 毫秒到 20 毫秒之间,有时在 50 毫秒左右达到峰值(这是在连续事件之间)。
我们采取了不同的方法来尝试制定解决这些问题的方案,但迄今为止尚未取得任何成功。首先,我们考虑修改当前的磁力计 (AK8973) 设备驱动程序,但我们很快意识到瓶颈不可能存在,因为设备驱动程序直接实现正确的传感器操作模式、数据读取并尊重传感器硬件时序约束。作为第二种选择,我们使用 Android NDK 开发了一段小代码来获取样本,以将连续事件之间(即样本之间)获得的时间与 Java 级别开发的代码进行比较。遗憾的是,结果几乎是一样的。作为最后的替代方案,我们目前正在尝试了解 API 如何处理事件并将其传递给 Java。也就是说,如果存在瓶颈,我们会尝试更改代码来解决问题。然而,我们不确定瓶颈是在底层硬件还是软件 API 中。
我们用于 NDK 的代码基于 Android 文档 (NativeActivity) 提供的示例以及我们通过谷歌搜索找到的其他一些示例(谷歌组和其他文章)。我们发现的文章非常有趣(本机采样、传感器采样性能)。尽管据报道本机采样可以提供更好的性能,但在我们的例子中,这似乎并没有发生。
我们想知道是否真的有可能获得更高的采样率,或者是否有人已经开发出解决方案。瓶颈是在软件层面还是硬件层面?在上面引用的文章中,提到自定义库 (FreeMotion) 作为原始传感器库的替代品能够提供更好的性能结果,因为它直接与驱动程序配合使用。有人以前使用过这个库吗?如果是的话,您能给我们提供您的结果吗?
对于另一款智能手机 Samsung Galaxy Nexus,我们决定收集更多磁力计数据样本并进行一些统计分析,并将获得的结果与 Samsung Nexus S 进行比较。这次我们使用 Android v4.1.2。同样,我们观察到,在将 NDK 与 SDK API 与两款智能手机进行比较时,我们能够收集数据的速率并没有显着提高,分别使用ASensor_getMinDelay()和中的值SENSOR_DELAY_FASTEST,这可以提供最大的性能。然而,对于具有 NDK API 的智能手机来说,时间戳抖动的减少非常重要,无论使用哪种方法:轮询或基于回调。一般来说,轮询提供的结果很少或没有更好的结果,并且应该更加占用 CPU 资源。
三星 Galaxy Nexus 传感器硬件要优越得多,因此可以对所需事件速率进行细粒度调整,当然,速率高于ASensor_getMinDelay()。然而,对于三星 Nexus S 来说,这是不可能的。对于较低的速率,无法满足目标速率,并且以更慢的速率采集样本。激活多个传感器,总体抖动减少效果比仅使用单个传感器更大。
| 归档时间: |
|
| 查看次数: |
1758 次 |
| 最近记录: |