如何解决如何将float数组的插值平滑到更大的数组中?
我在Swift中一直插值。有人可以帮我吗?
我想将float数组(例如[0,100,25,0]
)插入到具有给定大小(例如 128 )的另一个数组中。我找到了一篇文章(Use Linear Interpolation to Construct New Data Points),其中显示了如何实现这些目标。
- 使用
vDSP_vgenp
和 的线性插值
- 使用
vDSP_vlint
进行平滑处理(但不是出于我的目的)
问题是两种技术都无法实现我的期望,Screenshot 3中对此进行了说明。如何使插值分布更平滑?我想看到一个类似立方体的曲线。
初始图:
线性插值:
import Accelerate
let n = vDSP_Length(128)
let stride = vDSP_Stride(1)
let values: [Float] = [0,0]
let indices: [Float] = [0,11,23,34,46,58,69,81,93,104,116]
var result = [Float](repeating: 0,count: Int(n))
vDSP_vgenp(values,stride,indices,&result,n,vDSP_Length(values.count))
平滑插值:
import Accelerate
import AVFoundation
let n = vDSP_Length(1024)
let stride = vDSP_Stride(1)
let values: [Float] = [0,0]
let denominator = Float(n) / Float(values.count - 1)
let control: [Float] = (0 ... n).map {
let x = Float($0) / denominator
return floor(x) + simd_smoothstep(0,1,simd_fract(x))
}
var result = [Float](repeating: 0,count: Int(n))
vDSP_vlint(values,control,vDSP_Length(values.count))
解决方法
在我看来vDSP_vqint
二次插值函数可以解决此问题。参见https://developer.apple.com/documentation/accelerate/1449942-vdsp_vqint上的讨论。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。