2
從MathNet測試FFT時我遇到一些問題: 這個想法是,如果我將FFT應用於高斯變量的特徵函數,我應該找到高斯密度函數。C#MathNet FFT定義
當我繪製VectorFFT時,該圖似乎是一個密度函數,但是它的值爲零,它沒有值1,它的值爲1.4689690914109。
縮放必定存在一些問題。我嘗試使用Fourier.Inverse中的所有類型的FourierOptions和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);
}
FFT實現了離散傅立葉變換。 DFT與(連續)傅立葉變換不同。 –