2.1.22.2.1.18 fft_complex
Description
Performs nFFT-point discrete Fourier transform or inverse Fourier transform.
vSig will be padded with zeros if it has less than nFFT points and truncated if it has more.
Syntax
int fft_complex( int nFFT, vector<complex> & vSig, FFT_SIGN iSign = FFT_FORWARD )
Parameters
- nFFT
- [input] number of points to do Fourier transform.
- vSig
- [Modify] the original signal to be transformed, and the result of the transform.
- iSign
- [input] the transformation to carry out
- = FFT_FORWARD: FFT (by default)
- = FFT_BACKWARD: IFFT.
Return
Returns OE_NOERROR for success or error codes for failure.
Examples
Prior to compilation, load fft_utils.c to the workspace by executing the following LabTalk command:
Run.LoadOC("Originlab\fft_utils.c", 16);
To retain fft_utils.c in the workspace for successive sessions, drag and drop the file from the Temporary folder to the System folder.
EX1
// This example assumes a worksheet is active with seven columns, where
// column 2 has the signal. Column 3, 4 will be filled with real/imaginary
// parts of the foward FFT result. Colummns 5, 6 will be filled with
// real/imaginary parts of the IFFT result. Column 7 will be filled with
// amplitude of IFFT result, which should then be same as column 2
#include <fft_utils.h>
void fft_complex_ex1()
{
Worksheet wks = Project.ActiveLayer();
Dataset dsData(wks, 1);
Dataset dsFFTRe(wks, 2);
Dataset dsFFTIm(wks, 3);
Dataset dsIFFTRe(wks, 4);
Dataset dsIFFTIm(wks, 5);
Dataset dsIFFTAmpl(wks, 6);
// If all datasets are valid, then proceed
if( dsData && dsFFTRe && dsFFTIm && dsIFFTRe && dsIFFTIm && dsIFFTAmpl)
{
vector<complex> vec;
vec = dsData;
int nSize = vec.GetSize();
// Perform forward FFT with exact size of signal
int iRet = fft_complex(nSize, vec);
if(0 != iRet )
{
printf("Forward FFT returned error: %d\n", iRet );
return;
}
// Store forward FFT result
vector vecTemp;
vec.GetReal(vecTemp);
dsFFTRe = vecTemp;
vec.GetImaginary(vecTemp);
dsFFTIm = vecTemp;
// Perform backward FFT from the forward FFT result
iRet = fft_complex(nSize, vec, FFT_BACKWARD);
if(0 != iRet )
{
printf("Backward FFT returned error: %d\n", iRet );
return;
}
// Store the backward FFT result
vec.GetReal(vecTemp);
dsIFFTRe = vecTemp;
vec.GetImaginary(vecTemp);
dsIFFTIm = vecTemp;
vec.GetAmplitude(vecTemp);
dsIFFTAmpl = vecTemp;
}
}
Remark
See Also
fft_real
Header to Include
fft_utils.h
Reference
|