Get a amplitude sequence from a signal sequence using Short-Time-Fourier-Transform method.
int fft_stft_complex( d_complex * vSig, int iSigSize, double * vWindow, int iWinSize, double dSFeq, int iShiftPts, int iFftLen, int iSteps, d_complex * pOutComplex, double * pAmp, double * dScaleTime, double * dScaleFreq )
Returns 0 for success or error codes for failure.
EX1
//Assume in the current worksheet, the first is signal sequence, the second is the //window data to be applied. #include <..\originlab\fft.h> void fft_stft_complex_sample() { Worksheet wks = Project.ActiveLayer(); if(!wks) { out_str("worksheet invalid"); return; } Dataset dsReal(wks, 0); Dataset dsImg(wks, 1); Dataset dsWin(wks, 2); vector<complex> vecSig; vector<complex> vecResult; vector vecReal, vecImg, vecWin; int iSigSize, iWinSize, iShift, iPadding; double dScaleX, dScaleY, dSFeq = 0.1; vecReal = dsReal; vecImg = dsImg; vecWin = dsWin; vecSig.MakeComplex(vecReal, vecImg); iSigSize = vecSig.GetSize(); iWinSize = vecWin.GetSize(); iShift = 5; //specify a number just as you wish iPadding = 10; int iSteps = iSigSize/iShift; vecResult.SetSize(iSteps * (iWinSize+iPadding)); int ret = fft_stft_complex(vecSig, iSigSize, vecWin, iWinSize, dSFeq, iShift, iPadding, iSteps, vecResult, NULL, &dScaleX, &dScaleY); if (ret != 0) { out_str("Fail call"); } }
fft.h