Ios 如何交错实数和复数数组以使用vDSP_ctoz?
swift语法在过去几年中发生了变化,这段代码已经不再有效了Ios 如何交错实数和复数数组以使用vDSP_ctoz?,ios,swift,Ios,Swift,swift语法在过去几年中发生了变化,这段代码已经不再有效了 var zerosR = [Float](count: windowSizeOverTwo, repeatedValue: 0.0) var zerosI = [Float](count: windowSizeOverTwo, repeatedValue: 0.0) var cplxData = DSPSplitComplex( realp: &zerosR, imagp: &zerosI ) let xAsComp
var zerosR = [Float](count: windowSizeOverTwo, repeatedValue: 0.0)
var zerosI = [Float](count: windowSizeOverTwo, repeatedValue: 0.0)
var cplxData = DSPSplitComplex( realp: &zerosR, imagp: &zerosI )
let xAsComplex = UnsafePointer<DSPComplex>( inputSignal.withUnsafeBufferPointer { $0.baseAddress } )
vDSP_ctoz( xAsComplex, 2, &cplxData, 1, vDSP_Length(windowSizeOverTwo) )
vDSP_fft_zrip( setup, &cplxData, 1, log2n, FFTDirection(kFFTDirection_Forward) )
var zerosR=[Float](计数:windowSizeOverTwo,repeatedValue:0.0)
var zerosI=[Float](计数:windowSizeOverTwo,repeatedValue:0.0)
var cplxData=DSPSplitComplex(realp:&zerosR,imagp:&zerosI)
设xAsComplex=UnsafePointer(inputSignal.withUnsafeBufferPointer{$0.baseAddress})
vDSP_ctoz(示例复杂,2和cplxData,1,vDSP_长度(windowSizeOverTwo))
vDSP_fft_zrip(设置和cplxData,1,log2n,fft方向(KFFT方向_前进))
此代码的每一行都显示Swift 4下的错误
除了这一行,我能转换所有的东西
let xAsComplex = UnsafePointer<DSPComplex>( inputSignal.withUnsafeBufferPointer { $0.baseAddress } )
让xAsComplex=UnsafePointer(inputSignal.withUnsafeBufferPointer{$0.baseAddress})
不使用此错误编译的
无法将“UnsafePointer”类型的值转换为预期值
参数类型“UnsafePointer”
指向
inputSignal
数组中Float
元素存储的指针必须反弹,以指向DSPComplex
值的数组:
let inputSignal: [Float] = ...
inputSignal.withUnsafeBufferPointer {
floatPtr in
floatPtr.withMemoryRebound(to: DSPComplex.self) {
cmplxPtr in
vDSP_ctoz(cmplxPtr.baseAddress!, 2, &cplxData, 1, vDSP_Length(windowSizeOverTwo) )
}
}
有关更多信息,请参见
请注意,这些指针仅在闭包执行期间有效,不能传递到外部。你在这里做了什么
let xAsComplex = UnsafePointer<DSPComplex>( inputSignal.withUnsafeBufferPointer { $0.baseAddress } )
让xAsComplex=UnsafePointer(inputSignal.withUnsafeBufferPointer{$0.baseAddress})
实际上依赖于未定义的行为。什么是
inputSignal
?inputSignal
是一个浮点数组