Я пытаюсь преобразовать чередующийся вектор DSPComplex
в вектор DSPSplitComplex
, используя vDSP_ctoz
из библиотеки Swift Accelerate. Последняя строка кода ниже выдает ошибку Segmentation fault: 11
Я не понимаю, почему vDSP_ctoz
пытается получить доступ к внешней памяти, когда я выделил большие векторы и пытаюсь обработать только небольшое количество элементов. Векторы имеют размер 2048, а аргумент для N
(количество элементов для обработки) в vDSP_ctoz
равен 1.
Я также пытался использовать разные значения шага и N
при вызове vDSP_ctoz
, но безрезультатно.
// set stride values
let dspComplexStride = MemoryLayout<DSPComplex>.stride
let dspSplitComplexStride = MemoryLayout<DSPSplitComplex>.stride
// make interleaved vector
var interleaved = UnsafeMutablePointer<DSPComplex>.allocate(capacity: 2048)
for index in 0..<16 {
interleaved[index] = DSPComplex(real: Float(2*index), imag: Float(2*index+1))
}
// make split vector
var splitComplex = UnsafeMutablePointer<DSPSplitComplex>.allocate(capacity: 2048)
vDSP_ctoz(
interleaved, dspComplexStride, splitComplex, dspSplitComplexStride, 1
)