![](/img/trans.png)
[英]Does numpy.fft2 results produce results that follow standard ordering as described in numpy.fft documentation?
[英]Accelerate and NumPy produce different results for FFT
我正在为CoreML构建功能工程流水线,并且需要对数据执行FFT。 问题在于,加速框架的结果和NumPy FFT的结果是不同的。
迅速:
public func fft(_ input: [Double]) -> [Double] {
var real = [Double](input)
var imaginary = [Double](repeating: 0.0, count: input.count)
var splitComplex = DSPDoubleSplitComplex(realp: &real, imagp: &imaginary)
let length = vDSP_Length(floor(log2(Float(input.count))))
let radix = FFTRadix(kFFTRadix2)
let weights = vDSP_create_fftsetupD(length, radix)
vDSP_fft_zipD(weights!, &splitComplex, 1, length, FFTDirection(FFT_FORWARD))
var magnitudes = [Double](repeating: 0.0, count: input.count)
vDSP_zvmagsD(&splitComplex, 1, &magnitudes, 1, vDSP_Length(input.count))
var normalizedMagnitudes = [Double](repeating: 0.0, count: input.count)
vDSP_vsmulD(sqrt(magnitudes), 1, [2.0 / Double(input.count)], &normalizedMagnitudes, 1, vDSP_Length(input.count))
vDSP_destroy_fftsetupD(weights)
return normalizedMagnitudes
}
蟒蛇:
def fft(series: pd.Series):
f = np.fft.fft(series)
fa = np.abs(f)
return pd.Series(fa)
我对每种方法都使用相同的100个值。
我想这与规范化部分有关,但我什至不确定两个数组是否包含相同的内容,例如:
我只对积极的幅度感兴趣。
编辑:
这是NumPy图:
这是加速图:
我希望有人能帮帮忙 :)
如果加速返回幅度的平方,结果与python
相同。
public func fft(_ input: [Double]) -> [Double] {
....
return magnitudes.map{sqrt($0)}
}
您可能会发现哪个不是当前。 如果要使用加速,可以使用以下方法:
public func fft(_ input: [Double]) -> [Double] {
....
var normalizedMagnitudes = [Double](repeating: 0.0, count: input.count)
var count : Int32 = Int32(input.count)
vvsqrt( &normalizedMagnitudes, &magnitudes, &count )
vDSP_destroy_fftsetupD(weights)
return normalizedMagnitudes}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.