Inverse Fourier Transform

I have opened a wave using the load wave, load general text...the data in the wave is in the frequency domain and I am trying to inverse fourier transform it to get it into the time domain, however using the analysis fourier transform in Igor I am not able to do this.

Am I doing this wrong, Is there a way I can do this in Igor?

Any help is appreciated.
Hello Cheryl,

I suspect you tried using the Fourier Transforms dialog and found that you could not inverse transform a real 1D wave.

If you are new to IGOR you may not know that sometimes dialogs do not provide all the functionality that is available in IGOR operations. This is done so as to simplify and attempt to enforce "good practices".

If you simply want to Fourier transform your real wave you can execute on the command line:

IFFT myRealWave

This simple instruction though has implicit assumptions about your data and it helps to understand how IGOR handles Fourier Transforms. If you just loaded your wave it must have default wave scaling. In order for your transform or inverse transform to work you must apply to your wave whatever wave scaling is needed in order for it to represent the correct frequency units. You should also check if your wave contains the full symmetric spectrum or just the positive half and in that case also find if it includes the DC term or not. In most situations you can set the DC term to zero -- it corresponds to subtracting the mean value in the time domain.

In typical application your frequency domain data contain the non-negative part with the other half implied by symmetry. This however implies that your time-domain data are real. If that is the case then you should convert your wave from real to complex, set the imaginary part to zero and then use the IFFT. Here are the relevant commands:

matrixop/o myComplexWave=cmplx(myRealWave,0)
SetScale/P x 0,(df),"", myComplexWave // df is the delta frequency in your input
IFFT myComplexWave

I hope this helps,

A.G.
WaveMetrics, Inc.
Thank you for your response, it was very helpful.

I am now having a problem with displaying the results in a graph. The code looks like:

//IFFT

//Load Wave
General text load from "25molH2O.txt"
LoadWave is unable to find column names on line 1
Data length: 5000, waves: wavex, waveS(Q,w)

//Make wave complex and apply to wave wave scaling needed so it represents the correct frequency units

matrixop/o ComplexwaveS(Q,w)=cmplx(waveS(Q,w),0)
SetScale/P x 0,(0.02),"", ComplexwaveS(Q,w) // 0.02 is the delta frequency in your input

//Plot IFFT

WaveStEx=IFFT ComplexwaveS(Q,w)
Display waveStEx
Label bottom "Time"
Label left "Probability"

I have tried to graph different functions and a graph window never opens.

Can anyone tell me what I am doing wrong with the display command? is there something else I should be putting in to open a new window?


Thanks.
Cheryl wrote:

WaveStEx=IFFT ComplexwaveS(Q,w)
Display waveStEx
Label bottom "Time"
Label left "Probability"

Thanks.


The problem isn't with the Display command, but rather with the IFFT command. IFFT isn't a function that returns a value, it's what we call an operation. It acts on a potentially complicated set of inputs and produces a potentially complicated set of outputs. In the case of IFFT, you would write it like

IFFT/DEST=WaveStEx ComplexwaveS

To learn more about IFFT, you can execute this command on Igor's command line:

DisplayHelpTopic "IFFT"

I think you would also benefit from looking at the Getting Started manual and doing the Guided Tour that's part of Getting Started. You can look at this documentation by executing this command:

DisplayHelpTopic "Getting Started"

Another good source for learning how to do these things in Igor is here:

DisplayHelpTopic "Working with Commands"

John Weeks
WaveMetrics, Inc.
support@wavemetrics.com