问题描述
我正在尝试计算来自加速度计的信号的FFT。但是,缩放的幅度远未达到。我尝试将其按比例缩小2(如某些人建议的那样)不起作用,并且也按采样率按比例缩小。
下面有两个图,第一个是时域,第二个是频域。 Signal timeDom high amplitude和 Correct peak Freq.,wrong amplitude
如果时域中的振幅较低(有办法将其从图形中删除)并用峰值打印频率,则初始值也会有问题。 Signal timeDom low amplitude和 High amplitude 0Hz,hides real freq..
我的FFT代码:
func fft(signal: [Float]) -> [Float]{
// The length of the input
let length = vDSP_Length(signal.count)
let log2n = vDSP_Length(floor(log2(Float(length*2))))
let fftSetup = vDSP_create_fftsetup(log2n,FFTradix(kFFTradix2))!
var forwardInputReal = [Float](signal)
var forwardInputImag = [Float](repeating: 0,count: Int(length))
var forwardOutput = DSPSplitComplex(realp: &forwardInputReal,imagp: &forwardInputImag)
/// --- Compute FFT @available only after iOS13
/*
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: &magnitudesX)
//for i in magnitudesX{
// magnituteXVariable.append(i/Float(length/2))
//}
magnituteXVariable = magnitudesX
}
}
}
}
*/
vDSP_fft_zrip(fftSetup,&forwardOutput,1,log2n,Int32(FFT_FORWARD))
var fftMag = [Float](repeating: 0.0,count: Int(length/2))
vDSP_zvmags(&forwardOutput,&fftMag,vDSP_Length(length/2))
vDSP_destroy_fftsetup(fftSetup)
return fftMag
}
预先感谢!
P.S我需要使用zip或zrip,因为该应用程序应可用于iOS13之前的版本。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)