用于在 iOS 中显示 FFT 的高性能图表

Posted

技术标签:

【中文标题】用于在 iOS 中显示 FFT 的高性能图表【英文标题】:High performance graph for showing FFT in iOS 【发布时间】:2014-07-09 18:29:57 【问题描述】:

我正在编写一个实时显示多个 FFT 图的应用程序。我一直在使用视图进行绘图,但这开始真正消耗我的 CPU 能力,因为 UIViews 在 CPU 上绘制它们的内容。我正在寻找一种绘制 FFT 图的解决方案,它将操作从 ipad 的 CPU 转移到 GPU。

到目前为止,我想到的解决方案似乎要么尝试使用 CALayers 并使图中的每个数据点(其中 512 个)成为单独的层,要么尝试使用 OpenGL 来绘制我的图,这是 wayyyyyy超出我的深度....我知道这是一个模糊的问题,但我希望这里的某个人能够更聪明地了解如何在 GPU 上绘制我的 FFT 图并释放一些处理器能力。

【问题讨论】:

您是否对此进行了测量以验证绘图是受限因素,而不是例如 FFT 计算?您从现有解决方案中获得了什么性能?您目前如何绘制图表?您是否需要渲染所有 512 个数据点(即视图至少有 512 个点宽)?您如何(以及多久)触发重绘? 如果您还没有进行测量。 “Core Animation”、“Time Profiler”以及可能还有“CPU Monitor”的组合可能是了解当前情况的良好开端。 【参考方案1】:

要在 ios 设备上快速(30 或 60 fps)绘制大型复杂的 2D 图形,可能必须使用 Open GL 以在 GPU 上保持大部分图形渲染。任何核心图形或原始位图绘制到 UIView 或 CALayer 中不仅需要大量 CPU 周期,而且将大型纹理上传到 GPU 纹理缓存,这将达到带宽限制。

【讨论】:

我怀疑答案会是 Open GL,但我真的被它的学习曲线吓到了。我最终在 link 找到了一个很好的教程,其中包含一个相应的 git 项目,它使我能够通过画一条线开始。从那里开始,向线添加更多点并创建类似于 fft 图的东西相当容易。用随机值填充它,我可以在快速测试中使用几乎不使用 CPU 的 30 FPS 轻松绘制图表。感谢您的建议!

以上是关于用于在 iOS 中显示 FFT 的高性能图表的主要内容,如果未能解决你的问题,请参考以下文章

带有 SQL 后端的高性能仪表板

FFT 使用 C++ 定点优化 ARM 设备的性能

提高 Python 中的 FFT 性能

awrcrt更新到2.03

基于canvas实现的高性能跨平台的股票图表库--clchart

iOS5上的跳跃/不正确的光谱仪