我正在编写一个应用程序来分析来自加速度计的数据。对此最重要的算法之一显然是FFT,经过多次研究后我发现Exocortexs库是最好的算法之一。
无论如何,当我尝试实现它时,我得到了这个例外:
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in Exocortex.DSP.v1.dll
Additional information: must be a power of 2
以下是代码:
class FFT
{
public Exocortex.DSP.ComplexF[] FourierTransform(List<double> vector)
{
//Dictionary<string, List<double>>
int vectorLength = vector.Count;
Exocortex.DSP.ComplexF[] complexData = new Exocortex.DSP.ComplexF[vectorLength];
for (int i = 0; i < vectorLength; ++i)
{
complexData[i].Re = Convert.ToSingle(vector[i]); // Add your real part here
// complexData[i].Im = 2; // Add your imaginary part here
}
Exocortex.DSP.Fourier.FFT(complexData, Exocortex.DSP.FourierDirection.Forward);
return complexData;
(这只是这个例子的一个版本:Fast Fourier Transform in C#)。
这个问题可能就像加速度的虚部一样简单,因为我认为这种数据只是真实的,但答案是FFT,这就是虚数。
提前致谢!
答案 0 :(得分:2)
我会在这里走出困境并建议你的 vectorLength 变量不一个a power of 2
。
尝试裁剪您的数据,使其新的长度为L = N^2, where integer N > 1.
是否可以获得异常?
您是否期望您的信号具有周期性?它是否以相当稳定的频率旋转/摇动某些机构?如果没有,你希望摆脱使用FFT?