Math.net Fourier не работает, как ожидалосьC#

Место общения программистов C#
Ответить
Anonymous
 Math.net Fourier не работает, как ожидалось

Сообщение Anonymous »

Я пытался найти решение уже несколько недель, и я прочитал все темы, связанные с этой темой, поэтому я надеюсь, что кто -то может помочь мне с этим. Вместо того, чтобы дать мне разумные результаты, я получаю только значения NAN. < /P>
У меня есть следующий код: < /p>

Код: Выделить всё

public FFTPerformer(float[] soundvalues)
{
buffer = new System.Numerics.Complex[4096];
try {
for (int i = 0; i < 4096; i++)
{
System.Numerics.Complex tmp = new System.Numerics.Complex(soundvalues[i], 0);
buffer[i] = tmp;
}
}
catch(Exception ex)
{
System.Windows.MessageBox.Show("Es ist ein Fehler bei der Konvertierung des float arrays zum Complex-Array aufgetreten; " + ex.Message);
}
}
< /code>
4096 обычно заменяется более высоким числом, которое все еще является силой двух, но даже не работает с этим.public void performFFT()
{
try
{
MathNet.Numerics.IntegralTransforms.Fourier.Forward(buffer, MathNet.Numerics.IntegralTransforms.FourierOptions.Matlab);
}
catch(Exception ex)
{
System.Windows.MessageBox.Show("Fehler: " + ex.Message);
}
}
< /code>
Немного более подробное описание: < /p>
Я устанавливаю длину для 4096 значений, потому что это фактор двух, и эта длина только для тестовых целей, так что это немного быстрее, чем использование оригинального звукового файла некоторых миллионов значений; Это также является причиной странной для петли. Несмотря на то, что Math.net использует алгоритм Bluestein для расчета, в любом случае попробуйте его с фактором из двух массивов, потому что они просто должны работать, даже если они используют какой-либо другой алгоритм в данный момент. Все они имеют y = 0, но x зависит от аудиофайла (прочитанного в другом потоке, что y-значения не нужны для аудио FFT, поэтому вы должны установить их на 0). Все x-значения являются нормальными плавающими числами, нет NANS. Но все же, FFT просто дает массив, полный NANS. множество. Я проверил все шаги конверсии на предмет последовательности, и в этой области все в порядке. Это все, что мне нужно сделать?MathNet.Numerics.IntegralTransforms.Fourier.Forward(buffer, MathNet.Numerics.IntegralTransforms.FourierOptions.Matlab);
или, мне нужно что -то перед этим, чтобы сделать чистый FFT в math.net?


Подробнее здесь: https://stackoverflow.com/questions/355 ... s-expected
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»