Я пытался найти решение уже несколько недель, и я прочитал все темы, связанные с этой темой, поэтому я надеюсь, что кто -то может помочь мне с этим. Вместо того, чтобы дать мне разумные результаты, я получаю только значения 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?
Я пытался найти решение уже несколько недель, и я прочитал все темы, связанные с этой темой, поэтому я надеюсь, что кто -то может помочь мне с этим. Вместо того, чтобы дать мне разумные результаты, я получаю только значения NAN. < /P> У меня есть следующий код: < /p> [code]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); [/code] или, мне нужно что -то перед этим, чтобы сделать чистый FFT в math.net?