I determined a distribution dist = SmoothKernelDistribution[ListOfValues];. Then I determined the FT of the PDF, which is the CharacteristicFunction. For testing purposes I want to show, that the InverseFourierTransform will give me back the PDF. But the InverseFourierTransform is very slow.

Convince yourself. ListOfValues ist just a bunch of zeros:

    {0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0.}

For some reason the execution

cf1[w_] = CharacteristicFunction[dist, w];
Plot[{10*Norm[cf1[w]], Arg[cf1[w]]}, {w, 0.001, 2}]

gives me the following CF: CF of a dirac?

That thing should be constant. Maybe it's just an issue with SmoothKernelDist. Anyway, the expression InverseFourierTransform[cf1[w], w, t] takes so long, that I cant even tell if it would ever give a useful result.

How can I perform the InverseFT? My goal is to find the inverse of a convolution, for example: 'a' convolved with 'b' gives 'c'. Given 'a' and 'c', I want to find 'b'. Doing this in Fourierspace should theoretically be , at least symbolically easier?


As a compromise, instead of InverseFourierTransform I could used something like

tf[t_] := 
  Sqrt[1/(2 \[Pi])]
    NIntegrate[cf1[\[Omega]] *Exp[-I*\[Omega]*t], {\[Omega], 0, 2}];

and then do a pointwise evaluation. That would lead to:

ListPlot[Table[Norm[tf[t]], {t, 10, 11, 0.1}]]


and the actual pdf should look like this:

Plot[PDF[dist[1], x], {x, 10, 11}]


Not only that they don't match. I also had to take the Norm because otherwise the numerical one would be complexvalued.

  • $\begingroup$ The procedure you are describing as your goal is called "deconvolution". See the Mathematica commands 'ListDeconvolve' and 'ImageDeconvolve'. $\endgroup$
    – bill s
    Feb 28 '16 at 16:06
  • $\begingroup$ Why is it a bad idea, to perform the deconvolution using FourierTransform? I tried ListDeconvolve, but it is very noisy, and I can only recognize something useful after applying a lowpassfilter. $\endgroup$ Feb 28 '16 at 18:55
  • $\begingroup$ In the FT approach you basically end up dividing one magnitude spectrum by another. When the spectrum in the denominator is small, this can be inaccurate. But of course this depends on the problem. $\endgroup$
    – bill s
    Feb 28 '16 at 19:30

Your question seems to raise more questions than it could raise answers.

  • If you want to show that the InverseFourierTransform will give you back the original PDF, why not do this for a simple PDF? Why are you doing it with a Smoothed kernel density estimate (which is, in in-built Mma, a numerical interpolated routine). Have you actually checked what you are actually working with?

For example:

  lis = {0, 0, 0};
  dist = SmoothKernelDistribution[lis];
  PDF[dist, z]

returns an InterpolatingFunction object. How do you expect Mma to find the Characteristic Function of this, or even worse, to then find the InverseFourierTransform of the latter??

  • Why do you want the Characteristic Function anyway? How will it help you? What will you do with it, in the context of a smoothed kernel density estimate?

  • It is possible to derive an exact symbolic construct for a smoothed kernel density estimator, though I am not sure that the in-built mma funcs do it. The NPKDE (non-parametric kernel density estimator) function in the mathStatica add-on package does this.

For example, given:

 data = {a,b,c};

... and for a given kernel g, say an Epanechnikov kernel:

 g = (3/4)*(1 - x^2);     domain[g] = {x, -1, 1}; 

... and any arbitrary bandwidth bin, the symbolic non-parametric kernel density estimator, calculated at an arbitrary point x is:

   NPKDE[x, data, bin, g]


(source: tri.org.au)

As you can see, the structures are not trivial, and deriving characteristic functions, or even worse, then trying to invert them, is frankly unrealistic.

  • $\begingroup$ Yes, that's true. Actually it was wrong to ask, whether it is possible to show the identity. I described above my intend: My goal is to find the inverse of a convolution, for example: 'a' convolved with 'b' gives 'c'. Given 'a' and 'c', I want to find 'b'. The only way I know, is to work in the frequency domain, and then perform an inverse transformation in the end. EDIT: I am going to reformulate the problem. $\endgroup$ Feb 28 '16 at 14:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.