Swift - 加速框架的卷积

时间:2016-01-06 06:47:31

标签: swift convolution

我正在尝试使用Accelerate框架进行一维卷积。

我可以让它发挥作用,但经过几次实验后似乎出了问题。

这是我的代码:

import Accelerate

var N = 10000
var M = 10
var convN = N + M - 1

var xf = [Float](count:N, repeatedValue:0.0)
var yf = [Float](count:M, repeatedValue:0.0)

for i in 0..<N {
    xf[i] = Float(i+1)
}
for i in 0..<M {
    yf[i] = Float(i+1)
}

var outputf = [Float](count:convN, repeatedValue:0.0)

// padding zero
xf = [Float](count:convN-N, repeatedValue:0.0) + xf

var ptr_xf = UnsafePointer<Float>(xf)
var ptr_yf = UnsafePointer<Float>(yf).advancedBy(yf.count-1)

vDSP_conv(ptr_xf, 1, ptr_yf, -1, &outputf, 1, vDSP_Length(convN), vDSP_Length(M))
print("[Float]: \(outputf)")

我使用不同的NM编译并运行它。

然后我用python包numpy的结果检查结果。

有时它看起来很棒,但有时它会给我一些奇怪的结果,如:

N = 6,M = 3)

Correct: [1.0, 4.0, 10.0, 16.0, 22.0, 28.0, 27.0, 18.0]

Result I get: [1.0, 4.0, 10.0, 16.0, 22.0, 28.0, 2.23692e+08, 4.47384e+08]

我在这里错过了吗? 我无法弄清楚我做错了什么。

1 个答案:

答案 0 :(得分:0)

它与你的Swift版本有关吗?我使用的是V 3.0.2,以下代码适用于我。

NF