【发布时间】:2017-10-04 04:08:03
【问题描述】:
我在从 MathNet 测试 FFT 时遇到一些问题: 这个想法是,如果我将 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 与(连续)傅里叶变换不同。
标签: c# fft scaling probability-density mathnet-numerics