我正在使用 Apple 的 Accelerate 框架。我正在使用 DSPSplitComplex 数字来处理复杂的向量。
我想创建一个过滤器库(过滤器数组)。为此,我遍历一个循环,并使用以下代码将结果添加到我的数组中:
func makeSine(freq:Float, N:Int) -> DSPSplitComplex {
var sreal:[Float] = Array(repeating: 0, count: N)
var simag:[Float] = Array(repeating: 0, count: N)
var compSine = DSPSplitComplex(realp: UnsafeMutablePointer(mutating:sreal), imagp: UnsafeMutablePointer(mutating:simag))
for i in 0..<t.count{
var x = 2 * Float.pi * freq * t[i]
sreal[i] = cos(x)
simag[i] = sin(x)
}
return compSine
}
上面的函数产生一个复杂的正弦波。我用以下方法调用该函数:
var s = makeSine(freq:400.0, N:2048)
我的问题是使用 DSPSplitComplex 我正在创建指向函数中初始化的数组的指针。我无法直接在 Xcode 的调试区域中检查变量 s,但是我使用以下代码实现了这一点:
var inspect:[Float]=[]
for i in 0..<t.count {
inspect.append(s.realp[I])
}
t.count 是过滤器的长度。将此数组的值与在 makeSine 函数中打印的值进行比较,它们都非常不同。因为这只是一个指针,我相信它没有传递实际值,并且这些数组正在被释放。
我的问题是我正在考虑迭代 makeSine(和其他函数)几百次,从而产生数百个 realp 和 imagp 数组。我如何以编程方式处理这些?