2013-11-14 4 views
0

Я пишу приложение, которое будет анализировать данные с акселерометра. Одним из наиболее важных алгоритмов для этого является, очевидно, FFT, и после долгих поисков я обнаружил, что библиотека Exocortexs является одной из лучших для этого.Не удается получить Exocortex FFT для работы

Во всяком случае, когда я пытаюсь реализовать его, я получаю это исключение:

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, который есть, является мнимым.

Заранее благодарен!

ответ

2

Я собираюсь выйти на конечности здесь и предполагают, что ваш vectorLength переменная неa power of 2.

Попробуйте обрезать ваши данные таким образом, чтобы его новая длина L = N^2, where integer N > 1. Возникли ли исключения?

Ожидаете ли вы, что ваш сигнал носит периодический характер? Подходит ли он к некоторому механизму, вращающемуся/трясущимся на довольно устойчивой частоте? Если нет, что бы вы надеялись извлечь из БПФ?

+0

Большое спасибо @FredrikRedin, я чувствую себя таким глупым, но, конечно, это проблема. Исключение исчезло, и алгоритм работает так, как ожидалось! То, что я пытаюсь сделать, это найти неисправности машин, а затем FFT очень полезен, так как большинство неисправностей (дисбаланс, несущие ошибки и т. Д.) Можно найти как кратность RPM. – user2950764

+0

FFT - отличный выбор для вашей задачи! PS: Я сделал магистерскую диссертацию именно на этом (!): Предсказал ухудшение механических передач с использованием методов обработки сигналов. Совет. Не игнорируйте боковые полосы вокруг вашей основной гармонической частоты (кратные RPM), они могут быть результатом фазовой модуляции, которую вы ожидаете возникнуть, когда время зацепления/заклинивания вращательных компонентов становится неравномерным (чтение: увеличенная дисперсия) из-за к ухудшению. PPS: FFTW - еще одна отличная библиотека FFT, используемая многими. http://www.fftw.org/ – Fredrik

Смежные вопросы