MATLAB Solving FFT Problems with MATLAB and FFTW in C

  • Thread starter Thread starter birdhen
  • Start date Start date
AI Thread Summary
The discussion centers on challenges faced when calculating the potential of a system from overdensity using Fast Fourier Transforms (FFT) in MATLAB and FFTW. The equation phi(k) = -del(k)/(k^2) is used, where del represents overdensity and k is the wavenumber. A specific issue arises when k equals zero, as division by zero is not possible. Various attempts to resolve this, such as setting phi(k) to zero or leaving it as del(k), have proven unsatisfactory. The results of the inverse FFT consistently yield a sine wave instead of the expected cubic function. A suggested solution involves setting up a grid of points that excludes k=0, potentially requiring a phase shift to correct the FFT output.
birdhen
Messages
31
Reaction score
0
Hi there,

I am having trouble with some Fast Fourier Transforms.
I have been using both MATLAB and FFTW in c.
The problem is that I want to calculate the potential of a system from the overdensity. The equation in Fourier space is simple

phi(k)= -del(k)/(k^2) ,

where del is the overdensity, phi is the potential and k is the wavenumber.

To test this I use a simple del(x) = x, and feed this into the fft. I then run through the k values and divide through by k squared. When k =0, I am not sure what to do as obviously you can't divide by zero.
I have tried a variety of things such as setting phi(k) = 0 when k=0, or just leaving phi(k) = del(k)..both of which I am sure are wrong.

When I reverse FFT this phi(k), my result is always a sine wave with a wavelength the size of the x range, where as I am expecting (1/6)*x^3.

I am having trouble finding the answer online. Maybe I am searching for the wrong thing. Can anyone help?
Best wishes,
 
Physics news on Phys.org
birdhen said:
When k =0, I am not sure what to do as obviously you can't divide by zero.
I have tried a variety of things such as setting phi(k) = 0 when k=0, or just leaving phi(k) = del(k)..both of which I am sure are wrong.
The best choice here is to set up a grid of points such that ##k=0## is not included. This may require a shift that will add a complex phase to the result of the FFT, which can then be removed.
 

Similar threads

Replies
9
Views
3K
Replies
16
Views
2K
Replies
2
Views
3K
Replies
16
Views
14K
Replies
6
Views
2K
Replies
10
Views
3K
Replies
1
Views
2K
Back
Top