iOS 是否内置了时间序列平滑,比如内核或高斯? (也许在 CoreImage 或 CoreAudio 中?)

Does iOS have time-series smoothing, say kernel or gaussian, built in? (Perhaps in CoreImage or CoreAudio?)

假设你有一个 1000 CGFloats

的数组
...
at 13.0:   1000.001
at 14.0:   1152.934
at 15.0:   1000.909
at 16.0:   1200.666
...

而且您需要一个任意值的值

平滑(13.40)== 大约 1085,比方说

所以,我们正在谈论类似 内核平滑 - 一个 window 函数。比如

优秀文章:https://en.wikipedia.org/wiki/Kernel_smoother

iOS GPU 框架之一是否内置了类似的东西?

计算机经常做这种事情是很常见的,尤其是在图形子系统中。

如何在 GPU 上 iOS 中执行此操作...也许在核心音频或 Compute 堆栈中? (当然在Swift中手工操作很容易)

iOS 设备上的 Accelerate Framework 中有 vDSP 函数,其中包括函数,例如 vDSP_biquad() 和 vDSP_deq22()(以及 Swift 等价物),可用于构建 IIR 低通滤波器。

您还可以使用 vDSP 函数进行卷积,例如 vDSP_conv() 和 Swift 等效的 convolve(),以及它们的 2D 版本,用于卷积 FIR 滤波。

低通滤波器可用于非常高质量的平滑,只要要平滑的数据比低通滤波器的脉冲响应的重要部分长得多,或者是整数周期的。

Apple 声称通过使用 arm64 上可用的 VLIW 功能单元,他们的 vDSP 功能得到了高度加速 CPU。

对于任何在这里谷歌搜索的人来说,一个接近解决方案的问题 - 基本上 "get smooth values between array points" - 就是使用苹果自己的系统,苹果在 [=34] =](每个动画、淡入淡出等)。

幸运的是,这里有一篇来自 Apple 的优秀初学者文章:

https://developer.apple.com/documentation/accelerate/vdsp/linear_interpolation_functions/use_linear_interpolation_to_construct_new_data_points


有点相关,总是有机会提醒真正令人惊叹的 "best friend of every iOS/droid engineer":

https://cubic-bezier.com/#.17,.67,.81,1.2

使用方法: