将浮点数组转换为UnsafePointer <dspcomplex>数组

时间:2019-02-11 20:14:47

标签: ios arrays swift cocoa vdsp

我有这样创建的浮点数组

var myArray : [Float] = []

此数组有256个元素,是实数部分。所有虚部均为零。

我需要做一个

vDSP_ctoz(anArray, 2, &output, 1, vDSP_Length(n/2))

但是此API要求anArrayUnsafePointer<DSPComplex>

我如何将myArray转换为这种格式?

2 个答案:

答案 0 :(得分:1)

如果要从给定的实部和虚部为零的情况下填充DSPSplitComplex,则无需先创建交错的复数数组,然后调用vDSP_ctoz()。您可以分配内存并直接从Float数组填充它:

let realParts : [Float] = [1, 2, 3, 4]
let len = realParts.count

let realp = UnsafeMutablePointer<Float>.allocate(capacity: len)
realp.initialize(from: realParts, count: len)
let imagp = UnsafeMutablePointer<Float>.allocate(capacity: len)
imagp.initialize(repeating: 0.0, count: len)

let splitComplex = DSPSplitComplex(realp: realp, imagp: imagp)

答案 1 :(得分:0)

普通数组可以作为UnsafePointer传递

因此该代码段应该有效,

var myArr = [Float]()
var arr = [DSPComplex]()
for number in myArr {
     var dsp = DSPComplex(real: number, imag: 0)
     arr.append(dsp) 
} 

只需将其传递给我们。