Преобразование массива с плавающей точкой в ​​массив UnsafePointer <DSPComplex> - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть этот массив с плавающей точкой, созданный следующим образом

var myArray : [Float] = []

Этот массив содержит 256 элементов, реальная часть.Все мнимые части равны нулю.

Мне нужно сделать

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

, но для этого API требуется anArray, чтобы быть UnsafePointer<DSPComplex>

Как я конвертирую myArrayв этот формат?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Если намерение состоит в том, чтобы заполнить 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)
0 голосов
/ 11 февраля 2019

обычные массивы могут передаваться как UnsafePointer

Так что этот фрагмент должен работать,

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

Просто передайте этот массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...