У меня есть некоторая проблема при тестировании БПФ из MathNet: идея состоит в том, что если я применяю БПФ к характеристической функции гауссовой переменной, я должен найти гауссову функцию плотности.
Когда я рисую VectorFFT, фигура кажется функцией плотности, но в нуле она не имеет значения 1, она имеет значение 1,4689690914109.
Должны быть проблемы с масштабированием. Я пробовал все типы FourierOptions в Fourier.Inverse и все типы делений/умножений для PI, 2PI, sqrt(2PI), но ничто не дает мне значение 1 в центре функции плотности.
Кроме того, поскольку существуют различные определения преобразования Фурье и обратного ему, мне было интересно, какое из них реализовано MathNet, я не смог найти его в документации.
Любые идеи?
public void DensityGaussian()
{
double eta = 0.1; //step in discrete integral
int pow2 = 256; // N^2
double mu = 0; // centred gaussian
double sigma = 1; // with unitary variance
//FFT
double lambda = 2 * System.Math.PI / (pow2 * eta);
double b = 0.5 * pow2 * lambda;
Complex[] VectorToFFT = new Complex[pow2];
for (int j = 0; j < pow2; j++)
{
double z = eta * j;
if (z == 0) { z = 0.00000000000001; }
VectorToFFT[j] = System.Numerics.Complex.Exp(new Complex(0, b * z));
VectorToFFT[j] *= (System.Numerics.Complex.Exp(new Complex(
-sigma*sigma*z*z, mu * z))); //char function of gaussian
}
Fourier.Inverse(VectorToFFT, FourierOptions.NoScaling);
//scaling
for (int i = 0; i < pow2; i++)
{
VectorToFFT[i] /= (2 * System.Math.PI); //test
}
Console.WriteLine("Is density?");
Assert.IsTrue(1 == 1);
}