使用 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 (将#修改为@)