Преобразование массива с плавающей точкой в массив UnsafePointer<DSPComplex>
У меня есть этот массив поплавков, созданный так
var myArray : [Float] = []
Этот массив имеет 256 элементов, реальная часть. Все мнимые части равны нулю.
Мне нужно сделать
vDSP_ctoz(anArray, 2, &output, 1, vDSP_Length(n/2))
но этот API требует anArray
быть UnsafePointer<DSPComplex>
Как я конвертирую myArray
в этот формат?
2 ответа
Решение
Обычные массивы могут передаваться как UnsafePointer
Так что этот фрагмент должен работать,
var myArr = [Float]()
var arr = [DSPComplex]()
for number in myArr {
var dsp = DSPComplex(real: number, imag: 0)
arr.append(dsp)
}
Просто передайте это обр.
Если целью является заполнение 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)