如何将以下指针从Swift 2初始化为Swift 3?将指针从Swift 2转换为Swift 3
var values: [Double]
...
var valuesAsComplex : UnsafeMutablePointer<DSPDoubleComplex>?
values.withUnsafeBufferPointer { (resultPointer: UnsafeBufferPointer<Double>) -> Void in
valuesAsComplex = UnsafeMutablePointer<DSPDoubleComplex>(resultPointer.baseAddress)
}
更新: 感谢您的所有答案。 将@Aderstedt指针永久重新绑定指示工作,但返回结果不会。有任何想法吗?
// Create result
var result = [Double](repeating: 0.0, count: N/2)
var resultAsComplex : UnsafeMutablePointer<DSPDoubleComplex>?
result.withUnsafeMutableBytes {
resultAsComplex = $0.baseAddress?.bindMemory(to: DSPDoubleComplex.self, capacity: result.count)
}
// Do complex->real inverse FFT.
vDSP_fft_zripD(fftSetup!, &tempSplitComplex, 1, LOG_N, FFTDirection(FFT_INVERSE));
// This leaves result in packed format. Here we unpack it into a real vector.
vDSP_ztocD(&tempSplitComplex, 1, resultAsComplex!, 2, N2);
// Neither the forward nor inverse FFT does any scaling. Here we compensate for that.
var scale : Double = 0.5/Double(N);
vDSP_vsmulD(&result, 1, &scale, &result, 1, vDSP_Length(N));
return result
您能否提供一个*自包含的*示例来说明问题?有了投入,产出和预期产出? –
谢谢@ martin-r !!!我想创建一个使用iOS相机的心率监视器。我正在以30fps的速度读取后置摄像头的图像,并将图像的平均色调存储在一个阵列中,为了去除噪声,我想使用FFT和Accelerate框架创建一个带通滤波器。 我在github中分享了我的代码https://github.com/codifilo/camera-heart-rate/blob/master/CameraHeartRate/FFT.swift#L119 – codifilo
究竟哪些方法无效? - 请注意,寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现**的最短代码。一个明确的问题陈述对其他读者没有用处。另请参阅:如何创建[mcve]。 –