如何解决使用 vDSP 时出现错误访问异常
我正在尝试使用 vDSP 快速执行 FFT,但是当我调用 absolute
函数时,我收到错误访问异常:Thread 3: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
。我怀疑我在使用不安全指针时在管理内存方面犯了一些错误,但我无法弄清楚它是什么。
static func test(signal: [Float]) -> [Float] {
let length = vDSP_Length(signal.count)
let log2n = vDSP_Length(ceil(log2(Float(length * 2))))
let fftSetup = vDSP.FFT(log2n: log2n,radix: .radix2,ofType: DSPSplitComplex.self)!
var forwardInputReal = [Float](signal) // copy the signal here
var forwardInputImag = [Float](repeating: 0,count: Int(length))
var forwardOutputReal = [Float](repeating: 0,count: Int(length))
var forwardOutputImag = [Float](repeating: 0,count: Int(length))
var magnitudes = [Float](repeating: 0,count: Int(signal.count))
forwardInputReal.withUnsafeMutableBufferPointer { forwardInputRealPtr in
forwardInputImag.withUnsafeMutableBufferPointer { forwardInputImagPtr in
forwardOutputReal.withUnsafeMutableBufferPointer { forwardOutputRealPtr in
forwardOutputImag.withUnsafeMutableBufferPointer { forwardOutputImagPtr in
// Input
let forwardInput = DSPSplitComplex(realp: forwardInputRealPtr.baseAddress!,imagp: forwardInputImagPtr.baseAddress!)
// Output
var forwardOutput = DSPSplitComplex(realp: forwardOutputRealPtr.baseAddress!,imagp: forwardOutputImagPtr.baseAddress!)
fftSetup.forward(input: forwardInput,output: &forwardOutput)
vDSP.absolute(forwardOutput,result: &magnitudes)
}
}
}
}
return magnitudes
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。